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; })); }
/// <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); }
/// <summary> /// Defines the syntax rule. /// </summary> /// <param name="rule">The syntax rule.</param> public void Do(TRule rule) => this.build(rule);
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); }