/// <summary>
        /// Gets the rules filtered by specified arguments.
        /// </summary>
        /// <param name="rulesFilterArgs">The rules filter arguments.</param>
        /// <returns></returns>
        public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs)
        {
            if (rulesFilterArgs is null)
            {
                throw new ArgumentNullException(nameof(rulesFilterArgs));
            }

            FilterDefinition <RuleDataModel> filterDefinition = MongoDbProviderRulesDataSource <TContentType, TConditionType>
                                                                .BuildFilterFromRulesFilterArgs(rulesFilterArgs);

            return(this.GetRulesAsync(filterDefinition));
        }
Example #2
0
        public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs)
        {
            IEnumerable <Rule <TContentType, TConditionType> > result = this.rules.AsEnumerable();

            if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType)))
            {
                result = result.Where(r => object.Equals(rulesFilterArgs.ContentType, r.ContentContainer.ContentType));
            }

            if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name))
            {
                result = result.Where(r => string.Equals(r.Name, rulesFilterArgs.Name));
            }

            if (rulesFilterArgs.Priority.HasValue)
            {
                result = result.Where(r => r.Priority == rulesFilterArgs.Priority.GetValueOrDefault());
            }

            return(Task.FromResult <IEnumerable <Rule <TContentType, TConditionType> > >(result.Select(r => r.Clone()).ToList()));
        }
        private static FilterDefinition <RuleDataModel> BuildFilterFromRulesFilterArgs(RulesFilterArgs <TContentType> rulesFilterArgs)
        {
            List <FilterDefinition <RuleDataModel> > filtersToApply = new List <FilterDefinition <RuleDataModel> >(3);

            if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType)))
            {
                filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.ContentType, rulesFilterArgs.ContentType.ToString()));
            }

            if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name))
            {
                filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.Name, rulesFilterArgs.Name));
            }

            if (rulesFilterArgs.Priority.HasValue)
            {
                filtersToApply.Add(Builders <RuleDataModel> .Filter.Eq(x => x.Priority, rulesFilterArgs.Priority.GetValueOrDefault()));
            }

            return(filtersToApply.Any() ? Builders <RuleDataModel> .Filter.And(filtersToApply) : Builders <RuleDataModel> .Filter.Empty);
        }
Example #4
0
        /// <summary>
        /// Gets the rules filtered by specified arguments.
        /// </summary>
        /// <param name="rulesFilterArgs">The rules filter arguments.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">rulesFilterArgs</exception>
        public Task <IEnumerable <Rule <TContentType, TConditionType> > > GetRulesByAsync(RulesFilterArgs <TContentType> rulesFilterArgs)
        {
            if (rulesFilterArgs is null)
            {
                throw new ArgumentNullException(nameof(rulesFilterArgs));
            }

            return(Task.Run(() =>
            {
                IEnumerable <RuleDataModel <TContentType, TConditionType> > ruleDataModels = this.inMemoryRulesStorage.GetAllRules();

                IEnumerable <RuleDataModel <TContentType, TConditionType> > filtered = ruleDataModels;

                if (!object.Equals(rulesFilterArgs.ContentType, default(TContentType)))
                {
                    filtered = filtered.Where(r => object.Equals(r.ContentType, rulesFilterArgs.ContentType));
                }

                if (!string.IsNullOrWhiteSpace(rulesFilterArgs.Name))
                {
                    filtered = filtered.Where(r => string.Equals(r.Name, rulesFilterArgs.Name, StringComparison.InvariantCultureIgnoreCase));
                }

                if (rulesFilterArgs.Priority.HasValue)
                {
                    filtered = filtered.Where(r => r.Priority == rulesFilterArgs.Priority);
                }

                return filtered.Select(r => this.ruleFactory.CreateRule(r)).ToList().AsEnumerable();
            }));
        }