grape-swagger 0.20.2 → 0.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -3
  3. data/.rubocop_todo.yml +43 -33
  4. data/.travis.yml +22 -13
  5. data/CHANGELOG.md +29 -53
  6. data/Gemfile +1 -1
  7. data/README.md +24 -24
  8. data/example/api/endpoints.rb +28 -29
  9. data/example/api/entities.rb +1 -1
  10. data/example/config.ru +5 -7
  11. data/grape-swagger.gemspec +1 -1
  12. data/lib/grape-swagger.rb +9 -6
  13. data/lib/grape-swagger/doc_methods.rb +1 -1
  14. data/lib/grape-swagger/doc_methods/extensions.rb +3 -3
  15. data/lib/grape-swagger/doc_methods/headers.rb +1 -1
  16. data/lib/grape-swagger/doc_methods/move_params.rb +25 -16
  17. data/lib/grape-swagger/doc_methods/operation_id.rb +2 -2
  18. data/lib/grape-swagger/doc_methods/parse_params.rb +12 -5
  19. data/lib/grape-swagger/doc_methods/path_string.rb +1 -1
  20. data/lib/grape-swagger/doc_methods/status_codes.rb +3 -1
  21. data/lib/grape-swagger/doc_methods/tag_name_description.rb +1 -1
  22. data/lib/grape-swagger/endpoint.rb +33 -46
  23. data/lib/grape-swagger/grape/route.rb +16 -0
  24. data/lib/grape-swagger/version.rb +1 -1
  25. data/spec/issues/403_versions_spec.rb +158 -0
  26. data/spec/lib/data_type_spec.rb +9 -10
  27. data/spec/lib/endpoint_spec.rb +1 -2
  28. data/spec/lib/extensions_spec.rb +44 -40
  29. data/spec/lib/move_params_spec.rb +113 -93
  30. data/spec/lib/operation_id_spec.rb +42 -12
  31. data/spec/lib/optional_object_spec.rb +3 -4
  32. data/spec/lib/path_string_spec.rb +2 -2
  33. data/spec/lib/produces_consumes_spec.rb +64 -53
  34. data/spec/markdown/redcarpet_adapter_spec.rb +1 -1
  35. data/spec/spec_helper.rb +1 -1
  36. data/spec/support/api_swagger_v2_result.rb +122 -128
  37. data/spec/support/namespace_tags.rb +17 -19
  38. data/spec/support/the_api_entities.rb +1 -3
  39. data/spec/support/the_paths_definitions.rb +95 -85
  40. data/spec/swagger_v2/api_swagger_v2_definitions-models_spec.rb +1 -1
  41. data/spec/swagger_v2/api_swagger_v2_detail_spec.rb +19 -19
  42. data/spec/swagger_v2/api_swagger_v2_extensions_spec.rb +21 -21
  43. data/spec/swagger_v2/api_swagger_v2_format-content_type_spec.rb +34 -32
  44. data/spec/swagger_v2/api_swagger_v2_global_configuration_spec.rb +5 -7
  45. data/spec/swagger_v2/api_swagger_v2_headers_spec.rb +19 -18
  46. data/spec/swagger_v2/api_swagger_v2_hide_documentation_path_spec.rb +9 -10
  47. data/spec/swagger_v2/api_swagger_v2_mounted_spec.rb +21 -24
  48. data/spec/swagger_v2/api_swagger_v2_param_type_body_nested_spec.rb +90 -92
  49. data/spec/swagger_v2/api_swagger_v2_param_type_body_spec.rb +54 -54
  50. data/spec/swagger_v2/api_swagger_v2_param_type_spec.rb +65 -57
  51. data/spec/swagger_v2/api_swagger_v2_request_params_fix_spec.rb +17 -14
  52. data/spec/swagger_v2/api_swagger_v2_response_spec.rb +79 -123
  53. data/spec/swagger_v2/api_swagger_v2_spec.rb +33 -34
  54. data/spec/swagger_v2/api_swagger_v2_type-format_spec.rb +32 -36
  55. data/spec/swagger_v2/boolean_params_spec.rb +1 -1
  56. data/spec/swagger_v2/default_api_spec.rb +26 -29
  57. data/spec/swagger_v2/description_not_initialized.rb +3 -3
  58. data/spec/swagger_v2/float_api_spec.rb +1 -1
  59. data/spec/swagger_v2/form_params_spec.rb +4 -4
  60. data/spec/swagger_v2/hide_api_spec.rb +48 -51
  61. data/spec/swagger_v2/host.rb +1 -1
  62. data/spec/swagger_v2/mounted_target_class_spec.rb +31 -33
  63. data/spec/swagger_v2/namespace_tags_prefix_spec.rb +23 -21
  64. data/spec/swagger_v2/namespace_tags_spec.rb +23 -20
  65. data/spec/swagger_v2/param_type_spec.rb +5 -6
  66. data/spec/swagger_v2/param_values_spec.rb +31 -37
  67. data/spec/swagger_v2/params_array_spec.rb +17 -15
  68. data/spec/swagger_v2/params_hash_spec.rb +17 -15
  69. data/spec/swagger_v2/params_nested_spec.rb +12 -10
  70. data/spec/swagger_v2/reference_entity.rb +9 -9
  71. data/spec/swagger_v2/response_model_spec.rb +58 -62
  72. data/spec/swagger_v2/simple_mounted_api_spec.rb +179 -147
  73. metadata +5 -10
  74. data/spec/params_entity_spec.rb +0 -49
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'response' do
4
- include_context "the api entities"
4
+ include_context 'the api entities'
5
5
 
6
6
  before :all do
7
7
  module TheApi
@@ -9,27 +9,26 @@ describe 'response' do
9
9
  format :json
10
10
 
11
11
  desc 'This returns something',
12
- params: Entities::UseResponse.documentation,
13
- failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}]
12
+ params: Entities::UseResponse.documentation,
13
+ failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
14
14
  post '/params_response' do
15
- { "declared_params" => declared(params) }
15
+ { 'declared_params' => declared(params) }
16
16
  end
17
17
 
18
18
  desc 'This returns something',
19
- entity: Entities::UseResponse,
20
- failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}]
19
+ entity: Entities::UseResponse,
20
+ failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
21
21
  get '/entity_response' do
22
- { "declared_params" => declared(params) }
22
+ { 'declared_params' => declared(params) }
23
23
  end
24
24
 
25
25
  desc 'This returns something',
26
- entity: Entities::UseItemResponseAsType,
27
- failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}]
26
+ entity: Entities::UseItemResponseAsType,
27
+ failure: [{ code: 400, message: 'NotFound', model: Entities::ApiError }]
28
28
  get '/nested_type' do
29
- { "declared_params" => declared(params) }
29
+ { 'declared_params' => declared(params) }
30
30
  end
31
31
 
32
-
33
32
  add_swagger_documentation
34
33
  end
35
34
  end
@@ -39,143 +38,100 @@ describe 'response' do
39
38
  TheApi::ResponseApi
40
39
  end
41
40
 
42
- describe "uses nested type as response object" do
41
+ describe 'uses nested type as response object' do
43
42
  subject do
44
43
  get '/swagger_doc/nested_type'
45
44
  JSON.parse(last_response.body)
46
45
  end
47
46
  specify do
48
- expect(subject).to eql({
49
- "info"=>{"title"=>"API title", "version"=>"v1"},
50
- "swagger"=>"2.0",
51
- "produces"=>["application/json"],
52
- "host"=>"example.org",
53
- "tags"=>[
54
- {"name"=>"params_response", "description"=>"Operations about params_responses"},
55
- {"name"=>"entity_response", "description"=>"Operations about entity_responses"},
56
- {"name"=>"nested_type", "description"=>"Operations about nested_types"}
57
- ],
58
- "paths"=>{
59
- "/nested_type"=>{
60
- "get"=>{
61
- "description"=>"This returns something",
62
- "produces"=>["application/json"],
63
- "responses"=>{
64
- "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseItemResponseAsType"}},
65
- "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}}
66
- },
67
- "tags"=>["nested_type"],
68
- "operationId"=>"getNestedType"
69
- }}},
70
- "definitions"=>{
71
- "ResponseItem"=>{
72
- "type"=>"object",
73
- "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "name"=>{"type"=>"string"}}
74
- },
75
- "UseItemResponseAsType"=>{
76
- "type"=>"object",
77
- "properties"=>{"description"=>{"type"=>"string"}, "responses"=>{"$ref"=>"#/definitions/ResponseItem"}},
78
- "description"=>"This returns something"
79
- },
80
- "ApiError"=>{
81
- "type"=>"object",
82
- "properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}},
83
- "description"=>"This returns something"
84
- }}
47
+ expect(subject['paths']['/nested_type']['get']).to eql(
48
+ 'description' => 'This returns something',
49
+ 'produces' => ['application/json'],
50
+ 'responses' => {
51
+ '200' => { 'description' => 'This returns something', 'schema' => { '$ref' => '#/definitions/UseItemResponseAsType' } },
52
+ '400' => { 'description' => 'NotFound', 'schema' => { '$ref' => '#/definitions/ApiError' } }
53
+ },
54
+ 'tags' => ['nested_type'],
55
+ 'operationId' => 'getNestedType')
56
+ expect(subject['definitions']).to eql(
57
+ 'ResponseItem' => {
58
+ 'type' => 'object',
59
+ 'properties' => { 'id' => { 'type' => 'integer', 'format' => 'int32' }, 'name' => { 'type' => 'string' } }
60
+ },
61
+ 'UseItemResponseAsType' => {
62
+ 'type' => 'object',
63
+ 'properties' => { 'description' => { 'type' => 'string' }, 'responses' => { '$ref' => '#/definitions/ResponseItem' } },
64
+ 'description' => 'This returns something'
65
+ },
66
+ 'ApiError' => {
67
+ 'type' => 'object',
68
+ 'properties' => { 'code' => { 'type' => 'integer', 'format' => 'int32' }, 'message' => { 'type' => 'string' } },
69
+ 'description' => 'This returns something'
85
70
  })
86
71
  end
87
72
  end
88
73
 
89
- describe "uses entity as response object" do
74
+ describe 'uses entity as response object' do
90
75
  subject do
91
76
  get '/swagger_doc/entity_response'
92
77
  JSON.parse(last_response.body)
93
78
  end
94
79
 
95
80
  specify do
96
- expect(subject).to eql({
97
- "info"=>{"title"=>"API title", "version"=>"v1"},
98
- "swagger"=>"2.0",
99
- "produces"=>["application/json"],
100
- "host"=>"example.org",
101
- "tags" => [
102
- {"name"=>"params_response", "description"=>"Operations about params_responses"},
103
- {"name"=>"entity_response", "description"=>"Operations about entity_responses"},
104
- {"name"=>"nested_type", "description"=>"Operations about nested_types"}
105
- ],
106
- "paths"=>{
107
- "/entity_response"=>{
108
- "get"=>{
109
- "description"=>"This returns something",
110
- "produces"=>["application/json"],
111
- "tags"=>["entity_response"],
112
- "operationId"=>"getEntityResponse",
113
- "responses"=>{
114
- "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseResponse"}},
115
- "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}}}}}},
116
- "definitions"=>{
117
- "ResponseItem"=>{
118
- "type"=>"object",
119
- "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "name"=>{"type"=>"string"}}},
120
- "UseResponse"=>{
121
- "type"=>"object",
122
- "properties"=>{"description"=>{"type"=>"string"}, "$responses"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/ResponseItem"}}},
123
- "description"=>"This returns something"
124
- },
125
- "ApiError"=>{
126
- "type"=>"object",
127
- "properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}},
128
- "description"=>"This returns something"
129
- }
130
- }})
81
+ expect(subject['paths']['/entity_response']['get']).to eql(
82
+ 'description' => 'This returns something',
83
+ 'produces' => ['application/json'],
84
+ 'responses' => {
85
+ '200' => { 'description' => 'This returns something', 'schema' => { '$ref' => '#/definitions/UseResponse' } },
86
+ '400' => { 'description' => 'NotFound', 'schema' => { '$ref' => '#/definitions/ApiError' } }
87
+ },
88
+ 'tags' => ['entity_response'],
89
+ 'operationId' => 'getEntityResponse')
90
+ expect(subject['definitions']).to eql(
91
+ 'ResponseItem' => {
92
+ 'type' => 'object',
93
+ 'properties' => { 'id' => { 'type' => 'integer', 'format' => 'int32' }, 'name' => { 'type' => 'string' } }
94
+ },
95
+ 'UseResponse' => {
96
+ 'type' => 'object',
97
+ 'properties' => { 'description' => { 'type' => 'string' }, '$responses' => { 'type' => 'array', 'items' => { '$ref' => '#/definitions/ResponseItem' } } },
98
+ 'description' => 'This returns something'
99
+ },
100
+ 'ApiError' => {
101
+ 'type' => 'object',
102
+ 'properties' => { 'code' => { 'type' => 'integer', 'format' => 'int32' }, 'message' => { 'type' => 'string' } },
103
+ 'description' => 'This returns something'
104
+ })
131
105
  end
132
106
  end
133
107
 
134
- describe "uses params as response object" do
108
+ describe 'uses params as response object' do
135
109
  subject do
136
110
  get '/swagger_doc/params_response'
137
111
  JSON.parse(last_response.body)
138
112
  end
139
113
 
140
114
  specify do
141
- expect(subject).to eql({
142
- "info"=>{"title"=>"API title", "version"=>"v1"},
143
- "swagger"=>"2.0",
144
- "produces"=>["application/json"],
145
- "host"=>"example.org",
146
- "tags" => [
147
- {"name"=>"params_response", "description"=>"Operations about params_responses"},
148
- {"name"=>"entity_response", "description"=>"Operations about entity_responses"},
149
- {"name"=>"nested_type", "description"=>"Operations about nested_types"}
115
+ expect(subject['paths']['/params_response']['post']).to eql(
116
+ 'description' => 'This returns something',
117
+ 'produces' => ['application/json'],
118
+ 'consumes' => ['application/json'],
119
+ 'parameters' => [
120
+ { 'in' => 'formData', 'name' => 'description', 'type' => 'string', 'required' => false },
121
+ { 'in' => 'formData', 'name' => '$responses', 'type' => 'array', 'items' => { 'type' => 'string' }, 'required' => false }
150
122
  ],
151
- "paths"=>{
152
- "/params_response"=>{
153
- "post"=>{
154
- "description"=>"This returns something",
155
- "produces"=>["application/json"],
156
- "consumes"=>["application/json"],
157
- "parameters"=>[
158
- {"in"=>"formData", "name"=>"description", "description"=>nil, "type"=>"string", "required"=>false},
159
- {"in"=>"formData", "name"=>"$responses", "description"=>nil, "required"=>false, "type"=>"array", "items"=>{"type"=>"string"}}],
160
- "tags"=>["params_response"],
161
- "operationId"=>"postParamsResponse",
162
- "responses"=>{
163
- "201"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/ParamsResponse"}},
164
- "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}}}
165
- }}},
166
- "definitions"=>{
167
- "ParamsResponse"=>{
168
- "type"=>"object",
169
- "properties"=>{"description"=>{"type"=>"string"}, "$responses"=>{"type"=>"string"}},
170
- "description"=>"This returns something"
171
- },
172
- "ApiError"=>{
173
- "type"=>"object",
174
- "properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}},
175
- "description"=>"This returns something"
176
- }
177
- }})
123
+ 'responses' => {
124
+ '201' => { 'description' => 'This returns something' },
125
+ '400' => { 'description' => 'NotFound', 'schema' => { '$ref' => '#/definitions/ApiError' } }
126
+ },
127
+ 'tags' => ['params_response'],
128
+ 'operationId' => 'postParamsResponse')
129
+ expect(subject['definitions']).to eql(
130
+ 'ApiError' => {
131
+ 'type' => 'object',
132
+ 'properties' => { 'code' => { 'type' => 'integer', 'format' => 'int32' }, 'message' => { 'type' => 'string' } },
133
+ 'description' => 'This returns something'
134
+ })
178
135
  end
179
136
  end
180
-
181
137
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'swagger spec v2.0' do
4
- include_context "swagger example"
4
+ include_context 'swagger example'
5
5
 
6
6
  def app
7
7
  Class.new(Grape::API) do
@@ -10,7 +10,7 @@ describe 'swagger spec v2.0' do
10
10
  # Thing stuff
11
11
  desc 'This gets Things.' do
12
12
  params Entities::Something.documentation
13
- http_codes [ { code: 401, message: 'Unauthorized', model: Entities::ApiError } ]
13
+ http_codes [{ code: 401, message: 'Unauthorized', model: Entities::ApiError }]
14
14
  end
15
15
  get '/thing' do
16
16
  something = OpenStruct.new text: 'something'
@@ -29,7 +29,7 @@ describe 'swagger spec v2.0' do
29
29
  end
30
30
 
31
31
  desc 'This gets Thing.' do
32
- http_codes [ { code: 200, message: 'getting a single thing' }, { code: 401, message: 'Unauthorized' } ]
32
+ http_codes [{ code: 200, message: 'getting a single thing' }, { code: 401, message: 'Unauthorized' }]
33
33
  end
34
34
  params do
35
35
  requires :id, type: Integer
@@ -40,18 +40,18 @@ describe 'swagger spec v2.0' do
40
40
  end
41
41
 
42
42
  desc 'This creates Thing.',
43
- success: Entities::Something
43
+ success: Entities::Something
44
44
  params do
45
45
  requires :text, type: String, documentation: { type: 'string', desc: 'Content of something.' }
46
46
  requires :links, type: Array, documentation: { type: 'link', is_array: true }
47
47
  end
48
- post '/thing', http_codes: [ { code: 422, message: 'Unprocessible Entity' } ] do
48
+ post '/thing', http_codes: [{ code: 422, message: 'Unprocessible Entity' }] do
49
49
  something = OpenStruct.new text: 'something'
50
50
  present something, with: Entities::Something
51
51
  end
52
52
 
53
53
  desc 'This updates Thing.',
54
- success: Entities::Something
54
+ success: Entities::Something
55
55
  params do
56
56
  requires :id, type: Integer
57
57
  optional :text, type: String, desc: 'Content of something.'
@@ -63,7 +63,7 @@ describe 'swagger spec v2.0' do
63
63
  end
64
64
 
65
65
  desc 'This deletes Thing.',
66
- entity: Entities::Something
66
+ entity: Entities::Something
67
67
  params do
68
68
  requires :id, type: Integer
69
69
  end
@@ -73,7 +73,7 @@ describe 'swagger spec v2.0' do
73
73
  end
74
74
 
75
75
  desc 'dummy route.',
76
- failure: [{ code: 401, message: 'Unauthorized' }]
76
+ failure: [{ code: 401, message: 'Unauthorized' }]
77
77
  params do
78
78
  requires :id, type: Integer
79
79
  end
@@ -82,11 +82,11 @@ describe 'swagger spec v2.0' do
82
82
 
83
83
  namespace :other_thing do
84
84
  desc 'nested route inside namespace',
85
- entity: Entities::QueryInput,
86
- x: {
87
- 'amazon-apigateway-auth' => {type: 'none'},
88
- 'amazon-apigateway-integration' => {type: 'aws', uri: 'foo_bar_uri', httpMethod: 'get'}
89
- }
85
+ entity: Entities::QueryInput,
86
+ x: {
87
+ 'amazon-apigateway-auth' => { type: 'none' },
88
+ 'amazon-apigateway-integration' => { type: 'aws', uri: 'foo_bar_uri', httpMethod: 'get' }
89
+ }
90
90
 
91
91
  params do
92
92
  requires :elements, documentation: {
@@ -102,19 +102,18 @@ describe 'swagger spec v2.0' do
102
102
  end
103
103
  end
104
104
 
105
-
106
105
  version 'v3', using: :path
107
106
  add_swagger_documentation api_version: 'v1',
108
107
  base_path: '/api',
109
108
  info: {
110
- title: "The API title to be displayed on the API homepage.",
111
- description: "A description of the API.",
112
- contact_name: "Contact name",
113
- contact_email: "Contact@email.com",
114
- contact_url: "Contact URL",
115
- license: "The name of the license.",
116
- license_url: "www.The-URL-of-the-license.org",
117
- terms_of_service_url: "www.The-URL-of-the-terms-and-service.com",
109
+ title: 'The API title to be displayed on the API homepage.',
110
+ description: 'A description of the API.',
111
+ contact_name: 'Contact name',
112
+ contact_email: 'Contact@email.com',
113
+ contact_url: 'Contact URL',
114
+ license: 'The name of the license.',
115
+ license_url: 'www.The-URL-of-the-license.org',
116
+ terms_of_service_url: 'www.The-URL-of-the-terms-and-service.com'
118
117
  }
119
118
  end
120
119
  end
@@ -128,28 +127,28 @@ describe 'swagger spec v2.0' do
128
127
  describe 'swagger object' do
129
128
  describe 'required keys' do
130
129
  it { expect(json.keys).to include 'swagger' }
131
- it { expect(json['swagger']).to eql '2.0' }
130
+ it { expect(json['swagger']).to eql '2.0' }
132
131
  it { expect(json.keys).to include 'info' }
133
- it { expect(json['info']).to be_a Hash }
132
+ it { expect(json['info']).to be_a Hash }
134
133
  it { expect(json.keys).to include 'paths' }
135
- it { expect(json['paths']).to be_a Hash }
134
+ it { expect(json['paths']).to be_a Hash }
136
135
  end
137
136
 
138
137
  describe 'info object required keys' do
139
138
  let(:info) { json['info'] }
140
139
 
141
140
  it { expect(info.keys).to include 'title' }
142
- it { expect(info['title']).to be_a String }
141
+ it { expect(info['title']).to be_a String }
143
142
  it { expect(info.keys).to include 'version' }
144
- it { expect(info['version']).to be_a String }
143
+ it { expect(info['version']).to be_a String }
145
144
 
146
145
  describe 'license object' do
147
146
  let(:license) { json['info']['license'] }
148
147
 
149
148
  it { expect(license.keys).to include 'name' }
150
- it { expect(license['name']).to be_a String }
149
+ it { expect(license['name']).to be_a String }
151
150
  it { expect(license.keys).to include 'url' }
152
- it { expect(license['url']).to be_a String }
151
+ it { expect(license['url']).to be_a String }
153
152
  end
154
153
 
155
154
  describe 'contact object' do
@@ -158,16 +157,16 @@ describe 'swagger spec v2.0' do
158
157
  it { expect(contact.keys).to include 'name' }
159
158
  it { expect(contact['name']).to be_a String }
160
159
  it { expect(contact.keys).to include 'email' }
161
- it { expect(contact['email']).to be_a String }
160
+ it { expect(contact['email']).to be_a String }
162
161
  it { expect(contact.keys).to include 'url' }
163
- it { expect(contact['url']).to be_a String }
162
+ it { expect(contact['url']).to be_a String }
164
163
  end
165
164
  end
166
165
 
167
166
  describe 'path object' do
168
167
  let(:paths) { json['paths'] }
169
168
 
170
- it "hides documentation paths per default" do
169
+ it 'hides documentation paths per default' do
171
170
  expect(paths.keys).not_to include '/swagger_doc', '/swagger_doc/{name}'
172
171
  end
173
172
 
@@ -181,7 +180,7 @@ describe 'swagger spec v2.0' do
181
180
  expect(http_verbs).to include method
182
181
  expect(declaration).to have_key('responses')
183
182
 
184
- declaration["responses"].each do |status_code, response|
183
+ declaration['responses'].each do |status_code, response|
185
184
  expect(status_code).to match(/\d{3}/)
186
185
  expect(response).to have_key('description')
187
186
  end
@@ -201,7 +200,7 @@ describe 'swagger spec v2.0' do
201
200
  end
202
201
  end
203
202
 
204
- describe "swagger file" do
203
+ describe 'swagger file' do
205
204
  it { expect(json).to eql swagger_json }
206
205
  end
207
206
  end
@@ -43,7 +43,7 @@ describe 'type format settings' do
43
43
 
44
44
  class TypeFormatApi < Grape::API
45
45
  desc 'full set of request data types',
46
- success: TheApi::Entities::TypedDefinition
46
+ success: TheApi::Entities::TypedDefinition
47
47
 
48
48
  params do
49
49
  # grape supported data types
@@ -56,15 +56,13 @@ describe 'type format settings' do
56
56
  requires :param_date, type: Date
57
57
  requires :param_date_time, type: DateTime
58
58
  requires :param_time, type: Time
59
- requires :param_password, type: 'password'
60
- requires :param_email, type: 'email'
61
59
  optional :param_boolean, type: Boolean
62
60
  optional :param_file, type: File
63
61
  optional :param_json, type: JSON
64
62
  end
65
63
 
66
64
  post '/request_types' do
67
- { "declared_params" => declared(params) }
65
+ { 'declared_params' => declared(params) }
68
66
  end
69
67
 
70
68
  add_swagger_documentation
@@ -82,40 +80,38 @@ describe 'type format settings' do
82
80
  end
83
81
 
84
82
  specify do
85
- expect(subject['paths']['/request_types']['post']['parameters']).to eql([
86
- {"in"=>"formData", "name"=>"param_integer", "description"=>nil, "required"=>true, "type"=>"integer", "format"=>"int32"},
87
- {"in"=>"formData", "name"=>"param_long", "description"=>nil, "required"=>true, "type"=>"integer", "format"=>"int64"},
88
- {"in"=>"formData", "name"=>"param_float", "description"=>nil, "required"=>true, "type"=>"number", "format"=>"float"},
89
- {"in"=>"formData", "name"=>"param_double", "description"=>nil, "required"=>true, "type"=>"number", "format"=>"double"},
90
- {"in"=>"formData", "name"=>"param_string", "description"=>nil, "required"=>false, "type"=>"string"},
91
- {"in"=>"formData", "name"=>"param_symbol", "description"=>nil, "required"=>false, "type"=>"string"},
92
- {"in"=>"formData", "name"=>"param_date", "description"=>nil, "required"=>true, "type"=>"string", "format"=>"date"},
93
- {"in"=>"formData", "name"=>"param_date_time", "description"=>nil, "required"=>true, "type"=>"string", "format"=>"date-time"},
94
- {"in"=>"formData", "name"=>"param_time", "description"=>nil, "required"=>true, "type"=>"string", "format"=>"date-time"},
95
- {"in"=>"formData", "name"=>"param_password", "description"=>nil, "required"=>true, "type"=>"string", "format"=>"password"},
96
- {"in"=>"formData", "name"=>"param_email", "description"=>nil, "required"=>true, "type"=>"string", "format"=>"email"},
97
- {"in"=>"formData", "name"=>"param_boolean", "description"=>nil, "required"=>false, "type"=>"boolean"},
98
- {"in"=>"formData", "name"=>"param_file", "description"=>nil, "required"=>false, "type"=>"file"},
99
- {"in"=>"formData", "name"=>"param_json", "description"=>nil, "required"=>false, "type"=>"json"}
100
- ])
83
+ expect(subject['paths']['/request_types']['post']['parameters']).to eql(
84
+ [
85
+ { 'in' => 'formData', 'name' => 'param_integer', 'required' => true, 'type' => 'integer', 'format' => 'int32' },
86
+ { 'in' => 'formData', 'name' => 'param_long', 'required' => true, 'type' => 'integer', 'format' => 'int64' },
87
+ { 'in' => 'formData', 'name' => 'param_float', 'required' => true, 'type' => 'number', 'format' => 'float' },
88
+ { 'in' => 'formData', 'name' => 'param_double', 'required' => true, 'type' => 'number', 'format' => 'double' },
89
+ { 'in' => 'formData', 'name' => 'param_string', 'required' => false, 'type' => 'string' },
90
+ { 'in' => 'formData', 'name' => 'param_symbol', 'required' => false, 'type' => 'string' },
91
+ { 'in' => 'formData', 'name' => 'param_date', 'required' => true, 'type' => 'string', 'format' => 'date' },
92
+ { 'in' => 'formData', 'name' => 'param_date_time', 'required' => true, 'type' => 'string', 'format' => 'date-time' },
93
+ { 'in' => 'formData', 'name' => 'param_time', 'required' => true, 'type' => 'string', 'format' => 'date-time' },
94
+ { 'in' => 'formData', 'name' => 'param_boolean', 'required' => false, 'type' => 'boolean' },
95
+ { 'in' => 'formData', 'name' => 'param_file', 'required' => false, 'type' => 'file' },
96
+ { 'in' => 'formData', 'name' => 'param_json', 'required' => false, 'type' => 'json' }
97
+ ])
101
98
  end
102
99
 
103
100
  specify do
104
- expect(subject['definitions']['TypedDefinition']['properties']).to eql({
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"}
119
- })
101
+ expect(subject['definitions']['TypedDefinition']['properties']).to eql(
102
+ 'prop_integer' => { 'type' => 'integer', 'format' => 'int32', 'description' => 'prop_integer description' },
103
+ 'prop_long' => { 'type' => 'integer', 'format' => 'int64', 'description' => 'prop_long description' },
104
+ 'prop_float' => { 'type' => 'number', 'format' => 'float', 'description' => 'prop_float description' },
105
+ 'prop_double' => { 'type' => 'number', 'format' => 'double', 'description' => 'prop_double description' },
106
+ 'prop_string' => { 'type' => 'string', 'description' => 'prop_string description' },
107
+ 'prop_symbol' => { 'type' => 'string', 'description' => 'prop_symbol description' },
108
+ 'prop_date' => { 'type' => 'string', 'format' => 'date', 'description' => 'prop_date description' },
109
+ 'prop_date_time' => { 'type' => 'string', 'format' => 'date-time', 'description' => 'prop_date_time description' },
110
+ 'prop_time' => { 'type' => 'string', 'format' => 'date-time', 'description' => 'prop_time description' },
111
+ 'prop_password' => { 'type' => 'string', 'format' => 'password', 'description' => 'prop_password description' },
112
+ 'prop_email' => { 'type' => 'string', 'format' => 'email', 'description' => 'prop_email description' },
113
+ 'prop_boolean' => { 'type' => 'boolean', 'description' => 'prop_boolean description' },
114
+ 'prop_file' => { 'type' => 'file', 'description' => 'prop_file description' },
115
+ 'prop_json' => { 'type' => 'json', 'description' => 'prop_json description' })
120
116
  end
121
117
  end