Exemple #1
0
        private static ArrayType GetArray(IDictionary <string, object> dynamicRaml, string key)
        {
            var array = new ArrayType();

            array.MaxItems    = DynamicRamlParser.GetIntOrNull(dynamicRaml, "maxItems");
            array.MinItems    = DynamicRamlParser.GetIntOrNull(dynamicRaml, "minItems");
            array.UniqueItems = DynamicRamlParser.GetBoolOrNull(dynamicRaml, "maxProperties");

            RamlType items = null;

            if (dynamicRaml.ContainsKey("items"))
            {
                var asDictionary = dynamicRaml["items"] as IDictionary <string, object>;
                if (asDictionary != null)
                {
                    items = GetRamlType(new KeyValuePair <string, object>("", asDictionary));
                }
                else
                {
                    var asString = dynamicRaml["items"] as string;
                    items = new RamlType {
                        Type = asString
                    };
                }
            }
            array.Items = items;

            return(array);
        }
        private static ObjectType GetObject(IDictionary <string, object> dynamicRaml)
        {
            var obj = new ObjectType();

            obj.AdditionalProperties = DynamicRamlParser.GetValueOrNull(dynamicRaml, "additionalProperties");
            obj.Discriminator        = DynamicRamlParser.GetValueOrNull(dynamicRaml, "discriminator");
            obj.DiscriminatorValue   = DynamicRamlParser.GetStringOrNull(dynamicRaml, "discriminatorValue");
            obj.MaxProperties        = DynamicRamlParser.GetIntOrNull(dynamicRaml, "maxProperties");
            obj.MinProperties        = DynamicRamlParser.GetIntOrNull(dynamicRaml, "minProperties");
            obj.PatternProperties    = DynamicRamlParser.GetValueOrNull(dynamicRaml, "patternProperties");

            ParseProperties(dynamicRaml, obj);
            return(obj);
        }
        public MimeType GetMimeType(object mimeType)
        {
            var value = mimeType as IDictionary <string, object>;

            if (value == null)
            {
                var schema = mimeType as string;
                return(!string.IsNullOrWhiteSpace(schema) ? new MimeType {
                    Schema = schema
                } : null);
            }

            if (value.ContainsKey("body") && value["body"] is IDictionary <string, object> )
            {
                value = (IDictionary <string, object>)value["body"];
            }

            RamlType ramlType = null;

            if (value.ContainsKey("type") && value.ContainsKey("properties"))
            {
                ramlType = TypeBuilder.GetRamlType(new KeyValuePair <string, object>("obj", mimeType));
            }

            if (value.ContainsKey("application/json"))
            {
                value = value["application/json"] as IDictionary <string, object>;
            }

            if (value.ContainsKey("type") && (value["type"] as IDictionary <string, object>) != null &&
                ((IDictionary <string, object>)value["type"]).ContainsKey("properties"))
            {
                ramlType = TypeBuilder.GetRamlType(new KeyValuePair <string, object>("obj", value["type"]));
            }

            return(new MimeType
            {
                Type = TypeExtractor.GetType(value),
                InlineType = ramlType,
                Description = value.ContainsKey("description") ? (string)value["description"] : null,
                Example = DynamicRamlParser.GetExample(value),
                Schema = GetSchema(value),
                FormParameters = value.ContainsKey("formParameters")
                                               ? GetParameters((IDictionary <string, object>)value["formParameters"])
                                               : null,
                Annotations = AnnotationsBuilder.GetAnnotations(dynamicRaml)
            });
        }
        private static ObjectType GetObject(IDictionary <string, object> dynamicRaml)
        {
            var obj = new ObjectType();

            obj.AdditionalProperties = DynamicRamlParser.GetValueOrNull(dynamicRaml, "additionalProperties");
            obj.Discriminator        = DynamicRamlParser.GetValueOrNull(dynamicRaml, "discriminator");
            obj.DiscriminatorValue   = DynamicRamlParser.GetStringOrNull(dynamicRaml, "discriminatorValue");
            obj.MaxProperties        = DynamicRamlParser.GetIntOrNull(dynamicRaml, "maxProperties");
            obj.MinProperties        = DynamicRamlParser.GetIntOrNull(dynamicRaml, "minProperties");
            obj.PatternProperties    = DynamicRamlParser.GetValueOrNull(dynamicRaml, "patternProperties");

            var properties = new Dictionary <string, RamlType>();

            if (dynamicRaml.ContainsKey("properties"))
            {
                foreach (var property in (IDictionary <string, object>)dynamicRaml["properties"])
                {
                    properties.Add(property.Key, GetRamlType(property));
                }
            }

            obj.Properties = properties;
            return(obj);
        }
        public static RamlType GetRamlType(KeyValuePair <string, object> type)
        {
            var key      = type.Key;
            var required = true;

            if (key.EndsWith("?"))
            {
                key      = key.Substring(0, key.Length - 1);
                required = false;
            }

            var ramlType = new RamlType();

            ramlType.Name     = key;
            ramlType.Required = required;

            var simpleProperty = type.Value as string;

            if (simpleProperty != null)
            {
                if (simpleProperty.StartsWith("<"))
                {
                    ramlType.External = new ExternalType
                    {
                        Xml = simpleProperty
                    };
                    return(ramlType);
                }
                if (simpleProperty.StartsWith("{"))
                {
                    ramlType.External = new ExternalType
                    {
                        Schema = simpleProperty
                    };
                    return(ramlType);
                }

                ramlType.Scalar = GetScalar(type, required);
                return(ramlType);
            }

            var dynamicRaml = type.Value as IDictionary <string, object>;

            if (dynamicRaml == null)
            {
                throw new InvalidOperationException("Cannot parse type: " + type.Key);
            }

            ramlType = new RamlType
            {
                Name            = type.Key,
                Type            = GetType((IDictionary <string, object>)type.Value),
                Example         = DynamicRamlParser.GetStringOrNull((IDictionary <string, object>)type.Value, "example"),
                Facets          = DynamicRamlParser.GetDictionaryOrNull <object>((IDictionary <string, object>)type.Value, "facets"),
                OtherProperties = GetOtherProperties((IDictionary <string, object>)type.Value)
            };

            SetPropertiesByType(type, ramlType);

            return(ramlType);
        }