/// <summary>
        /// Fetches all ds data using ds.search.
        /// FetchDSCompleted event will not be fired.
        /// </summary>
        /// <param name="uid">The user Id.</param>
        public ExpandoObject SearchAll(string uid)
        {
            if (_dsSettings == null)
            {
                return(null);
            }

            var model = new Dictionary <string, object>();

            foreach (var mappingType in _dsSettings.MappingsByType)
            {
                var fields = mappingType.Value.Select(i => i.GigyaFieldName).Distinct();
                var data   = Search(uid, mappingType.Key, fields);
                if (data != null)
                {
                    // do some merge of the data
                    Dictionary <string, object> mappedDsResult = MapDataToDsType(mappingType.Key, data);
                    model = DynamicUtils.MergeToDictionary(model, mappedDsResult);
                }
            }

            if (!model.Any())
            {
                return(null);
            }

            return(model.ToExpando());
        }
 private DAL.Image FillSliders()
 {
     DAL.Image data = new DAL.Image();
     if (uplImage.HasFile)
     {
         try
         {
             if (uplImage.FileName.Split('.')[1].ToLower() == "jpeg" || uplImage.FileName.Split('.')[1].ToLower() == "jpg" || uplImage.FileName.Split('.')[1].ToLower() == "png" || uplImage.FileName.Split('.')[1].ToLower() == "gif")
             {
                 DynamicUtils dUtils = new DynamicUtils();
                 string       target = dUtils.uploadimage(uplImage);
                 Session["image"]   = Path.GetFileName(uplImage.FileName);
                 data.Name          = uplImage.FileName.Split('.')[0].ToLower();
                 data.Ext           = uplImage.FileName.Split('.')[1].ToLower();
                 data.Desc          = "Left Body";
                 data.FILE_LOCATION = target;
             }
             else
             {
                 lblImage.Text = "Upload status: Only JPEG/JPG/PNG/GIF files are accepted!";
                 return(data);
             }
         }
         catch (Exception ex)
         {
             lblImage.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
         }
     }
     return(data);
 }
        /// <summary>
        /// Fetches ds data using ds.get
        /// FetchDSCompleted event will not be fired.
        /// </summary>
        /// <param name="uid">The user Id.</param>
        /// <param name="settings">The mapping settings.</param>
        /// <returns></returns>
        public ExpandoObject GetAll(string uid)
        {
            if (_dsSettings == null)
            {
                return(null);
            }

            var model = new Dictionary <string, object>();

            foreach (var mappingType in _dsSettings.MappingsByType)
            {
                var dsType = mappingType.Key;
                foreach (var mapping in mappingType.Value.GroupBy(i => i.Custom.Oid))
                {
                    var fields = mapping.Select(i => i.GigyaFieldName).Distinct();
                    var data   = Get(uid, mapping.Key, dsType, fields);

                    if (data != null)
                    {
                        Dictionary <string, object> mappedDsResult = MapDataToDsType(mappingType.Key, data);
                        model = DynamicUtils.MergeToDictionary(model, mappedDsResult);
                    }
                }
            }

            if (!model.Any())
            {
                return(null);
            }

            return(model.ToExpando());
        }
        //[TestMethod]
        public void SpeedTestForArrayPropertyFromDynamic()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            Gigya.Module.Core.Connector.Common.DynamicUtils.GetValue <long>(data, "profile.age");
            DynamicUtils.GetValue <long>(data, "profile.age");

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            for (int i = 0; i < 20; i++)
            {
                var value = Gigya.Module.Core.Connector.Common.DynamicUtils.GetValue <long>(data, "profile.age");
            }

            var oldVersionMs = stopwatch.ElapsedMilliseconds;

            stopwatch.Restart();

            for (int i = 0; i < 20; i++)
            {
                var value = DynamicUtils.GetValue <long>(data, "profile.age");
            }

            var newVersionMs = stopwatch.ElapsedMilliseconds;

            Assert.Inconclusive(string.Format("Old version: {0}, New version: {1}", oldVersionMs, newVersionMs));
        }
 private void ThrowTestingExceptionIfRequired(IGigyaModuleSettings settings, dynamic userInfo)
 {
     if (settings.DebugMode && DynamicUtils.GetValue <string>(userInfo, "profile.email") == Constants.Testing.EmailWhichThrowsException)
     {
         throw new ArgumentException("profile.email matches testing email which causes exception");
     }
 }
示例#6
0
        /// <summary>
        /// Serializes the dynamic.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="value">The value.</param>
        /// <param name="contract">The contract.</param>
        private void SerializeDynamic(JsonWriter writer, IDynamicMetaObjectProvider value, JsonDynamicContract contract)
        {
            contract.InvokeOnSerializing(value, Serializer.Context);
            SerializeStack.Add(value);

            writer.WriteStartObject();

            foreach (string memberName in value.GetDynamicMemberNames())
            {
                object memberValue;
                if (DynamicUtils.TryGetMember(value, memberName, out memberValue))
                {
                    string resolvedPropertyName = (contract.PropertyNameResolver != null)
            ? contract.PropertyNameResolver(memberName)
            : memberName;

                    writer.WritePropertyName(resolvedPropertyName);
                    SerializeValue(writer, memberValue, GetContractSafe(memberValue), null, null);
                }
            }

            writer.WriteEndObject();

            SerializeStack.RemoveAt(SerializeStack.Count - 1);
            contract.InvokeOnSerialized(value, Serializer.Context);
        }
        public void DefaultValueReturnedIfInvalidArrayIndex()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            var value = DynamicUtils.GetValue <long>(data, "data.phoneNumbers[2].phone");

            Assert.AreEqual(0, value);
        }
 public void TestAdd()
 {
     Assert.AreEqual("10a", DynamicUtils.BinaryOperation_Add(10, "a"));
     Assert.AreEqual("a", DynamicUtils.BinaryOperation_Add(null, "a"));
     Assert.AreEqual("a", DynamicUtils.BinaryOperation_Add("a", null));
     Assert.AreEqual(null, DynamicUtils.BinaryOperation_Add(null, null));
     Assert.AreEqual(21.5, DynamicUtils.BinaryOperation_Add(10, 11.5));
 }
 override public void WriteTo(ParserNodeContext Context)
 {
     Context.Write("DynamicUtils.BinaryOperation_" + DynamicUtils.GetOpName(Operator) + "(");
     LeftNode.WriteTo(Context);
     Context.Write(",");
     RightNode.WriteTo(Context);
     Context.Write(")");
 }
 public void TestCountArray()
 {
     Assert.AreEqual(0, DynamicUtils.CountArray(null));
     Assert.AreEqual(0, DynamicUtils.CountArray(10));
     Assert.AreEqual(0, DynamicUtils.CountArray("String"));
     Assert.AreEqual(3, DynamicUtils.CountArray(new int[] { 1, 2, 3 }));
     Assert.AreEqual(3, DynamicUtils.CountArray(new List <int>(new int[] { 1, 2, 3 })));
 }
示例#11
0
        private DynamicMetaObject InvokeWorker(DynamicMetaObjectBinder /*!*/ callAction, DynamicMetaObject /*!*/[] args)
        {
            PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "Method Invoke " + args.Length);
            PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "Method");

            CallSignature       signature    = BindingHelpers.GetCallSignature(callAction);
            DynamicMetaObject   self         = Restrict(typeof(Method));
            BindingRestrictions restrictions = self.Restrictions;

            // restrict to non-null self (Method is immutable so this is an invariant test)
            restrictions = restrictions.Merge(
                BindingRestrictions.GetExpressionRestriction(
                    Ast.NotEqual(
                        GetSelfExpression(self),
                        AstUtils.Constant(null)
                        )
                    )
                );

            DynamicMetaObject[] newArgs = ArrayUtils.Insert(GetMetaFunction(self), GetMetaSelf(self), args);
            var newSig = new CallSignature(ArrayUtils.Insert(new Argument(ArgumentType.Simple), signature.GetArgumentInfos()));

            var call = new DynamicMetaObject(
                DynamicExpression.Dynamic(
                    PythonContext.GetPythonContext(callAction).Invoke(
                        newSig
                        ).GetLightExceptionBinder(callAction.SupportsLightThrow()),
                    typeof(object),
                    ArrayUtils.Insert(PythonContext.GetCodeContext(callAction), DynamicUtils.GetExpressions(newArgs))
                    ),
                BindingRestrictions.Empty
                );

            /*
             * call = func.Invoke(
             *  new CallBinder(
             *      PythonContext.GetBinderState(callAction),
             *      newSig
             *  ),
             *  newArgs
             * );*/

            if (call.HasValue)
            {
                return(new DynamicMetaObject(
                           call.Expression,
                           restrictions.Merge(call.Restrictions),
                           call.Value
                           ));
            }
            else
            {
                return(new DynamicMetaObject(
                           call.Expression,
                           restrictions.Merge(call.Restrictions)
                           ));
            }
        }
示例#12
0
        public void CanGetNestedPropertyFromDynamic()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            var firstName = DynamicUtils.GetValue <string>(data, "profile.firstName");

            Assert.IsNotNull(firstName, "Value not found");
            Assert.AreEqual(firstName, "Jason", "Value doesn't match");
        }
示例#13
0
        public void CanGetPropertyFromDynamic()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            var value = DynamicUtils.GetValue <string>(data, "socialProviders");

            Assert.IsNotNull(value, "Value not found");
            Assert.AreEqual(value, "site", "Value doesn't match");
        }
示例#14
0
        public void CanGetNestedLongPropertyFromDynamic()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            var value = DynamicUtils.GetValue <long>(data, "profile.age");

            Assert.IsNotNull(value, "Value not found");
            Assert.AreEqual(value, 1, "Value doesn't match");
        }
示例#15
0
        public void CanGetNestedArrayPropertyFromDynamic()
        {
            dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);

            var value = DynamicUtils.GetValue <long>(data, "data.phoneNumbers[1].phone");

            Assert.IsNotNull(value, "Value not found");
            Assert.AreEqual(4567, value, "Value doesn't match");
        }
        private GSResponse LogError(GSResponse response, string method, Exception e)
        {
            dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject();

            var gigyaError = response != null?response.GetErrorMessage() : string.Empty;

            var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails");
            var gigyaCallId      = DynamicUtils.GetValue <string>(gigyaModel, "callId");

            _logger.Error(string.Format("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", method, gigyaCallId, gigyaError, gigyaErrorDetail), e);
            return(response);
        }
示例#17
0
 private DynamicExpression MakeDynamicInitInvoke(CodeContext context, DynamicMetaObject[] args, Expression initFunc, Expression codeContext)
 {
     return(DynamicExpression.Dynamic(
                context.LanguageContext.Invoke(_signature),
                typeof(object),
                ArrayUtils.Insert(
                    codeContext,
                    initFunc,
                    DynamicUtils.GetExpressions(args)
                    )
                ));
 }
示例#18
0
        public void CanMergeNestedJson()
        {
            dynamic data1 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_jsonProfileAddress);
            dynamic data2 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_jsonProfileAddress2);

            var result = DynamicUtils.Merge(data1, data2);

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.profile);
            Assert.AreEqual(result.profile.address.line1, "line 1", "profile.address.line1 doesn't contain expected values.");

            Assert.AreEqual(result.profile.address.line2, "line 2", "profile.address.line2 doesn't contain expected values.");
        }
        public void TestConvertToBool()
        {
            Assert.AreEqual(true, DynamicUtils.ConvertToBool((float)7.1));
            Assert.AreEqual(true, DynamicUtils.ConvertToBool((double)7.1));
            Assert.AreEqual(true, DynamicUtils.ConvertToBool(7));
            Assert.AreEqual(true, DynamicUtils.ConvertToBool(true));
            Assert.AreEqual(true, DynamicUtils.ConvertToBool(new Object()));

            Assert.AreEqual(false, DynamicUtils.ConvertToBool(0));
            Assert.AreEqual(false, DynamicUtils.ConvertToBool((double)0.0));
            Assert.AreEqual(false, DynamicUtils.ConvertToBool(false));
            Assert.AreEqual(false, DynamicUtils.ConvertToBool(null));
        }
示例#20
0
        public static void LogResponseIfRequired(Logger logger, IGigyaModuleSettings settings, string apiMethod, GSResponse response)
        {
            if (settings.DebugMode)
            {
                dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject();

                var gigyaError = response != null?response.GetErrorMessage() : string.Empty;

                var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails");

                var callId = DynamicUtils.GetValue <string>(gigyaModel, "callId");
                logger.DebugFormat("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", apiMethod, callId, gigyaError, gigyaErrorDetail);
            }
        }
示例#21
0
        public void CanMergeJson()
        {
            dynamic data1 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json);
            dynamic data2 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json2);

            var result = DynamicUtils.Merge(data1, data2);

            Assert.IsNotNull(result);

            Assert.AreEqual(result.profile2.firstName, "new", "profile2.firstName doesn't contain expected values.");

            // check old properties remain
            Assert.AreEqual(result.profile.firstName, "Jason", "profile.firstName doesn't contain expected values.");
        }
        /// <summary>
        /// Gets a Gigya value from the model.
        /// </summary>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        /// <param name="gigyaFieldName">Gigya field name e.g. profile.age</param>
        /// <returns></returns>
        protected object GetGigyaValue(dynamic gigyaModel, string gigyaFieldName, string cmsFieldName)
        {
            var eventArgs = new MapGigyaFieldEventArgs
            {
                GigyaModel     = gigyaModel,
                GigyaFieldName = gigyaFieldName,
                CmsFieldName   = cmsFieldName,
                Origin         = "GetGigyaValue",
                GigyaValue     = DynamicUtils.GetValue <object>(gigyaModel, gigyaFieldName)
            };

            GettingGigyaValue?.Invoke(this, eventArgs);
            return(eventArgs.GigyaValue);
        }
        /// <summary>
        /// Merges the getAccountInfo model with the ds data and adds the DS mapping fields to <param name="mappingFields"></param>
        /// </summary>
        /// <param name="accountInfo"></param>
        /// <returns></returns>
        public dynamic Merge(dynamic accountInfo, List <MappingField> mappingFields)
        {
            // get ds data
            var data = GetOrSearch(accountInfo.UID);

            if (data == null)
            {
                return(accountInfo);
            }

            // merge with accountInfo
            accountInfo = DynamicUtils.Merge(accountInfo, data);
            AddMappingFields(mappingFields);
            return(accountInfo);
        }
        /// <summary>
        /// Gets a Gigya value from the model.
        /// </summary>
        /// <param name="gigyaModel">Deserialized Gigya JSON object.</param>
        /// <param name="gigyaFieldName">Gigya field name e.g. profile.age</param>
        /// <returns></returns>
        protected virtual object GetGigyaValue(dynamic gigyaModel, string gigyaFieldName, string sitefinityFieldName)
        {
            var eventArgs = new MapGigyaFieldEvent
            {
                GigyaModel          = gigyaModel,
                GigyaFieldName      = gigyaFieldName,
                SitefinityFieldName = sitefinityFieldName,
                Origin     = "GetGigyaValue",
                GigyaValue = DynamicUtils.GetValue <object>(gigyaModel, gigyaFieldName)
            };

            EventHub.Raise(eventArgs);

            return(eventArgs.GigyaValue);
        }
 public void TestAccess()
 {
     Assert.AreEqual("Value", DynamicUtils.Access(new Hashtable()
     {
         { "MyKey", "Value" }
     }, "MyKey"));
     Assert.AreEqual(10, DynamicUtils.Access(new ClassTestAccess(), "SampleField"));
     Assert.AreEqual(20, DynamicUtils.Access(new ClassTestAccess(), "SampleProperty"));
     Assert.AreEqual(30, DynamicUtils.Access(new ClassTestAccess(), "SampleMethod"));
     Assert.AreEqual(null, DynamicUtils.Access(null, "Test"));
     Assert.AreEqual(null, DynamicUtils.Access(null, null));
     Assert.AreEqual(null, DynamicUtils.Access(10, "Test"));
     Assert.AreEqual(null, DynamicUtils.Access("Test", "Test"));
     Assert.AreEqual(2, DynamicUtils.Access(new int[] { 0, 1, 2, 3, 4 }, 2));
     Assert.AreEqual(2, DynamicUtils.Access(new List <int>(new int[] { 0, 1, 2, 3, 4 }), 2));
 }
 public void TestCountArrayList()
 {
     Assert.AreEqual(3, DynamicUtils.CountArray(new List <Post> {
         new Post()
         {
             Title = "Test1"
         },
         new Post()
         {
             Title = "Test2"
         },
         new Post()
         {
             Title = "Test3"
         },
     }));
 }
示例#27
0
        private void Validate()
        {
            var del = _delegate as Delegate;

            if (TargetNode == null || TargetNode.DataContext == null)
            {
                _delegate = Empty;
            }
            else if (del == null || !ReferenceEquals(del.Target, TargetNode.DataContext))
            {
                var targetObj    = TargetNode.DataContext;
                var targetType   = targetObj.GetType();
                var targetMethod = targetType.GetMethod(MethodName,
                                                        System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static
                                                        );

                if (targetMethod == null)
                {
                    Console.WriteLine("[JankyMethod] Method '{0}' does not exist on '{1}' or is not public",
                                      MethodName,
                                      targetType.FullName
                                      );
                    _delegate = Empty;
                    return;
                }


                try
                {
                    _delegate = (targetMethod.IsStatic)
                        ? DynamicUtils.MakeCompatibleDelegate <TDelegate>(targetMethod)
                        : DynamicUtils.MakeCompatibleDelegate <TDelegate>(targetMethod, targetObj);
                }
                catch
                {
                    Console.WriteLine("[JankyMethod] Target Method '{0}' is not Compatible with '{1}'",
                                      targetType + "." + targetMethod.Name,
                                      typeof(TDelegate).ToString()
                                      );
                    _delegate = Empty;
                    return;
                }
            }
        }
 public void TestConvertToIEnumerable()
 {
     CollectionAssert.AreEquivalent(
         new object[] { },
         DynamicUtils.ConvertToIEnumerable(null)
         );
     CollectionAssert.AreEquivalent(
         new object[] { "1", 2, 3 },
         DynamicUtils.ConvertToIEnumerable(new Dictionary <string, object> {
         { "Test1", "1" }, { "Test2", 2 }, { "Test3", 3 }
     })
         );
     CollectionAssert.AreEquivalent(
         new object[] { "1", 2, 3 },
         DynamicUtils.ConvertToIEnumerable(new List <object> {
         "1", 2, 3
     })
         );
 }
示例#29
0
        public void MergeSameProperty()
        {
            dynamic data1 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(@"{
              ""profile"": {
                ""firstName"": ""original"",
                ""age"": 1
              }
            }");
            dynamic data2 = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(@"{
              ""profile"": {
                ""firstName"": ""new"",
                ""age"": 1
              }
            }");

            var result = DynamicUtils.Merge(data1, data2);

            Assert.AreEqual(result.profile.firstName, "new");
        }
        /// <summary>
        /// Uses the Gigya ds.search API call to retrieve data.
        /// FetchDSCompleted event will not be fired.
        /// </summary>
        /// <param name="uid">The user Id.</param>
        /// <param name="dsType">The ds type that is passed in the type param.</param>
        /// <param name="fields">A collection of field names or null to have them created from the settings.</param>
        /// <returns></returns>
        public dynamic Search(string uid, string dsType, IEnumerable <string> fields = null)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentException("uid");
            }

            if (string.IsNullOrEmpty(dsType))
            {
                throw new ArgumentException("dsType");
            }

            var query    = GigyaDsSearchHelper.BuildQuery(uid, dsType, fields);
            var response = _apiHelper.Search(_settings, query);

            if (response == null)
            {
                return(null);
            }

            dynamic model = JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText());

            var modelDictionary = model as IDictionary <string, object>;

            if (!modelDictionary.ContainsKey("results") || model.results.Count == 0)
            {
                return(null);
            }

            var mergedResults = new ExpandoObject();

            foreach (var result in model.results)
            {
                var resultDictionary = result as IDictionary <string, object>;
                if (resultDictionary.ContainsKey("data"))
                {
                    mergedResults = DynamicUtils.Merge(mergedResults, result.data);
                }
            }

            return(mergedResults);
        }