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').split('/').last
    model = root.definitions[key].parse
    schema.merge!(model)
  end

  count = 0
  until schema.refs_resolved?
    #puts count
    fail '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 37
def refs
  deep_find_all('$ref')
end
refs_resolved?() click to toggle source
# File lib/swagger/schema.rb, line 52
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 60
def remote_ref?(ref)
  ref.match(%r{\A\w+\://})
end
resolve_refs() click to toggle source
# File lib/swagger/schema.rb, line 41
def resolve_refs
  children.each do |child|
    child.resolve_refs if child.is_a?(Swagger::Schema)
  end
  key = self.delete('$ref')
  return if key.nil? || remote_ref?(key)
  key = key.split('/').last
  model = root.definitions[key].parse
  self.merge!(model)
end