class Swagger::Schema

Represents a Swagger Schema Object, a more deterministic subset of JSON Schema. @see github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#schema-object- Schema Object @see json-schema.org/ JSON Schema

Attributes

parent[RW]

Public Class Methods

new(hash, default = nil) click to toggle source
Calls superclass method
# File lib/swagger/schema.rb, line 11
def initialize(hash, default = nil)
  super
  attach_to_children
end

Public Instance Methods

parse() click to toggle source
# File lib/swagger/schema.rb, line 16
def parse
  schema = clone
  if schema.key?('$ref')
    key = schema.delete('$ref')
    model = root.definitions[key]
    schema.merge!(model)
  end

  count = 0
  until schema.refs_resolved?
    raise 'Could not resolve non-remote $refs 5 cycles - circular references?' if count >= 5
    schema.resolve_refs
    count += 1
  end

  schema.to_hash
end

Protected Instance Methods

refs() click to toggle source
# File lib/swagger/schema.rb, line 36
def refs
  deep_find_all('$ref')
end
refs_resolved?() click to toggle source
# File lib/swagger/schema.rb, line 50
def refs_resolved?
  return true if refs.nil?

  refs.all? do |ref|
    remote_ref?(ref)
  end
end
remote_ref?(ref) click to toggle source
# File lib/swagger/schema.rb, line 58
def remote_ref?(ref)
  ref.match(%r{\A\w+\://})
end
resolve_refs() click to toggle source
# File lib/swagger/schema.rb, line 40
def resolve_refs
  items_and_props = [deep_select('items'), deep_select('properties')].flatten.compact
  items_and_props.each do |item|
    key = item.delete('$ref')
    next if remote_ref? key
    model = root.definitions[key]
    item.merge!(model)
  end
end