From 885e3f9bce0bfd0fc265b787fe2266b72f20d595 Mon Sep 17 00:00:00 2001 From: Sergey Moiseev Date: Mon, 16 Aug 2021 21:55:05 +0300 Subject: [PATCH 1/4] Fix examples generation --- lib/oas_objs/example_obj.rb | 20 +++++++++++--------- lib/oas_objs/param_obj.rb | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/oas_objs/example_obj.rb b/lib/oas_objs/example_obj.rb index 3a3ba29..1804b35 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.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..5ef850d 100644 --- a/lib/oas_objs/param_obj.rb +++ b/lib/oas_objs/param_obj.rb @@ -21,8 +21,8 @@ def initialize(name, param_type, type, required, schema) def process processed[:schema] = schema.process - desc = schema.processed[:description] - processed[:description] = desc if desc + processed[:description] = processed[:schema].delete(:description) if processed[:schema].key?(:description) + processed[:examples] = processed[:schema].delete(:examples) if processed[:schema].key?(:examples) processed end From 727421ad7336f8abc386cba0717e319e7a30cd69 Mon Sep 17 00:00:00 2001 From: Sergey Moiseev Date: Mon, 16 Aug 2021 22:12:58 +0300 Subject: [PATCH 2/4] Spec fixes --- lib/oas_objs/example_obj.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/oas_objs/example_obj.rb b/lib/oas_objs/example_obj.rb index 1804b35..6a8593e 100644 --- a/lib/oas_objs/example_obj.rb +++ b/lib/oas_objs/example_obj.rb @@ -26,7 +26,7 @@ def process { value: Hash[keys_of_value.zip(value)] } elsif value.is_a?(Symbol) && value['$'] RefObj.new(value.to_s.delete('$'), :example).process - elsif value.key?(:value) + elsif value.is_a?(Hash) && value.key?(:value) value else { value: value } From 7a014f00727981e579f2db9707da9e5024c577be Mon Sep 17 00:00:00 2001 From: Sergey Moiseev Date: Mon, 16 Aug 2021 22:28:03 +0300 Subject: [PATCH 3/4] Fix spec --- spec/components_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 992a104d7d4e5d01d3556019d420050428a6cef5 Mon Sep 17 00:00:00 2001 From: Sergey Moiseev Date: Tue, 17 Aug 2021 15:48:18 +0300 Subject: [PATCH 4/4] Extract other param options according to feature request --- lib/oas_objs/param_obj.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/oas_objs/param_obj.rb b/lib/oas_objs/param_obj.rb index 5ef850d..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 - processed[:description] = processed[:schema].delete(:description) if processed[:schema].key?(:description) - processed[:examples] = processed[:schema].delete(:examples) if processed[:schema].key?(:examples) + 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