class Diesel::Swagger::Parser

Public Instance Methods

build_specification(json) click to toggle source
# File lib/diesel/swagger/parser.rb, line 15
def build_specification(json)
  specification = build_node(Specification, json)
  specification.info = build_node(Info, json['info'])
  specification.external_docs = build_node(ExternalDocs, json['externalDocs'])
  specification.schemes = json['schemes']
  specification.produces = json['produces'] || []
  specification.consumes = json['consumes'] || []
  build_security_definition_hash(specification, json)
  build_security_hash(specification, json)
  specification.paths = build_node_hash(Path, json, 'paths') do |path, path_json|
    [:get, :put, :post, :delete, :options, :head, :patch].each do |method|
      if op_json = path_json[method.to_s]
        op = build_node(Operation, op_json, constructor_args: [method])
        op.external_docs = build_node(ExternalDocs, op_json['externalDocs'])
        op.parameters = build_node_list(Parameter, op_json, 'parameters') do |param, param_json|
          if param_json["schema"] && param_json["schema"].kind_of?(Hash)
            schema_json = param_json["schema"]
            param.schema = build_node(Definition, schema_json)
          end
        end
        build_security_definition_hash(specification, json)
        build_security_hash(op, op_json)
        path.send("#{method}=".to_sym, op)
      end
    end
  end
  specification.definitions = build_node_hash(Definition, json, 'definitions') do |definition, def_json|
    definition.properties = build_node_hash(Property, def_json, 'properties') do |prop, prop_json|
      prop.enum = prop_json["enum"]
      prop.items = prop_json["items"]
    end
  end
  specification
end
parse(spec) click to toggle source
# File lib/diesel/swagger/parser.rb, line 11
def parse(spec)
  build_specification(MultiJson.load(spec))
end

Protected Instance Methods

build_node(model_class, json, options = {}) click to toggle source
# File lib/diesel/swagger/parser.rb, line 64
def build_node(model_class, json, options = {})
  if json
    model = if constructor_args = options[:constructor_args]
      model_class.new(*constructor_args)
    else
      model_class.new
    end
    model_class.attribute_names.each do |att|
      model.send("#{att}=".to_sym, json[camelize(att.to_s, false)])
    end
    json.each_pair do |key, value|
      if key.match(/^x-/)
        extension_name = underscore(key.sub(/^x-/, '')).to_sym
        model.extensions[extension_name] = value
      end
    end
    model
  end
end
build_node_hash(model_class, json, json_hash_key) { |node, v| ... } click to toggle source
# File lib/diesel/swagger/parser.rb, line 92
def build_node_hash(model_class, json, json_hash_key)
  (json[json_hash_key] || {}).reduce({}) do |m, (k, v)|
    m[k] = node = build_node(model_class, v, constructor_args: [k])
    yield(node, v) if block_given?
    m
  end
end
build_node_list(model_class, json, json_list_key) { |node, node_json| ... } click to toggle source
# File lib/diesel/swagger/parser.rb, line 84
def build_node_list(model_class, json, json_list_key)
  (json[json_list_key] || []).map do |node_json|
    node = build_node(model_class, node_json)
    yield(node, node_json) if block_given?
    node
  end
end
build_security_definition_hash(parent_node, json) click to toggle source
# File lib/diesel/swagger/parser.rb, line 60
def build_security_definition_hash(parent_node, json)
  parent_node.security_definitions = build_node_hash(SecurityDefinition, json, 'securityDefinitions')
end
build_security_hash(parent_node, json) click to toggle source
# File lib/diesel/swagger/parser.rb, line 51
def build_security_hash(parent_node, json)
  sec_json = json['security']
  parent_node.security = (sec_json || {}).reduce({}) do |memo, (k,v)|
    memo[k] = security = Security.new(k)
    security.scopes = v
    memo
  end
end