lib/lurker/json/schema/list.rb in lurker-0.6.4 vs lib/lurker/json/schema/list.rb in lurker-0.6.5
- old
+ new
@@ -17,31 +17,38 @@
end
end
private
+ def initialize_default_properties(empty_items = {})
+ @schema[Json::TYPE] ||= Json::ARRAY
+ @schema[Json::ITEMS] ||= polymorph_items(empty_items)
+ end
+
def parse_schema(schema)
@schema = {}
- initialize_properties
+ schema.is_a?(Array) ? parse_array(schema.dup) : parse_hash(schema.dup)
+ end
+ def parse_array(schema)
+ initialize_default_properties([])
return if schema.empty?
- schema = schema.dup
- if schema.is_a?(Array)
- @schema[Json::ITEMS] = @parser.typed.parse(schema.shift)
+ @schema[Json::ITEMS] = @parser.typed.parse(schema.shift)
+ schema.each { |payload| @schema[Json::ITEMS].merge!(payload) }
+ end
- schema.each { |payload| @schema[Json::ITEMS].merge!(payload) }
- else
- @schema[Json::ITEMS] = @parser.typed.parse(schema.delete Json::ITEMS) if schema.key?(Json::ITEMS)
- @schema.merge!(schema)
- end
+ def parse_hash(schema)
+ @schema.merge!(schema)
+ @schema[Json::ITEMS] = @parser.typed(polymorph_if_empty: true)
+ .parse(schema.delete(Json::ITEMS) || schema)
- @schema
+ initialize_default_properties
end
- def initialize_properties
- @schema[Json::TYPE] ||= Json::ARRAY
- @schema[Json::ITEMS] ||= []
+ def polymorph_items(schema)
+ options = subschema_options.merge!(parent_property: Json::ITEMS)
+ Lurker::Json::Polymorph.new(schema, options)
end
end
end
end