void it_works()
        {
            dynamic person = new Gemini();

            person.Validates = new DynamicFunction(() =>
            {
                var validations = new List<dynamic>();

                validations.Add(new Presence("FirstName"));

                validations.Add(new Presence("Email"));

                validations.Add(new Confirmation("Email"));

                return validations;
            });

            new Validations(person);

            Assert.IsFalse(person.IsValid());

            Assert.AreEqual("FirstName is required.", person.Errors()[0].Value);

            Assert.AreEqual("Email is required.", person.Errors()[1].Value);

            person.FirstName = "Jane";

            person.Email = "*****@*****.**";

            person.EmailConfirmation = "*****@*****.**";

            Assert.IsTrue(person.IsValid());
        }
Ejemplo n.º 2
0
        DynamicFunctionWithParam CreateCachedMethodFor(DynamicFunctionWithParam @delegate)
        {
            var methodName = (@delegate as Delegate).Method.Name;

            var newDelegate = new DynamicFunctionWithParam(originalParameters =>
            {
                dynamic arguments = null;

                if (originalParameters is Gemini) arguments = originalParameters.HashOfProperties();

                else if (IsValueType(originalParameters)) arguments = originalParameters;

                else arguments = new Gemini(originalParameters).HashOfProperties();

                var cachedValue = null as object;

                if (HasSameArgumgents(methodName, arguments, out cachedValue)) return cachedValue;

                var result = (@delegate as Delegate).Method.Invoke(instance, new[] { originalParameters });

                parameterizedFunctions.Add(
                    new KeyValuePair<MemoizedMethod, object>(
                        new MemoizedMethod { Name = methodName, Arguments = arguments },
                        result));

                return result;
            });

            return newDelegate;
        }
Ejemplo n.º 3
0
        public static dynamic ToDynamic(object value)
        {
            if (value is JValue)
            {
                return((value as JValue).Value);
            }

            if (value is JObject)
            {
                var gemini = new Gemini();

                foreach (var item in (value as JObject))
                {
                    gemini.SetMember(item.Key, ToDynamic(item.Value));
                }

                return(gemini);
            }

            if (value is JArray)
            {
                return(ToArray(value as JArray));
            }

            return(value);
        }
Ejemplo n.º 4
0
 public void TestDemo6Introspection()
 {
     dynamic gemini = new Gemini(new {FirstName = "Jane", LastName = "Doe"});
     
     IDictionary<string, object> properties = gemini.HashOfProperties();
     Assert.AreEqual(2, properties.Count);
 }
Ejemplo n.º 5
0
        public void TestDemo6GeminiRespondsTo()
        {
            dynamic gemini = new Gemini(new {FirstName = "Jane", LastName = "Doe"});

            Assert.IsTrue(gemini.RespondsTo("FirstName"));
            Assert.IsFalse(gemini.RespondsTo("IDontExist"));
        }
Ejemplo n.º 6
0
        private dynamic EntityFor(dynamic model, dynamic attributes)
        {
            var entity = new Gemini(attributes);

            entity.SetMember(ForeignKey, model.GetMember(PropertyContainingIdValue));

            return Repository.Projection(entity);
        }
Ejemplo n.º 7
0
        private dynamic EntityFor(dynamic model, dynamic attributes)
        {
            var entity = new Gemini(attributes);

            entity.SetMember(ForeignKey, model.GetMember(Id()));

            return(Repository.Projection(entity));
        }
Ejemplo n.º 8
0
        public void TestDemo6MembersOnTheFly()
        {
            dynamic gemini = new Gemini(new { FirstName = "Jane", LastName = "Doe" });
            gemini.MiddleInitial = "L";
            gemini.SayHello = new Func<string>(() => "Hello");

            Assert.AreEqual("Jane", gemini.FirstName);
            Assert.AreEqual("L", gemini.MiddleInitial);
            Assert.AreEqual("Hello", gemini.SayHello());
        }
Ejemplo n.º 9
0
        static DynamicModel()
        {
            Gemini.Initialized <DynamicModel>(instance =>
            {
                new Validations(instance);

                new Associations(instance);

                new Changes(instance);
            });
        }
Ejemplo n.º 10
0
        public virtual IEnumerable<dynamic> Query(dynamic o)
        {
            var collection = Collection();

            dynamic gemini = new Gemini(o);

            var memberName = gemini.Members()[0];

            var memberValue = gemini.GetMember(memberName);

            var objs = collection.Find(M.Query.EQ(memberName, BsonValue.Create(memberValue))) as MongoCursor<BsonDocument>;

            return objs.Select(s => Projection(s));
        }
Ejemplo n.º 11
0
        private dynamic GetNamedArgs(object[] args, string[] argNames)
        {
            var namedArgs = new Gemini();

            argNames.Zip(
                args.Skip(args.Length - argNames.Length),
                (argName, argValue) => new
            {
                name  = argName,
                value = argValue
            })
            .ForEach(arg => namedArgs.SetMember(arg.name, arg.value));

            return(namedArgs);
        }
Ejemplo n.º 12
0
        public static dynamic ToDynamic(object value)
        {
            if (value is JValue) return (value as JValue).Value;

            if (value is JObject)
            {
                var gemini = new Gemini();

                foreach (var item in (value as JObject)) gemini.SetMember(item.Key, ToDynamic(item.Value));

                return gemini;
            }

            if (value is JArray) return ToArray(value as JArray);

            return value;
        }
Ejemplo n.º 13
0
        public void it_works()
        {
            dynamic person = new Gemini(new { FirstName = "Jane" });

            Assert.AreEqual("Jane", person.FirstName);

            new Changes(person);

            Assert.IsFalse(person.HasChanged());

            person.FirstName = "Jane2";

            Assert.IsTrue(person.HasChanged());

            Assert.AreEqual("Jane", person.Changes("FirstName").Original);

            Assert.AreEqual("Jane2", person.Changes("FirstName").New);
        }
Ejemplo n.º 14
0
        DynamicFunctionWithParam CreateCachedMethodFor(DynamicFunctionWithParam @delegate)
        {
            var methodName = (@delegate as Delegate).Method.Name;

            var newDelegate = new DynamicFunctionWithParam(originalParameters =>
            {
                dynamic arguments = null;

                if (originalParameters is Gemini)
                {
                    arguments = originalParameters.HashOfProperties();
                }

                else if (IsValueType(originalParameters))
                {
                    arguments = originalParameters;
                }

                else
                {
                    arguments = new Gemini(originalParameters).HashOfProperties();
                }

                var cachedValue = null as object;

                if (HasSameArgumgents(methodName, arguments, out cachedValue))
                {
                    return(cachedValue);
                }

                var result = (@delegate as Delegate).Method.Invoke(instance, new[] { originalParameters });

                parameterizedFunctions.Add(
                    new KeyValuePair <MemoizedMethod, object>(
                        new MemoizedMethod {
                    Name = methodName, Arguments = arguments
                },
                        result));

                return(result);
            });

            return(newDelegate);
        }
Ejemplo n.º 15
0
 public static dynamic RecordToGemini(this IDataReader rdr, Func<dynamic, dynamic> projection)
 {
     if (projection == null)
     {
         var e = new Prototype() as IDictionary<string, object>;;
         PopluateDynamicDictionary(rdr, e);
         return e;
     }
     else
     {
         dynamic e = new Gemini();
         PopluateDynamicDictionary(rdr, e.Prototype);
         return projection(e);
     }
 }
Ejemplo n.º 16
0
        public dynamic EntityFor(dynamic attributes)
        {
            var entity = new Gemini(attributes);

            return Repository.Projection(entity);
        }
Ejemplo n.º 17
0
        dynamic Player(dynamic args)
        {
            dynamic player = new Gemini(new { IsReady = false });

            if (args.PlayerId.ToString() == _.Player1Id) player.IsReady = _.Player1Ready;

            else player.IsReady = _.Player2Ready;

            return player;
        }
Ejemplo n.º 18
0
        public ActionResult Get(int gameId)
        {
            var game = games.Single(gameId);

            dynamic gameResult = new Gemini(game);

            gameResult.Player1Squares = game.SquaresFor(game.Player1Id);

            gameResult.Player2Squares = game.SquaresFor(game.Player2Id);

            gameResult.Player2HitsOnPlayer1 = game.HitsOn(game.Player1Id);

            gameResult.Player2MissesOnPlayer1 = game.MissesOn(game.Player1Id);

            gameResult.Player1HitsOnPlayer2 = game.HitsOn(game.Player2Id);

            gameResult.Player1MissesOnPlayer2 = game.MissesOn(game.Player2Id);

            gameResult.Started = game.Started();

            gameResult.Loser = game.Loser();

            return new DynamicJsonResult(gameResult);
        }
Ejemplo n.º 19
0
        public dynamic EntityFor(dynamic attributes)
        {
            var entity = new Gemini(attributes);

            return(Repository.Projection(entity));
        }
Ejemplo n.º 20
0
 static Gemini()
 {
     Gemini.Initialized <Gemini>(d => d.AddRedefinableDelegates());
 }
Ejemplo n.º 21
0
        private dynamic EntityFor(DynamicModel model, dynamic attributes)
        {
            var entity = new Gemini(attributes);

            entity.SetMember(ForeignKeyFor(model), model.GetMember(Id()));

            return repository.Projection(entity);
        }
Ejemplo n.º 22
0
 public static dynamic RecordToGemini(this IDataReader rdr, Func<dynamic, dynamic> projection)
 {
     dynamic e = new Gemini();
     var d = e.Prototype as IDictionary<string, object>;
     for (int i = 0; i < rdr.FieldCount; i++)
         d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);
     return projection(e);
 }