From df4fb94ede29dd37d2eaadbe63a49466af6244ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= <39093711+a-chacon@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:42:30 -0400 Subject: [PATCH] fix: openapi document errors. * fix: Openapi document errors. Set default parameter values, not render nil or empty hash/array. Status code 422 name. --- lib/oas_rails/spec/parameter.rb | 9 ++++++--- lib/oas_rails/spec/specable.rb | 9 +++++---- lib/oas_rails/utils.rb | 2 +- test/dummy/app/controllers/users_controller.rb | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/oas_rails/spec/parameter.rb b/lib/oas_rails/spec/parameter.rb index 8d6f037..9a74db5 100644 --- a/lib/oas_rails/spec/parameter.rb +++ b/lib/oas_rails/spec/parameter.rb @@ -6,7 +6,8 @@ class Parameter STYLE_DEFAULTS = { query: 'form', path: 'simple', header: 'simple', cookie: 'form' }.freeze - attr_accessor :name, :in, :style, :description, :required, :schema + attr_accessor :name, :style, :description, :required, :schema + attr_reader :in def initialize(specification) @specification = specification @@ -18,8 +19,10 @@ def initialize(specification) @schema = { type: 'string' } end - def default_from_in - STYLE_DEFAULTS[@in.to_sym] + def in=(value) + @in = value + @style = STYLE_DEFAULTS[@in.to_sym] + @required = true if value == "path" end def required? diff --git a/lib/oas_rails/spec/specable.rb b/lib/oas_rails/spec/specable.rb index 8ee47cd..ce740bc 100644 --- a/lib/oas_rails/spec/specable.rb +++ b/lib/oas_rails/spec/specable.rb @@ -18,8 +18,6 @@ def to_spec elsif value.is_a?(Array) && value.all? { |elem| elem.respond_to?(:to_spec) } value.map(&:to_spec) # elsif value.is_a?(Hash) - # p "Here" - # p value # hash = {} # value.each do |key, object| # hash[key] = object.to_spec @@ -29,8 +27,7 @@ def to_spec value end - # hash[camel_case_key] = processed_value unless (processed_value.is_a?(Hash) || processed_value.is_a?(Array)) && processed_value.empty? - hash[camel_case_key] = processed_value unless processed_value.nil? + hash[camel_case_key] = processed_value unless valid_processed_value?(processed_value) end hash end @@ -43,6 +40,10 @@ def as_json(options = nil) private + def valid_processed_value?(processed_value) + ((processed_value.is_a?(Hash) || processed_value.is_a?(Array)) && processed_value.empty?) || processed_value.nil? + end + def snake_to_camel(snake_str) words = snake_str.to_s.split('_') words[1..].map!(&:capitalize) diff --git a/lib/oas_rails/utils.rb b/lib/oas_rails/utils.rb index 0b5c18a..522a2b1 100644 --- a/lib/oas_rails/utils.rb +++ b/lib/oas_rails/utils.rb @@ -80,7 +80,7 @@ def status_to_integer(status) if status.to_s =~ /^\d+$/ status.to_i else - status = "unprocessable_content" if status == "unprocessable_entity" + # status = "unprocessable_content" if status == "unprocessable_entity" Rack::Utils::SYMBOL_TO_STATUS_CODE[status.to_sym] end end diff --git a/test/dummy/app/controllers/users_controller.rb b/test/dummy/app/controllers/users_controller.rb index 9c920aa..9c4a54a 100644 --- a/test/dummy/app/controllers/users_controller.rb +++ b/test/dummy/app/controllers/users_controller.rb @@ -38,7 +38,7 @@ def index # @summary Get a user by id. # # This method show a User by ID. The id must exist of other way it will be returning a 404. - # @parameter id(path) [Integer] Used for identify the user. + # @parameter id(path) [Integer!] Used for identify the user. # @response A nice user(200) [Hash] {user: {name: String, email: String, created_at: DateTime }} # @response User not found by the provided Id(404) [Hash] {success: Boolean, message: String} # @response You dont have the rigth persmissions for access to this reasource(403) [Hash] {success: Boolean, message: String}