protected TRule OptimizeAs <TRule>() where TRule : CompositeJsonRule, new()
 {
     return(Rules
            .Select(c => c.Optimize())
            .Aggregate(new TRule(), (c, next) =>
     {
         TRule and = next as TRule;
         if (and != null)
         {
             c.Rules.AddRange(and.Rules);
         }
         else
         {
             c.Rules.Add(next);
         }
         return c;
     }));
 }
示例#2
0
        /// <inheritdoc />
        public ConsensusRules Register <TRule>() where TRule : ConsensusRule, new()
        {
            ConsensusRule rule = new TRule()
            {
                Parent = this,
                Logger = this.loggerFactory.CreateLogger(typeof(TRule).FullName)
            };

            foreach (var dependency in rule.Dependencies())
            {
                var depdendency = this.consensusRules.Keys.SingleOrDefault(w => w.GetType() == dependency);

                if (depdendency == null)
                {
                    throw new Exception(); // todo
                }
            }

            this.consensusRules.Add(rule, rule);

            return(this);
        }
示例#3
0
文件: Parser.cs 项目: vetuomia/alto
 /// <summary>
 /// Defines the syntax rule.
 /// </summary>
 /// <param name="rule">The syntax rule.</param>
 public void Do(TRule rule) => this.build(rule);
示例#4
0
        public static IDataRule InitializeBase(FieldTypes generalType, bool isRandom, String fieldName, String fieldDataType, bool convertToString)
        {
            IDataRule result = null;

            switch (generalType)
            {
            case FieldTypes.Date:
                result = new DateRule();
                break;

            case FieldTypes.Time:
                result = new TimeRule();
                break;

            case FieldTypes.GUID:
                result = new GuidRule();
                break;

            case FieldTypes.Imported:
                //result = new
                break;

            case FieldTypes.MultiColumn:
                result = new MultiFieldDataSourceRule();
                break;

            case FieldTypes.SingleColumn:
                result = new SingleFieldDataSourceRule();
                break;

            case FieldTypes.Number:
                result = new NumberRule();
                break;

            case FieldTypes.String:
                result = new StringRule();
                break;

            case FieldTypes.Bool:
                result = new BoolRule();
                break;

            case FieldTypes.Dynamic:
            case FieldTypes.Type:
                result = new TRule();
                break;

            case FieldTypes.Enumerator:
                result = new EnumeratorRule();
                break;

            case FieldTypes.MappedSource:
                result = new MappedSourceRule();
                break;

            case FieldTypes.Collection:
                result = new CollectionRule();
                break;

            case FieldTypes.Tuple:
                result = new TupleRule();
                break;
            }

            result.ConvertToString = convertToString;
            result.FieldDataType   = fieldDataType;
            result.FieldName       = fieldName;
            result.IsRandom        = isRandom;
            result.RuleType        = generalType;
            return(result);
        }