From 15c2e94f9153da23e8087debd17fb24ec4b726d7 Mon Sep 17 00:00:00 2001 From: Bogdan Gusiev Date: Sat, 6 Dec 2025 10:06:53 +0100 Subject: [PATCH] Remove hidden attributes from required params - Update `required_params` method to skip hidden attributes when determining required parameters. - Modify `response_model_spec` to reflect changes in required attributes, removing `hidden_attr`. - Add a test in `parser_spec` to ensure hidden attributes are not marked as required. --- CHANGELOG.md | 1 + lib/grape-swagger/entity/parser.rb | 7 +++++-- spec/grape-swagger/entities/response_model_spec.rb | 3 +-- spec/grape-swagger/entity/parser_spec.rb | 4 ++++ 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e05f25..44fce38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ #### Fixes * Your contribution here. +* [#87](https://github.com/ruby-grape/grape-swagger-entity/pull/87): remove hidden attributes from required [@bogdan](https://github.com/bogdan) ### 0.7.0 (2025/08/02) diff --git a/lib/grape-swagger/entity/parser.rb b/lib/grape-swagger/entity/parser.rb index 34c0b56..a2c1434 100644 --- a/lib/grape-swagger/entity/parser.rb +++ b/lib/grape-swagger/entity/parser.rb @@ -136,8 +136,11 @@ def parse_nested(entity_name, entity_options, parent_model = nil) def required_params(params) params.each_with_object(Set.new) do |(key, options), accum| - required = if options.fetch(:documentation, {}).key?(:required) - options.dig(:documentation, :required) + documentation = options.fetch(:documentation, {}) + next if documentation[:hidden] + + required = if documentation.key?(:required) + documentation[:required] else !options.key?(:if) && !options.key?(:unless) && options[:expose_nil] != false end diff --git a/spec/grape-swagger/entities/response_model_spec.rb b/spec/grape-swagger/entities/response_model_spec.rb index 2709a26..a784f25 100644 --- a/spec/grape-swagger/entities/response_model_spec.rb +++ b/spec/grape-swagger/entities/response_model_spec.rb @@ -67,8 +67,7 @@ def app 'code' => { 'type' => 'string', 'description' => 'Error code' }, 'message' => { 'type' => 'string', 'description' => 'Error message' }, 'attr' => { 'type' => 'string', 'description' => 'Attribute' } }, - 'required' => %w[text colors hidden_attr created_at kind kind2 kind3 tags relation - attr code message] + 'required' => %w[text colors created_at kind kind2 kind3 tags relation attr code message] ) expect(subject['definitions'].keys).to include 'ThisApi_Entities_Kind' diff --git a/spec/grape-swagger/entity/parser_spec.rb b/spec/grape-swagger/entity/parser_spec.rb index 4e09c19..fd1f653 100644 --- a/spec/grape-swagger/entity/parser_spec.rb +++ b/spec/grape-swagger/entity/parser_spec.rb @@ -21,6 +21,10 @@ expect(properties[:kind3]['$ref']).to eq('#/definitions/Kind') end + it 'does not mark hidden attributes as required' do + expect(required).not_to include(:hidden_attr) + end + it 'merges attributes that have merge: true defined' do expect(properties[:merged_attribute]).to be_nil expect(properties[:code][:type]).to eq('string')