Beispiel #1
0
        public static BusinessRule <T, object> AddRuleWithParam <T>(this T item, string formula)
            where T : EntityBase <T>
        {
            var index    = formula.IndexOf("=");
            var left     = formula.Substring(0, index);
            var right    = formula.Substring(index + 1);
            var compiler = new FormulaCompiler()
                           .WithType <T>().WithType <User>();

            var get = compiler.NewLambda()
                      .WithThis <T>()
                      .Returns <object>()
                      .CompileToExpression(left);

            var func = compiler.NewLambda()
                       .WithThis <T>()
                       .WithParam <User>("User")
                       .Returns <object>()
                       .CompileToExpression(right);
            var f = func.Compile();
            var r = new RuleFactory <T>();

            var rule = r.CreateBusinessRule(e => f(e, User.Current), get)
                       .WithModeAtStartup(BusinessRuleStartupMode.None)
                       .AnalyzeDependencies(func);

            item.Extensions.Rules.Add(rule);
            return(rule);
        }
Beispiel #2
0
        public void ValidateOnlyOnServerSide()
        {
            var f    = new RuleFactory <Product>();
            var rule = f.CreateBusinessRule(e => e.Quantity * e.NetPrice, e => e.GrossPrice)
                       .ValidateOnlyOnServerSide().Start();

            RuleContext.Strategy = () => RuleContextState.Client;
            var p = new Product {
                Quantity = 4, NetPrice = 5
            };

            p.Extensions.AddRuleFromPrototype(rule);
            p.Quantity = 5;

            p.GrossPrice.ShouldEqual(5 * 5);
            p.Extensions.BrokenRules.Count.ShouldEqual(0);

            RuleContext.Strategy = () => RuleContextState.Server;
            var p2 = new Product {
                Quantity = 4, NetPrice = 5
            };

            p2.Extensions.AddRuleFromPrototype(rule);
            p2.Quantity = 3;

            p2.GrossPrice.ShouldEqual(0);
            p2.Extensions.BrokenRules.Count.ShouldEqual(1);
        }
Beispiel #3
0
        public void CreateRules()
        {
            var factory = new RuleFactory <Entity>();

            factory.CreateActionRule(en => en.Name.ToString());
            factory.CreateActionRuleWithoutDependency(en => en.Name.ToString())
            .WithDependencies(en => en.Number);

            factory.CreateValidationRule(en => en.Number < 10);
            factory.CreateValidationRuleWithoutDependency(en => en.Number < 10)
            .WithDependencies(en => en.Number);

            factory.CreateBusinessRule(en => en.Number2 + en.Number3, en => en.Number);
        }
        public void AddBusinessRuleFromPrototype()
        {
            var factory = new RuleFactory <Entity>();
            var rule    = factory.CreateBusinessRule(en => en.Number + en.Number2,
                                                     en => en.Number3).Start();

            var e = new Entity();

            e.Extensions.AddRuleFromPrototype(rule);

            e.Number  = 8;
            e.Number2 = 5;
            e.Number3.ShouldEqual(13);
        }