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