Sha256: 5bb21b0b63cb26ef50cfbaebb9b48e01bf156646ca6d61f816e955a636d74756
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
module Swagger # Represents a Swagger Schema Object, a more deterministic subset of JSON Schema. # @see https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#schema-object- Schema Object # @see http://json-schema.org/ JSON Schema class Schema < Hashie::Mash include Attachable include Hashie::Extensions::MergeInitializer include Hashie::Extensions::DeepFind attr_accessor :parent def initialize(hash, default = nil) super attach_to_children end 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? 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 def refs deep_find_all('$ref') end 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 def refs_resolved? return true if refs.nil? refs.all? do |ref| remote_ref?(ref) end end def remote_ref?(ref) ref.match(%r{\A\w+\://}) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
swagger-core-0.2.3 | lib/swagger/schema.rb |
swagger-core-0.2.2 | lib/swagger/schema.rb |
swagger-core-0.2.1 | lib/swagger/schema.rb |