Skip to content

Commit 7ac9bc9

Browse files
committed
Don't document non-schema object examples
1 parent 1eb9fe6 commit 7ac9bc9

File tree

4 files changed

+56
-8
lines changed

4 files changed

+56
-8
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#### Features
44

5+
* [#885](https://github.com/ruby-grape/grape-swagger/pull/885): Don't document non-schema object examples - [@spaceraccoon](https://github.com/spaceraccoon)
56
* Your contribution here.
67

78
#### Fixes

lib/grape-swagger/doc_methods/parse_params.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def call(param, settings, path, route, definitions)
2727
document_required(settings)
2828
document_additional_properties(definitions, settings) unless value_type[:is_array]
2929
document_add_extensions(settings)
30-
document_example(settings)
30+
document_example(settings) if @parsed_param[:in] == 'body'
3131

3232
@parsed_param
3333
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
RSpec::Matchers.define_negated_matcher :exclude, :include
6+
7+
describe '#884 dont document non-schema examples' do
8+
let(:app) do
9+
Class.new(Grape::API) do
10+
namespace :issue_884 do
11+
params do
12+
requires :id, type: Integer, documentation: { example: 123 }
13+
optional :name, type: String, documentation: { example: 'Buddy Guy' }
14+
end
15+
16+
post 'document_example' do
17+
present params
18+
end
19+
20+
desc 'do not document this' do
21+
consumes ['application/x-www-form-urlencoded']
22+
end
23+
params do
24+
requires :id, type: Integer, documentation: { example: 123 }
25+
optional :name, type: String, documentation: { example: 'Buddy Guy' }
26+
end
27+
28+
post 'dont_document_example' do
29+
present params
30+
end
31+
end
32+
33+
add_swagger_documentation format: :json
34+
end
35+
end
36+
37+
subject do
38+
get '/swagger_doc'
39+
JSON.parse(last_response.body)
40+
end
41+
42+
let(:parameters_document_example) { subject['definitions']['postIssue884DocumentExample']['properties'] }
43+
let(:parameters_dont_document_example) { subject['paths']['/issue_884/dont_document_example']['post']['parameters'] }
44+
45+
specify do
46+
expect(parameters_document_example.values).to all(include('example'))
47+
expect(parameters_dont_document_example).to all(exclude('example'))
48+
end
49+
end

spec/swagger_v2/params_example_spec.rb

+5-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def app
1313
optional :obj, type: 'Object', documentation: { example: { 'foo' => 'bar' } }
1414
end
1515

16-
get '/endpoint_with_examples' do
16+
post '/endpoint_with_examples' do
1717
{ 'declared_params' => declared(params) }
1818
end
1919

@@ -27,13 +27,11 @@ def app
2727
JSON.parse(last_response.body)
2828
end
2929

30+
let(:parameters) { subject['definitions']['postEndpointWithExamples']['properties'] }
31+
3032
specify do
31-
expect(subject['paths']['/endpoint_with_examples']['get']['parameters']).to eql(
32-
[
33-
{ 'in' => 'query', 'name' => 'id', 'type' => 'integer', 'example' => 123, 'format' => 'int32', 'required' => true },
34-
{ 'in' => 'query', 'name' => 'name', 'type' => 'string', 'example' => 'Person', 'required' => false },
35-
{ 'in' => 'query', 'name' => 'obj', 'type' => 'Object', 'example' => { 'foo' => 'bar' }, 'required' => false }
36-
]
33+
expect(parameters).to eql(
34+
{ 'id' => { 'type' => 'integer', 'format' => 'int32', 'example' => 123 }, 'name' => { 'type' => 'string', 'example' => 'Person' }, 'obj' => { 'type' => 'Object', 'example' => { 'foo' => 'bar' } } }
3735
)
3836
end
3937
end

0 commit comments

Comments
 (0)