Sha256: faa69c84b370056b9ae56f51e52256d034717871b5ddc0ccc5b2fc37a7390fe4
Contents?: true
Size: 1.06 KB
Versions: 1
Compression:
Stored size: 1.06 KB
Contents
# frozen_string_literal: true class OAPI::OpenAPI::V30::Parsers::JSON using OAPI::Monkey class << self def parse(input) = parse_object(input, OAPI::OpenAPI::V30::Definition) def parse_type(input, type) return input if type.nil? return parse_array(input, type) if type <= OAPI::Types::Array return parse_map(input, type) if type <= OAPI::Types::Map return OAPI::Ref.new(input[:$ref]) if input[:$ref] return type.new { input } if type <= OAPI::Schema return parse_object(input, type) if type <= OAPI::Types::Object raise ArgumentError, "unknown type #{type}" end def parse_object(input, klass) klass.new.tap do |obj| klass.properties.each do |name, type| value = input[name.camelize] obj.send(name, parse_type(value, type)) unless value.nil? end end end def parse_array(input, klass) = klass.new(input.map { parse_type(_1, klass.item_type) }) def parse_map(input, klass) = klass.new(input.transform_values { parse_type(_1, klass.item_type) }) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
oapi-0.1.3 | lib/oapi/open_api/v30/parsers/json.rb |