public IAnalysis CreateInstance(dynamic jsonConfig)
        {
            if (this.QuantityAnalysisFactory == null || this.QuantitySearchTypesFactory == null || string.IsNullOrEmpty(this.Type))
            {
                throw new MissingRequiredDependencyException();
            }

            int?min = null;
            int?max = null;

            if (!DynamicExtensions.HasProperty(jsonConfig, "search"))
            {
                throw new InvalidJSONException();
            }

            if (DynamicExtensions.HasProperty(jsonConfig, "min"))
            {
                min = DynamicExtensions.AsInt(jsonConfig.min);
            }

            if (DynamicExtensions.HasProperty(jsonConfig, "max"))
            {
                max = DynamicExtensions.AsInt(jsonConfig.max);
            }

            List <IQuantitySearch> quantitySearchList = new List <IQuantitySearch>();

            foreach (var searchItem in jsonConfig.search)
            {
                quantitySearchList.Add(this.QuantitySearchTypesFactory.CreateInstance(searchItem));
            }

            return(this.QuantityAnalysisFactory.CreateInstance(min, max, quantitySearchList));
        }
        public void AsIntShouldReturnIntValueWhenIsNumericAndZeroInOtherCases()
        {
            dynamic obj = new ExpandoObject();

            obj.entero = 1;
            obj.doble  = (double)2;
            obj.cadena = "cadena";

            Assert.AreEqual(DynamicExtensions.AsInt(obj.entero), 1);
            Assert.AreEqual(DynamicExtensions.AsInt(obj.doble), 2);
            Assert.AreEqual(DynamicExtensions.AsInt(obj.cadena), 0);
        }