Class: SwaggerYard::TypeParser

Inherits:
Object
  • Object
show all
Defined in:
lib/swagger_yard/type_parser.rb

Defined Under Namespace

Classes: Parser, Transform

Instance Method Summary collapse

Constructor Details

#initialize(model_path = Type::MODEL_PATH) ⇒ TypeParser

Returns a new instance of TypeParser.



150
151
152
153
154
# File 'lib/swagger_yard/type_parser.rb', line 150

def initialize(model_path = Type::MODEL_PATH)
  @parser = Parser.new
  @xform  = Transform.new
  @model_path = model_path
end

Instance Method Details

#json_schema(str) ⇒ Object



160
161
162
163
164
165
166
# File 'lib/swagger_yard/type_parser.rb', line 160

def json_schema(str)
  @xform.apply(parse(str),
               model_path: @model_path,
               resolve_uri: ->(name, prefix) { resolve_uri(name, prefix) })
rescue Parslet::ParseFailed => e
  raise InvalidTypeError, "'#{str}': #{e.message}"
end

#parse(str) ⇒ Object



156
157
158
# File 'lib/swagger_yard/type_parser.rb', line 156

def parse(str)
  @parser.parse(str)
end

#resolve_uri(name, prefix) ⇒ Object



168
169
170
171
172
173
174
175
176
# File 'lib/swagger_yard/type_parser.rb', line 168

def resolve_uri(name, prefix)
  unless url = SwaggerYard.config.external_schema[prefix]
    raise UndefinedSchemaError, "unknown prefix #{prefix} for #{name}"
  end
  uri, fragment = url.split '#'
  fragment = fragment ? "##{fragment}" : @model_path
  fragment += '/' unless fragment.end_with?('/')
  [uri, fragment]
end