Skip to content

Commit 608f4ee

Browse files
committed
Support for hidden properties
Hidden property as boolean or proc
1 parent 63d17ef commit 608f4ee

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/grape-swagger/representable/parser.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def representer_mapping(representer, documentation, property, is_a_collection =
104104
def parse_representer(representer)
105105
properties = representer.map.each_with_object({}) do |value, property|
106106
property_name = value[:as].try(:call) || value.name
107+
hidden_property = value[:documentation]&.[](:hidden)
108+
next if hidden_property && (hidden_property.is_a?(Proc) ? hidden_property.call : hidden_property)
107109
property[property_name] = parse_representer_property(value)
108110
end
109111

spec/grape-swagger/representers/response_representer_spec.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@ class Tag < Representable::Decorator
2727
class Error < Representable::Decorator
2828
include Representable::JSON
2929

30-
property :code, documentation: { type: 'string', desc: 'Error code' }
30+
property :code, documentation: { type: 'string', hidden: -> { false }, desc: 'Error code' }
3131
property :message, documentation: { type: 'string', desc: 'Error message' }
32+
property :developer_message, documentation: { type: 'string', hidden: -> { !developer? }, desc: 'Developer hidden error message' }
33+
34+
def self.developer?
35+
false
36+
end
3237
end
3338

3439
class Something < Representable::Decorator
@@ -100,6 +105,17 @@ def app
100105
)
101106
end
102107

108+
it 'should document specified models with hidden property' do
109+
allow(ThisApi::Representers::Error).to receive(:developer?).and_return(true)
110+
expect(subject['definitions']['Error']).to eq(
111+
'type' => 'object',
112+
'description' => 'This returns something',
113+
'properties' => { 'code' => { 'description' => 'Error code', 'type' => 'string' },
114+
'message' => { 'description' => 'Error message', 'type' => 'string' },
115+
'developer_message' => { 'description' => 'Developer hidden error message', 'type' => 'string' } }
116+
)
117+
end
118+
103119
it 'should document specified models as show action' do
104120
expect(subject['paths']['/something/{id}']['get']['responses']).to eq(
105121
'200' => {

0 commit comments

Comments
 (0)