Exemplo n.º 1
0
        private static IList <KeyValuePair <string, object> > QueryDynamicObject(object obj)
        {
            IDynamicMetaObjectProvider ido = obj as IDynamicMetaObjectProvider;

            if (ido != null)
            {
                DynamicMetaObject mo    = ido.GetMetaObject(parameter);
                List <string>     names = new List <string>(mo.GetDynamicMemberNames());
                names.Sort();

                var result = new List <KeyValuePair <string, object> >();
                foreach (string name in names)
                {
                    object value;
                    if ((value = TryGetMemberValue(obj, name, true)) != null)
                    {
                        result.Add(new KeyValuePair <string, object>(name, value));
                    }
                }

                return(result);
            }

            return(Array.Empty <KeyValuePair <string, object> >());
        }
Exemplo n.º 2
0
        private static IList <KeyValuePair <string, object> > QueryDynamicObject(object obj)
        {
            IDynamicMetaObjectProvider ido = obj as IDynamicMetaObjectProvider;

            if (ido != null)
            {
                DynamicMetaObject mo    = ido.GetMetaObject(parameter);
                List <string>     names = new List <string>(mo.GetDynamicMemberNames());
                names.Sort();

                var result = new List <KeyValuePair <string, object> >();
                foreach (string name in names)
                {
                    object value;
                    if ((value = TryGetMemberValue(obj, name, true)) != null)
                    {
                        result.Add(new KeyValuePair <string, object>(name, value));
                    }
                }

                return(result);
            }
#if ENABLECOMBINDER
            else if (obj != null && ComObjectType.IsAssignableFrom(obj.GetType()))
            {
                IList <string> names = ComInterop.ComBinder.GetDynamicDataMemberNames(obj);
                return(ComInterop.ComBinder.GetDynamicDataMembers(obj, names.OrderBy(n => n)));
            }
#endif
            return(Array.Empty <KeyValuePair <string, object> >());
        }
        public void GetDynamicMemberNamesTest()
        {
            JsonValue[] values = AnyInstance.AnyJsonValueArray;

            foreach (JsonValue value in values)
            {
                DynamicMetaObject target = GetJsonValueDynamicMetaObject(value);

                List <string> expected = new List <string>();
                foreach (KeyValuePair <string, JsonValue> pair in value)
                {
                    expected.Add(pair.Key);
                }

                IEnumerable <string> retEnumerable = target.GetDynamicMemberNames();
                Assert.IsNotNull(retEnumerable);

                List <string> actual = new List <string>(retEnumerable);
                Assert.AreEqual(expected.Count, actual.Count);

                for (int i = 0; i < expected.Count; i++)
                {
                    Assert.AreEqual <string>(expected[i], actual[i]);
                }
            }
        }
Exemplo n.º 4
0
        public virtual bool RespondsTo(string name, object target)
        {
            var provider = target as IDynamicMetaObjectProvider;
            IEnumerable <string> dynamicMembers = new string[0];

            if (provider != null)
            {
                DynamicMetaObject meta = provider.GetMetaObject(Expression.Constant(target));
                dynamicMembers = meta.GetDynamicMemberNames();
            }

            Type type = target.GetType();
            IEnumerable <string> members = type.GetMembers().Select(member => member.Name);

            members = members.Union(dynamicMembers);

            bool respondsTo = members.Any(item => String.Equals(item, name, StringComparison.OrdinalIgnoreCase));

            if (respondsTo)
            {
                return(true);
            }
            var prototypalObject = target as PrototypalObject;

            if (prototypalObject != null &&
                prototypalObject.Prototype != null)
            {
                return(RespondsTo(name, prototypalObject.Prototype));
            }
            return(false);
        }
        private static IEnumerable <string> GetDynamicMemberNames(dynamic obj)
        {
            IDynamicMetaObjectProvider provider    = obj as IDynamicMetaObjectProvider;
            Expression           expression        = Expression.Parameter(typeof(object), "$arg0");
            DynamicMetaObject    dynamicMetaObject = provider.GetMetaObject(expression);
            IEnumerable <string> result            = dynamicMetaObject.GetDynamicMemberNames();

            return(result.ToList());
        }
Exemplo n.º 6
0
        public static IEnumerable <string> GetDynamicMemberNames(
            this IDynamicMetaObjectProvider dynamicProvider
            )
        {
            DynamicMetaObject metaObject = dynamicProvider.GetMetaObject(
                Expression.Constant(dynamicProvider)
                );

            return(metaObject.GetDynamicMemberNames());
        }
Exemplo n.º 7
0
        internal static bool HasMember(IDynamicMetaObjectProvider metaObjectProvider, DynamicMetaObject metaObject, string name, bool ignoreCase)
        {
            if (metaObjectProvider is DynamicHostObject hostObject)
            {
                return(hostObject.HasMember(name, ignoreCase));
            }

            var comparer = ignoreCase ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal;

            return(metaObject.GetDynamicMemberNames().Contains(name, comparer));
        }
Exemplo n.º 8
0
        public static IEnumerable <string> GetAllMembers(object o)
        {
            if (!(o is IDynamicMetaObjectProvider metaObjectProvider))
            {
                throw new ArgumentException("The provided value was not a dynamic object.");
            }

            DynamicMetaObject metaObjects = metaObjectProvider.GetMetaObject(Expression.Constant(metaObjectProvider));

            return(metaObjects.GetDynamicMemberNames());
        }
        public static GremlinVertex ToGremlinVertex(this IDynamicMetaObjectProvider obj)
        {
            Type scope = obj.GetType();
            ParameterExpression  param              = Expression.Parameter(scope);
            DynamicMetaObject    metaObject         = obj.GetMetaObject(param);
            IEnumerable <string> dynamicMemberNames = metaObject.GetDynamicMemberNames();

            string vertexLabel  = scope.Name;
            string id           = null;
            object partitionKey = null;
            List <Tuple <string, object> > vertexProperties = new List <Tuple <string, object> >();

            foreach (string memberName in dynamicMemberNames)
            {
                object value = ReadDynamicValue(obj, scope, metaObject, param, memberName);
                if (memberName.Equals("id", StringComparison.OrdinalIgnoreCase))
                {
                    id = value.ToString();
                }
                else if (memberName.Equals("partitionkey", StringComparison.OrdinalIgnoreCase))
                {
                    partitionKey = value;
                }
                else
                {
                    vertexProperties.Add(new Tuple <string, object>(memberName, value));
                }
            }

            if (id == null)
            {
                throw new MissingFieldException($"{vertexLabel} does not have expected property.", "id");
            }

            if (partitionKey == null)
            {
                throw new MissingFieldException($"{vertexLabel} does not have expected property.", "partitionKey");
            }

            return(BuildGremlinVertex(vertexLabel, id, partitionKey, vertexProperties));
        }
        private static IList <KeyValuePair <string, object> > QueryDynamicObject(object obj)
        {
            IDynamicMetaObjectProvider ido = obj as IDynamicMetaObjectProvider;

            if (ido != null)
            {
                DynamicMetaObject mo    = ido.GetMetaObject(parameter);
                List <string>     names = new List <string>(mo.GetDynamicMemberNames());
                names.Sort();
                if (names != null)
                {
                    var result = new List <KeyValuePair <string, object> >();
                    foreach (string name in names)
                    {
                        object value;
                        if ((value = TryGetMemberValue(obj, name, true)) != null)
                        {
                            result.Add(new KeyValuePair <string, object>(name, value));
                        }
                    }
                    return(result);
                }
            }
#if !SILVERLIGHT
            else if (IsComObject(obj))
            {
                var comExclusionList = new string[] { "MailEnvelope" }; //add any com names to be excluded from dynamic view here

                IEnumerable <string> names = System.Dynamic.ComBinder.GetDynamicDataMemberNames(obj);
                names = from name in names
                        where !comExclusionList.Contains(name)
                        select name;
                var sortedNames = new List <string>(names);
                sortedNames.Sort();
                return(System.Dynamic.ComBinder.GetDynamicDataMembers(obj, sortedNames));
            }
#endif
            return(new KeyValuePair <string, object> [0]);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Expect each item to have a property per header with corresponding name.
        /// </summary>
        public void expect_item_properties_to_correspond_to_headers()
        {
            Console.WriteLine("Expect each item to have a property per header with corresponding name.");
            foreach (dynamic item in this.ReadResult)
            {
                var metaData = (IDynamicMetaObjectProvider)item;
                DynamicMetaObject    metaObject  = metaData.GetMetaObject(Expression.Constant(item));
                IEnumerable <string> memberNames = metaObject.GetDynamicMemberNames();

                List <string> properties = memberNames.ToList();

                Console.WriteLine($"Expected headers: {string.Join(", ", this.ExpectedHeaders)}");
                Console.WriteLine($"Actual headers: {string.Join(", ", properties)}");

                Assert.AreEqual(this.ExpectedHeaders.Count, properties.Count);

                for (int j = 0; j < this.ExpectedHeaders.Count; j++)
                {
                    Assert.AreEqual(this.ExpectedHeaders[j], properties[j]);
                }
            }
        }
Exemplo n.º 12
0
 public override IEnumerable <string> GetDynamicMemberNames()
 {
     return(metaDynamic.GetDynamicMemberNames());
 }
Exemplo n.º 13
0
 public override IEnumerable <string> GetDynamicMemberNames() => _innerMetaObject.GetDynamicMemberNames();
Exemplo n.º 14
0
 public override IEnumerable <string> GetDynamicMemberNames()
 {
     return(_innerMetaObject.GetDynamicMemberNames());
 }