diff --git a/lib/oas_objs/example_obj.rb b/lib/oas_objs/example_obj.rb index 3a3ba29..6a8593e 100644 --- a/lib/oas_objs/example_obj.rb +++ b/lib/oas_objs/example_obj.rb @@ -22,16 +22,18 @@ def process examples_hash.map do |(name, value)| value = - if keys_of_value.present? && value.is_a?(Array) - { value: Hash[keys_of_value.zip(value)] } - elsif value.is_a?(Symbol) && value['$'] - RefObj.new(value.to_s.delete('$'), :example).process - else - { value: value } - end + if keys_of_value.present? && value.is_a?(Array) + { value: Hash[keys_of_value.zip(value)] } + elsif value.is_a?(Symbol) && value['$'] + RefObj.new(value.to_s.delete('$'), :example).process + elsif value.is_a?(Hash) && value.key?(:value) + value + else + { value: value } + end - { name => value } - end + [ name, value ] + end.to_h end end end diff --git a/lib/oas_objs/param_obj.rb b/lib/oas_objs/param_obj.rb index 72d0939..b3df5f2 100644 --- a/lib/oas_objs/param_obj.rb +++ b/lib/oas_objs/param_obj.rb @@ -10,6 +10,10 @@ class ParamObj < Hash attr_accessor :processed, :schema + EXTRACTABLE_KEYS = %i[ + description examples style explode uniqueItems + ].freeze + def initialize(name, param_type, type, required, schema) self.processed = { name: name.to_s.delete('!').to_sym, @@ -21,19 +25,21 @@ def initialize(name, param_type, type, required, schema) def process processed[:schema] = schema.process - desc = schema.processed[:description] - processed[:description] = desc if desc + EXTRACTABLE_KEYS.each { |key| extract_from_schema(key) } processed end def name processed[:name] end + + def extract_from_schema(key) + processed[key] = processed[:schema].delete(key) if processed[:schema].key?(key) + end end end end - __END__ Parameter Object Examples diff --git a/spec/components_spec.rb b/spec/components_spec.rb index 95a17ad..642f630 100644 --- a/spec/components_spec.rb +++ b/spec/components_spec.rb @@ -31,7 +31,7 @@ def clear desc :example, subject: :examples do mk -> { example :ExampleA, { }; example :ExampleZ, { } }, doc_will_has_keys: { examples: %i[ ExampleA ExampleZ ] }; clear - mk -> { example :ExampleA, { name: 'BeiGou' } }, get: { ExampleA: [{ name: { value: 'BeiGou' } }] } + mk -> { example :ExampleA, { name: 'BeiGou' } }, get: { ExampleA: { name: { value: 'BeiGou' } } } end