예제 #1
0
        public virtual bool CanExecute(params string[] parameters)
        {
            if (Parameters.IsNullOrEmpty() && !parameters.IsNullOrEmpty())
            {
                return(false);
            }
            if (parameters.IsNullOrEmpty())
            {
                return(true);
            }

            var comparer = new StringEqualityComparer(false);

            var lastParam = parameters.Last();
            var paramCopy = (string[])parameters.Clone();

            if (lastParam.IsNumber())
            {
                paramCopy = paramCopy.Take(paramCopy.Length - 2).ToArray();
            }

            var result = paramCopy.All(p => Parameters.Contains(p, comparer));

            return(result);
        }
        public void MustNotBeEquals()
        {
            var firstString  = "Abc";
            var secondString = "Def";
            var isEquals     = new StringEqualityComparer().Equals(firstString, secondString);

            Assert.IsFalse(isEquals);
        }
        public void MustBeEquals()
        {
            var firstString  = "Abc";
            var secondString = "Ab" + ((Func <string>)(() => "c"))();
            var isEquals     = new StringEqualityComparer().Equals(firstString, secondString);

            Assert.IsTrue(isEquals);
        }
예제 #4
0
        public override Token[] Tokenize(IDictionary<string, OptionArity> options, IEnumerable<string> inputs)
        {
            /*
             * Cte postupne stringy ze vstupu. Pokud narazi na neco, co se rovna TreatAsArgumentMarkeru, vse za tim je cteno jako argument.
             * Pokud narazi na neco, co zacina LongOptionStarter, prida se OptionToken s dlouhym nazvem.
             * Pokud narazi na neco, co zacina ShortOptionStarter, pride se OptionToken pro kazdy char ve stringu.
             * Jinak se prida ArgumentToken.
             *
             * kdyz neco zacina uvozovkou (a take ji pak musi koncit), je to povazovano za argument, at je v tom cokoliv (vcetne mezer a OptionStarteru)
             */

            //TODO uvozovky

            inputs = PrepareInput(inputs);

            List<Token> tokens = new List<Token>();

            bool treatAsArgument = false;

            StringEqualityComparer stringEqualityComparer = new StringEqualityComparer(Culture, IgnoreCase);

            foreach (string input in inputs)
            {
                if (treatAsArgument)
                {
                    tokens.Add(new ArgumentToken(input));
                }
                else if (input.StartsWith(TextSymbol, IgnoreCase, Culture))
                {
                    Debug.Assert(input.EndsWith(TextSymbol, IgnoreCase, Culture), "Should end with " + TextSymbol);
                    string argument = input.Substring(TextSymbol.Length, input.Length - TextSymbol.Length * 2);
                    tokens.Add(new ArgumentToken(argument));
                }
                else if (stringEqualityComparer.Equals(input, TreatAsArgumentMark))
                {
                    treatAsArgument = true;
                }
                else if (input.StartsWith(LongOptionStarter, IgnoreCase, Culture))
                {
                    string option = input.Substring(LongOptionStarter.Length);
                    tokens.Add(new OptionToken(option));
                }
                else if (input.StartsWith(ShortOptionStarter, IgnoreCase, Culture))
                {
                    string option = input.Substring(ShortOptionStarter.Length);
                    foreach (char c in option)
                    {
                        tokens.Add(new OptionToken(c.ToString()));
                    }
                }
                else
                {
                    tokens.Add(new ArgumentToken(input));
                }
            }

            return tokens.ToArray();
        }
예제 #5
0
        public HandlebarsConfiguration()
        {
            var stringEqualityComparer = new StringEqualityComparer(StringComparison.OrdinalIgnoreCase);

            Helpers             = new ObservableIndex <string, IHelperDescriptor <HelperOptions>, StringEqualityComparer>(stringEqualityComparer);
            BlockHelpers        = new ObservableIndex <string, IHelperDescriptor <BlockHelperOptions>, StringEqualityComparer>(stringEqualityComparer);
            RegisteredTemplates = new ObservableIndex <string, HandlebarsTemplate <TextWriter, object, object>, StringEqualityComparer>(stringEqualityComparer);

            HelperResolvers            = new ObservableList <IHelperResolver>();
            TextEncoder                = new HtmlEncoder(FormatProvider);
            UnresolvedBindingFormatter = new Formatter <UndefinedBindingResult>(undef => string.Empty);
        }
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            using (var db = new MembershipContext())
            {
                var strComparer = new StringEqualityComparer();
                var users = db.Users.Where(u => usernames.Contains(u.UserName, strComparer)).Include(u => u.Roles).ToList();
                Role[] roles = db.Roles.Where(r => roleNames.Contains(r.RoleName, strComparer)).Select(r => r.RoleId).ToArray();

                if ((users != null && users.Count > 0) && (roles != null && roles.Length > 0))
                {
                    foreach (var user in users)
                    {
                        Role[] userRoles = user.Roles.Select(r => r.RoleId).ToArray();
                        Role[] missingRoles = roles.Where(r => !userRoles.Contains(r)).ToArray();
                        for (int i = 0; i < missingRoles.Length; i++)
                        {
                            user.Roles.Add(new UserUserRole() { RoleId = missingRoles[i] });
                        }
                    }
                    db.SaveChanges();
                }
            }
        }
        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            using (var db = new MembershipContext())
            {
                var strComparer = new StringEqualityComparer();

                UserUserRole[] userRoles = (from u in db.Users
                                            join ur in db.UserRoles on u.UserId equals ur.UserId
                                            join r in db.Roles on ur.RoleId equals r.RoleId
                                            where usernames.Contains(u.UserName, strComparer)
                                            && roleNames.Contains(r.RoleName, strComparer)
                                            select ur).ToArray();

                DbSet<UserUserRole> dbSet = db.Set<UserUserRole>();
                foreach (var uRole in userRoles)
                {
                    if (db.Entry(uRole).State == System.Data.EntityState.Detached)
                        dbSet.Attach(uRole);
                    dbSet.Remove(uRole);
                }

                if (userRoles.Length > 0) db.SaveChanges();
            }
        }
예제 #8
0
        /// <summary>
        /// Tokenizes the specified options.
        /// </summary>
        /// <param name="options">The options with their arities.</param>
        /// <param name="inputs">The input to tokenize.</param>
        /// <returns>A collection of tokens representing options and arguments.</returns>
        public override Token[] Tokenize(IDictionary<string, OptionArity> options, IEnumerable<string> inputs)
        {
            /*
             * Cte postupne vstupni stringy a rozhazuje je. Kdyz ma nejaky option nastaveny minimalni pocet argumentu n, tak
             * n stringu za nim bude povazovano za jeho argumenty.
             * Pri nastaveni maximalniho poctu argumentu bude vsechno, co nezacina na ShortOptionStarter, LongOptionStarter,
             * nebo na TreatAsArgumentMarkpovazovano povazovano za argument (po dosazeni minimalniho poctu argumentu).
             * Boolovske optiony nemusi mit za sebou zadny argument. meli by mit nastaveny pocet argumentu na 0.
             */

            inputs = PrepareInput(inputs);

            List<Token> tokens = new List<Token>();
            TreatMode treatMode = TreatMode.None;
            StringEqualityComparer stringEqualityComparer = new StringEqualityComparer(Culture, IgnoreCase);

            uint lastOptionArgumentCount = uint.MaxValue;
            OptionArity? lastOptionArity = null;

            foreach (string input in inputs)
            {
                if (treatMode == TreatMode.Argument)
                {
                    AddArgument(tokens, input);
                }
                else if (stringEqualityComparer.Equals(input, TreatAsArgumentMark))
                {
                    treatMode = TreatMode.Argument;
                    tokens.Add(new TreatAsArgumentToken());
                }
                else if (treatMode == TreatMode.OptionArgument)
                {
                    AddArgument(tokens, input, ref treatMode, ref lastOptionArgumentCount, ref lastOptionArity);
                }
                // tady uz je treatMode == TreatMode.None
                else if (input.StartsWith(LongOptionStarter, IgnoreCase, Culture))
                {
                    string option = input.Substring(LongOptionStarter.Length);
                    AddOption(tokens, option, options, ref treatMode, ref lastOptionArgumentCount, ref lastOptionArity);
                }
                else if (input.StartsWith(ShortOptionStarter, IgnoreCase, Culture))
                {
                    string option = input.Substring(ShortOptionStarter.Length);
                    Debug.Assert(option.Length == 1, string.Format("Unexpected short option: {0}", option));
                    AddOption(tokens, option, options, ref treatMode, ref lastOptionArgumentCount, ref lastOptionArity);
                }
                else
                {
                    AddArgument(tokens, input);
                }
            }

            return tokens.ToArray();
        }
예제 #9
0
 public StringExpression(String value, StringComparison comparison)
     : this(value, comparison, StringEqualityComparer.GetComparer(comparison))
 {
 }
        public void OneNullMustNotBeEquals(string firstString, string secondString)
        {
            var isEquals = new StringEqualityComparer().Equals(firstString, secondString);

            Assert.IsFalse(isEquals);
        }
예제 #11
0
 static StringEqualityComparer()
 {
     _inst = new StringEqualityComparer();
 }
예제 #12
0
        public override bool Validate(string value)
        {
            StringEqualityComparer stringEqualityComparer = new StringEqualityComparer(Culture, IgnoreCase);

            return allowedStrings.Contains(value, stringEqualityComparer);
        }
예제 #13
0
        public override object FromString(string value)
        {
            StringEqualityComparer stringEqualityComparer = new StringEqualityComparer(Culture, IgnoreCase);

            if (allowedStrings.Contains(value, stringEqualityComparer))
            {
                return value;
            }
            else
            {
                throw new NotImplementedException();
                //TODO vyhodit vhodnou vyjimku
            }
        }
예제 #14
0
    List <TMaster> GenerateObjects(Table table)
    {
        IEqualityComparer <object> comparer;
        var columnType = table.ColumnTypeMap[m_MasterKeyColumn];

        if (columnType == typeof(short))
        {
            comparer = new Int16EqualityComparer();
        }
        else if (columnType == typeof(int))
        {
            comparer = new Int32EqualityComparer();
        }
        else if (columnType == typeof(long))
        {
            comparer = new Int64EqualityComparer();
        }
        else if (columnType == typeof(Guid))
        {
            comparer = new GuidEqualityComparer();
        }
        else if (columnType == typeof(string))
        {
            comparer = new StringEqualityComparer();
        }
        else if (columnType == typeof(DateTime))
        {
            comparer = new DateTimeEqualityComparer();
        }
        else if (columnType == typeof(DateTimeOffset))
        {
            comparer = new DateTimeOffsetEqualityComparer();
        }
        else if (columnType == typeof(ulong))
        {
            comparer = new UInt64EqualityComparer();
        }
        else
        {
            throw new NotSupportedException($"Key column of type '{columnType.Name}' is not supported for Master/Detail collections.");
        }

        var groups = new Dictionary <object, List <Row> >(comparer);

        foreach (var row in table.Rows)
        {
            var key = row[m_MasterKeyColumn];
            if (key == null)
            {
                throw new MissingDataException($"A null was found in the master key column '{m_MasterKeyColumn}'");
            }

            if (!groups.TryGetValue(key, out var group))
            {
                group = new();
                groups.Add(key, group);
            }
            group.Add(row);
        }

        var result = new List <TMaster>();

        foreach (var group in groups.Values)
        {
            var master = MaterializerUtilities.ConstructObject <TMaster>(group[0], m_MasterConstructor, Converter);
            var target = m_Map(master);
            foreach (var row in group)
            {
                target.Add(MaterializerUtilities.ConstructObject <TDetail>(row, m_DetailConstructor, Converter));
            }
            result.Add(master);
        }

        return(result);
    }