Skip to content

Commit dbc887a

Browse files
committed
adding entity property description when property documentation desc option is present
1 parent 062700e commit dbc887a

File tree

5 files changed

+57
-52
lines changed

5 files changed

+57
-52
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535

3636
[#353](https://github.com/ruby-grape/grape-swagger/pull/353) resolves issue #352
3737

38+
[](https://github.com/ruby-grape/grape-swagger/pull/)
39+
40+
- adding entity property description when property documentation desc option is present [@elciok](https://github.com/elciok).
41+
3842
### 0.10.4 (Next)
3943

4044
[#344](https://github.com/ruby-grape/grape-swagger/pull/) Namespace based tag include in Swagger Json

lib/grape-swagger/endpoint.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ def parse_response_params(params)
270270

271271
memo[x.first][:enum] = x.last[:values] if x.last[:values] && x.last[:values].is_a?(Array)
272272
end
273+
memo[x.first][:description] = x.last[:documentation][:desc] if x.last[:documentation] && x.last[:documentation][:desc]
273274
end
274275
end
275276

spec/support/api_swagger_v2_result.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,22 +174,22 @@ class ApiError < Grape::Entity
174174
"definitions"=>{
175175
"QueryInput"=>{
176176
"type"=>"object",
177-
"properties"=>{"elements"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/QueryInputElement"}}},
177+
"properties"=>{"elements"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/QueryInputElement"}, "description"=>"Set of configuration"}},
178178
"description"=>"nested route inside namespace"},
179179
"QueryInputElement"=>{
180180
"type"=>"object",
181-
"properties"=>{"key"=>{"type"=>"string"}, "value"=>{"type"=>"string"}}},
181+
"properties"=>{"key"=>{"type"=>"string", "description"=>"Name of parameter"}, "value"=>{"type"=>"string", "description"=>"Value of parameter"}}},
182182
"Thing"=>{
183183
"type"=>"object",
184184
"properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "text"=>{"type"=>"string"}, "links"=>{"type"=>"link"}, "others"=>{"type"=>"text"}},
185185
"description"=>"This gets Thing."},
186186
"ApiError"=>{
187187
"type"=>"object",
188-
"properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}},
188+
"properties"=>{"code"=>{"type"=>"integer", "format"=>"int32", "description"=>"status code"}, "message"=>{"type"=>"string", "description"=>"error message"}},
189189
"description"=>"This gets Things."},
190190
"Something"=>{
191191
"type"=>"object",
192-
"properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "text"=>{"type"=>"string"}, "links"=>{"type"=>"link"}, "others"=>{"type"=>"text"}},
192+
"properties"=>{"id"=>{"type"=>"integer", "format"=>"int32", "description"=>"Identity of Something"}, "text"=>{"type"=>"string", "description"=>"Content of something."}, "links"=>{"type"=>"link"}, "others"=>{"type"=>"text"}},
193193
"description"=>"This gets Things."
194194
}
195195
}

spec/swagger_v2/api_swagger_v2_type-format_spec.rb

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@
2424
module TheApi
2525
module Entities
2626
class TypedDefinition < Grape::Entity
27-
expose :prop_integer, documentation: { type: Integer, desc: 'prop_integer' }
28-
expose :prop_long, documentation: { type: Numeric, desc: 'prop_long' }
29-
expose :prop_float, documentation: { type: Float, desc: 'prop_float' }
30-
expose :prop_double, documentation: { type: BigDecimal, desc: 'prop_double' }
31-
expose :prop_string, documentation: { type: String, desc: 'prop_string' }
32-
expose :prop_symbol, documentation: { type: Symbol, desc: 'prop_symbol' }
33-
expose :prop_date, documentation: { type: Date, desc: 'prop_date' }
34-
expose :prop_date_time, documentation: { type: DateTime, desc: 'prop_date_time' }
35-
expose :prop_time, documentation: { type: Time, desc: 'prop_time' }
36-
expose :prop_password, documentation: { type: 'password', desc: 'prop_password' }
37-
expose :prop_email, documentation: { type: 'email', desc: 'prop_email' }
38-
expose :prop_boolean, documentation: { type: Virtus::Attribute::Boolean, desc: 'prop_boolean' }
39-
expose :prop_file, documentation: { type: File, desc: 'prop_file' }
40-
expose :prop_json, documentation: { type: JSON, desc: 'prop_json' }
27+
expose :prop_integer, documentation: { type: Integer, desc: 'prop_integer description' }
28+
expose :prop_long, documentation: { type: Numeric, desc: 'prop_long description' }
29+
expose :prop_float, documentation: { type: Float, desc: 'prop_float description' }
30+
expose :prop_double, documentation: { type: BigDecimal, desc: 'prop_double description' }
31+
expose :prop_string, documentation: { type: String, desc: 'prop_string description' }
32+
expose :prop_symbol, documentation: { type: Symbol, desc: 'prop_symbol description' }
33+
expose :prop_date, documentation: { type: Date, desc: 'prop_date description' }
34+
expose :prop_date_time, documentation: { type: DateTime, desc: 'prop_date_time description' }
35+
expose :prop_time, documentation: { type: Time, desc: 'prop_time description' }
36+
expose :prop_password, documentation: { type: 'password', desc: 'prop_password description' }
37+
expose :prop_email, documentation: { type: 'email', desc: 'prop_email description' }
38+
expose :prop_boolean, documentation: { type: Virtus::Attribute::Boolean, desc: 'prop_boolean description' }
39+
expose :prop_file, documentation: { type: File, desc: 'prop_file description' }
40+
expose :prop_json, documentation: { type: JSON, desc: 'prop_json description' }
4141
end
4242
end
4343

@@ -102,20 +102,20 @@ def app
102102

103103
specify do
104104
expect(subject['definitions']['TypedDefinition']['properties']).to eql({
105-
"prop_integer"=>{"type"=>"integer", "format"=>"int32"},
106-
"prop_long"=>{"type"=>"integer", "format"=>"int64"},
107-
"prop_float"=>{"type"=>"number", "format"=>"float"},
108-
"prop_double"=>{"type"=>"number", "format"=>"double"},
109-
"prop_string"=>{"type"=>"string"},
110-
"prop_symbol"=>{"type"=>"string"},
111-
"prop_date"=>{"type"=>"string", "format"=>"date"},
112-
"prop_date_time"=>{"type"=>"string", "format"=>"date-time"},
113-
"prop_time"=>{"type"=>"string", "format"=>"date-time"},
114-
"prop_password"=>{"type"=>"string", "format"=>"password"},
115-
"prop_email"=>{"type"=>"string", "format"=>"email"},
116-
"prop_boolean"=>{"type"=>"boolean"},
117-
"prop_file"=>{"type"=>"file"},
118-
"prop_json"=>{"type"=>"json"}
105+
"prop_integer"=>{"type"=>"integer", "format"=>"int32", "description"=>"prop_integer description"},
106+
"prop_long"=>{"type"=>"integer", "format"=>"int64", "description"=>"prop_long description"},
107+
"prop_float"=>{"type"=>"number", "format"=>"float", "description"=>"prop_float description"},
108+
"prop_double"=>{"type"=>"number", "format"=>"double", "description"=>"prop_double description"},
109+
"prop_string"=>{"type"=>"string", "description"=>"prop_string description"},
110+
"prop_symbol"=>{"type"=>"string", "description"=>"prop_symbol description"},
111+
"prop_date"=>{"type"=>"string", "format"=>"date", "description"=>"prop_date description"},
112+
"prop_date_time"=>{"type"=>"string", "format"=>"date-time", "description"=>"prop_date_time description"},
113+
"prop_time"=>{"type"=>"string", "format"=>"date-time", "description"=>"prop_time description"},
114+
"prop_password"=>{"type"=>"string", "format"=>"password", "description"=>"prop_password description"},
115+
"prop_email"=>{"type"=>"string", "format"=>"email", "description"=>"prop_email description"},
116+
"prop_boolean"=>{"type"=>"boolean", "description"=>"prop_boolean description"},
117+
"prop_file"=>{"type"=>"file", "description"=>"prop_file description"},
118+
"prop_json"=>{"type"=>"json", "description"=>"prop_json description"}
119119
})
120120
end
121121
end

spec/swagger_v2/response_model_spec.rb

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ def app
105105
"type"=>"object",
106106
"description" => "This returns something or an error",
107107
"properties"=>{
108-
"code"=>{"type"=>"string"},
109-
"message"=>{"type"=>"string"}
108+
"code"=>{"type"=>"string","description"=>"Error code"},
109+
"message"=>{"type"=>"string","description"=>"Error message"}
110110
}}
111111
)
112112

@@ -115,27 +115,27 @@ def app
115115
{ "type"=>"object",
116116
"description" => "This returns something or an error",
117117
"properties"=>
118-
{ "text"=>{"type"=>"string"},
119-
"kind"=>{"$ref"=>"#/definitions/Kind"},
120-
"kind2"=>{"$ref"=>"#/definitions/Kind"},
121-
"kind3"=>{"$ref"=>"#/definitions/Kind"},
122-
"tags"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/Tag"}},
123-
"relation"=>{"$ref"=>"#/definitions/Relation"}}}
118+
{ "text"=>{"type"=>"string","description"=>"Content of something."},
119+
"kind"=>{"$ref"=>"#/definitions/Kind","description"=>"The kind of this something."},
120+
"kind2"=>{"$ref"=>"#/definitions/Kind","description"=>"Secondary kind."},
121+
"kind3"=>{"$ref"=>"#/definitions/Kind","description"=>"Tertiary kind."},
122+
"tags"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/Tag"},"description"=>"Tags."},
123+
"relation"=>{"$ref"=>"#/definitions/Relation","description"=>"A related model."}}}
124124
)
125125

126126
expect(subject['definitions'].keys).to include 'Kind'
127127
expect(subject['definitions']['Kind']).to eq(
128-
"type"=>"object", "properties"=>{"title"=>{"type"=>"string"}}
128+
"type"=>"object", "properties"=>{"title"=>{"type"=>"string","description"=>"Title of the kind."}}
129129
)
130130

131131
expect(subject['definitions'].keys).to include 'Relation'
132132
expect(subject['definitions']['Relation']).to eq(
133-
"type"=>"object", "properties"=>{"name"=>{"type"=>"string"}}
133+
"type"=>"object", "properties"=>{"name"=>{"type"=>"string","description"=>"Name"}}
134134
)
135135

136136
expect(subject['definitions'].keys).to include 'Tag'
137137
expect(subject['definitions']['Tag']).to eq(
138-
"type"=>"object", "properties"=>{"name"=>{"type"=>"string"}}
138+
"type"=>"object", "properties"=>{"name"=>{"type"=>"string","description"=>"Name"}}
139139
)
140140
end
141141
end
@@ -193,18 +193,18 @@ def app
193193

194194
it "it prefer entity over others" do
195195
expect(subject['definitions']).to eql({
196-
"Kind"=>{"type"=>"object", "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}}},
197-
"Tag"=>{"type"=>"object", "properties"=>{"name"=>{"type"=>"string"}}},
198-
"Relation"=>{"type"=>"object", "properties"=>{"name"=>{"type"=>"string"}}},
196+
"Kind"=>{"type"=>"object", "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32", "description"=>"Title of the kind."}}},
197+
"Tag"=>{"type"=>"object", "properties"=>{"name"=>{"type"=>"string", "description"=>"Name"}}},
198+
"Relation"=>{"type"=>"object", "properties"=>{"name"=>{"type"=>"string", "description"=>"Name"}}},
199199
"SomeEntity"=>{
200200
"type"=>"object",
201201
"properties"=>{
202-
"text"=>{"type"=>"string"},
203-
"kind"=>{"$ref"=>"#/definitions/Kind"},
204-
"kind2"=>{"$ref"=>"#/definitions/Kind"},
205-
"kind3"=>{"$ref"=>"#/definitions/Kind"},
206-
"tags"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/Tag"}},
207-
"relation"=>{"$ref"=>"#/definitions/Relation"}
202+
"text"=>{"type"=>"string", "description"=>"Content of something."},
203+
"kind"=>{"$ref"=>"#/definitions/Kind", "description"=>"The kind of this something."},
204+
"kind2"=>{"$ref"=>"#/definitions/Kind", "description"=>"Secondary kind."},
205+
"kind3"=>{"$ref"=>"#/definitions/Kind", "description"=>"Tertiary kind."},
206+
"tags"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/Tag"}, "description"=>"Tags."},
207+
"relation"=>{"$ref"=>"#/definitions/Relation", "description"=>"A related model."}
208208
},
209209
"description"=>"This returns something"
210210
}})

0 commit comments

Comments
 (0)