swaggable 0.4.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +13 -0
- data/Gemfile +9 -3
- data/README.md +86 -11
- data/lib/swaggable.rb +5 -0
- data/lib/swaggable/api_definition.rb +10 -0
- data/lib/swaggable/attribute_definition.rb +72 -0
- data/lib/swaggable/definition_base.rb +15 -0
- data/lib/swaggable/endpoint_definition.rb +1 -6
- data/lib/swaggable/enumerable_attributes.rb +29 -0
- data/lib/swaggable/grape_adapter.rb +4 -0
- data/lib/swaggable/grape_entity_translator.rb +38 -0
- data/lib/swaggable/parameter_definition.rb +11 -26
- data/lib/swaggable/rack_app.rb +4 -0
- data/lib/swaggable/response_definition.rb +1 -6
- data/lib/swaggable/schema_definition.rb +36 -0
- data/lib/swaggable/swagger_2_serializer.rb +42 -1
- data/lib/swaggable/swagger_2_validator.rb +5 -0
- data/lib/swaggable/tag_definition.rb +1 -6
- data/lib/swaggable/version.rb +1 -1
- data/spec/spec_helper.rb +7 -0
- data/spec/swaggable/api_definition_spec.rb +49 -1
- data/spec/swaggable/attribute_definition_spec.rb +87 -0
- data/spec/swaggable/grape_adapter_spec.rb +22 -0
- data/spec/swaggable/grape_entity_translator_spec.rb +64 -0
- data/spec/swaggable/integration_spec.rb +50 -6
- data/spec/swaggable/parameter_definition_spec.rb +27 -2
- data/spec/swaggable/rack_app_spec.rb +10 -0
- data/spec/swaggable/schema_definition_spec.rb +51 -0
- data/spec/swaggable/swagger_2_serializer_spec.rb +132 -1
- data/spec/swaggable/swagger_2_validator_spec.rb +15 -0
- data/swaggable.gemspec +3 -3
- metadata +28 -4
@@ -31,6 +31,14 @@ RSpec.describe 'Swaggable::ParameterDefinition' do
|
|
31
31
|
expect(yielded).to be true
|
32
32
|
end
|
33
33
|
|
34
|
+
it 'yields itself on initialize' do
|
35
|
+
subject = subject_class.new do
|
36
|
+
name 'Some name'
|
37
|
+
end
|
38
|
+
|
39
|
+
expect(subject.name).to eq 'Some name'
|
40
|
+
end
|
41
|
+
|
34
42
|
describe '#location' do
|
35
43
|
it 'can be set to :body, :header, :path, :query, :form' do
|
36
44
|
[:body, :header, :path, :query, :form, nil].each do |location|
|
@@ -40,7 +48,7 @@ RSpec.describe 'Swaggable::ParameterDefinition' do
|
|
40
48
|
end
|
41
49
|
|
42
50
|
it 'cannot be something other than that' do
|
43
|
-
expect { subject.location = :xyz }.to raise_exception
|
51
|
+
expect { subject.location = :xyz }.to raise_exception(ArgumentError)
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
@@ -53,7 +61,7 @@ RSpec.describe 'Swaggable::ParameterDefinition' do
|
|
53
61
|
end
|
54
62
|
|
55
63
|
it 'cannot be something other than that' do
|
56
|
-
expect { subject.type = :xyz }.to raise_exception
|
64
|
+
expect { subject.type = :xyz }.to raise_exception(ArgumentError)
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
@@ -61,4 +69,21 @@ RSpec.describe 'Swaggable::ParameterDefinition' do
|
|
61
69
|
parameter = subject_class.new location: :path
|
62
70
|
expect(parameter.location).to eq :path
|
63
71
|
end
|
72
|
+
|
73
|
+
it 'has schema definition' do
|
74
|
+
subject.location :body
|
75
|
+
|
76
|
+
subject.schema do
|
77
|
+
name :user
|
78
|
+
|
79
|
+
attributes do
|
80
|
+
add_new do
|
81
|
+
name :first_name
|
82
|
+
type :string
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
expect(subject.schema.attributes[:first_name].type).to be :string
|
88
|
+
end
|
64
89
|
end
|
@@ -45,5 +45,15 @@ RSpec.describe 'Swaggable::RackApp' do
|
|
45
45
|
subject.validate!
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
49
|
+
describe 'validate' do
|
50
|
+
it 'validates against the serializer' do
|
51
|
+
expect(serializer).
|
52
|
+
to receive(:validate).
|
53
|
+
with api_definition
|
54
|
+
|
55
|
+
subject.validate
|
56
|
+
end
|
57
|
+
end
|
48
58
|
end
|
49
59
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Swaggable::SchemaDefinition' do
|
4
|
+
subject { subject_instance }
|
5
|
+
let(:subject_instance) { subject_class.new }
|
6
|
+
let(:subject_class) { Swaggable::SchemaDefinition }
|
7
|
+
|
8
|
+
it 'has a name' do
|
9
|
+
subject.name 'My Schema'
|
10
|
+
expect(subject.name).to eq 'My Schema'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has attributes' do
|
14
|
+
subject.attributes.add_new do
|
15
|
+
name :my_attr
|
16
|
+
type :string
|
17
|
+
end
|
18
|
+
|
19
|
+
expect(subject.attributes[:my_attr].type).to be :string
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'can be empty' do
|
23
|
+
expect(subject).to be_empty
|
24
|
+
|
25
|
+
subject.attributes.add_new do
|
26
|
+
name :first_name
|
27
|
+
type :string
|
28
|
+
end
|
29
|
+
|
30
|
+
expect(subject).not_to be_empty
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'accepts attributes on initialize' do
|
34
|
+
schema = subject_class.new name: 'New name'
|
35
|
+
expect(schema.name).to eq 'New name'
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'equals by name' do
|
39
|
+
schema_1 = subject_class.new name: 'schema 1'
|
40
|
+
schema_1_again = subject_class.new name: 'schema 1'
|
41
|
+
schema_2 = subject_class.new name: 'schema 2'
|
42
|
+
|
43
|
+
expect(schema_1).to eq schema_1_again
|
44
|
+
expect([schema_1, schema_1_again].uniq.length).to eq 1
|
45
|
+
expect(schema_1).not_to eq schema_2
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'doesn\'t throw error if comparing with any random object' do
|
49
|
+
expect{ subject == double }.not_to raise_error
|
50
|
+
end
|
51
|
+
end
|
@@ -187,10 +187,130 @@ RSpec.describe 'Swaggable::Swagger2Serializer' do
|
|
187
187
|
expect(serialized_parameter[:type]).to eq :string
|
188
188
|
end
|
189
189
|
|
190
|
-
it 'has type string if nil' do
|
190
|
+
it 'has type string if nil and not body' do
|
191
191
|
parameter.type = nil
|
192
192
|
expect(serialized_parameter[:type]).to eq 'string'
|
193
193
|
end
|
194
|
+
|
195
|
+
it 'has no type string if body param' do
|
196
|
+
parameter.type = nil
|
197
|
+
parameter.location = :body
|
198
|
+
expect(serialized_parameter.has_key? :type).to be false
|
199
|
+
end
|
200
|
+
|
201
|
+
describe 'schema' do
|
202
|
+
def serialized_schema_parameter
|
203
|
+
serialized_schema[:properties][:some_parameter]
|
204
|
+
end
|
205
|
+
|
206
|
+
def serialized_schema
|
207
|
+
output[:definitions][:some_schema]
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'is not present if empty' do
|
211
|
+
expect(parameter.schema).to be_empty
|
212
|
+
expect(serialized_parameter.has_key?(:schema)).to be false
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'has a $ref if present' do
|
216
|
+
parameter.schema.name :some_schema
|
217
|
+
parameter.schema.attributes do
|
218
|
+
add_new do
|
219
|
+
name :some_parameter
|
220
|
+
type :long
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
parameter_schema = serialized_endpoint[:parameters].first[:schema]
|
225
|
+
expect(parameter_schema).to eq({:"$ref" => '#/definitions/some_schema'})
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'has type object' do
|
229
|
+
parameter.schema.name :some_schema
|
230
|
+
parameter.schema.attributes do
|
231
|
+
add_new do
|
232
|
+
name :some_parameter
|
233
|
+
type :long
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
expect(serialized_schema[:type]).to eq 'object'
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'has parameter type' do
|
241
|
+
parameter.schema.name :some_schema
|
242
|
+
parameter.schema.attributes do
|
243
|
+
add_new do
|
244
|
+
name :some_parameter
|
245
|
+
type :long
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
expect(serialized_schema_parameter[:type]).to eq :integer
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'has parameter format' do
|
253
|
+
parameter.schema.name :some_schema
|
254
|
+
parameter.schema.attributes do
|
255
|
+
add_new do
|
256
|
+
name :some_parameter
|
257
|
+
type :long
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
expect(serialized_schema_parameter[:format]).to eq :int64
|
262
|
+
end
|
263
|
+
|
264
|
+
it 'has no format if nil' do
|
265
|
+
parameter.schema.name :some_schema
|
266
|
+
parameter.schema.attributes do
|
267
|
+
add_new do
|
268
|
+
name :some_parameter
|
269
|
+
type :string
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
expect(serialized_schema_parameter.has_key?(:format)).to be false
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'has parameter required field' do
|
277
|
+
parameter.schema.name :some_schema
|
278
|
+
parameter.schema.attributes do
|
279
|
+
add_new do
|
280
|
+
name :some_parameter
|
281
|
+
type :long
|
282
|
+
required true
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
expect(serialized_schema[:required]).to eq [:some_parameter]
|
287
|
+
end
|
288
|
+
|
289
|
+
it 'has parameter description' do
|
290
|
+
parameter.schema.name :some_schema
|
291
|
+
parameter.schema.attributes do
|
292
|
+
add_new do
|
293
|
+
name :some_parameter
|
294
|
+
type :long
|
295
|
+
this.description 'a long param'
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
expect(serialized_schema_parameter[:description]).to eq 'a long param'
|
300
|
+
end
|
301
|
+
|
302
|
+
it 'has no parameter description if no decription is given' do
|
303
|
+
parameter.schema.name :some_schema
|
304
|
+
parameter.schema.attributes do
|
305
|
+
add_new do
|
306
|
+
name :some_parameter
|
307
|
+
type :long
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
expect(serialized_schema_parameter.has_key?(:description)).to be false
|
312
|
+
end
|
313
|
+
end
|
194
314
|
end
|
195
315
|
end
|
196
316
|
end
|
@@ -205,4 +325,15 @@ RSpec.describe 'Swaggable::Swagger2Serializer' do
|
|
205
325
|
subject.validate! api
|
206
326
|
end
|
207
327
|
end
|
328
|
+
|
329
|
+
describe '#validate' do
|
330
|
+
it 'validates against Swagger2Validator' do
|
331
|
+
expect(Swaggable::Swagger2Validator).
|
332
|
+
to receive(:validate).
|
333
|
+
with(subject.serialize api).
|
334
|
+
and_return(true)
|
335
|
+
|
336
|
+
subject.validate api
|
337
|
+
end
|
338
|
+
end
|
208
339
|
end
|
@@ -23,4 +23,19 @@ RSpec.describe 'Swaggable::Swagger2Validator' do
|
|
23
23
|
expect(exception.message).to match(/info/)
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
describe '.validate' do
|
28
|
+
subject { Swaggable::Swagger2Validator }
|
29
|
+
|
30
|
+
let(:valid_swagger) { JSON.parse File.read('spec/assets/valid-swagger-2.0.json') }
|
31
|
+
let(:invalid_swagger) { valid_swagger.merge("info" => nil) }
|
32
|
+
|
33
|
+
it 'returns empty errors for a valid schema' do
|
34
|
+
expect(subject.validate valid_swagger).to be_blank
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns errors for invalid schema' do
|
38
|
+
expect(subject.validate invalid_swagger).not_to be_blank
|
39
|
+
end
|
40
|
+
end
|
26
41
|
end
|
data/swaggable.gemspec
CHANGED
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_runtime_dependency "forwarding_dsl", '~> 1.0'
|
23
|
+
spec.add_runtime_dependency "forwarding_dsl", '~> 1.0', '>= 1.0.3'
|
24
24
|
spec.add_runtime_dependency "json-schema", '~> 2.5'
|
25
|
-
spec.add_runtime_dependency "mini_object", '~> 0.1'
|
25
|
+
spec.add_runtime_dependency "mini_object", '~> 0.1', '>= 0.1.7'
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", "~> 1.
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
28
28
|
spec.add_development_dependency "rake", '~> 10.4'
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swaggable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Morales
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forwarding_dsl
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.3
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: json-schema
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,6 +51,9 @@ dependencies:
|
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0.1'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.1.7
|
48
57
|
type: :runtime
|
49
58
|
prerelease: false
|
50
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -52,20 +61,23 @@ dependencies:
|
|
52
61
|
- - "~>"
|
53
62
|
- !ruby/object:Gem::Version
|
54
63
|
version: '0.1'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.1.7
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: bundler
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
58
70
|
requirements:
|
59
71
|
- - "~>"
|
60
72
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
73
|
+
version: '1.7'
|
62
74
|
type: :development
|
63
75
|
prerelease: false
|
64
76
|
version_requirements: !ruby/object:Gem::Requirement
|
65
77
|
requirements:
|
66
78
|
- - "~>"
|
67
79
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
80
|
+
version: '1.7'
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
82
|
name: rake
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,6 +100,7 @@ extensions: []
|
|
88
100
|
extra_rdoc_files: []
|
89
101
|
files:
|
90
102
|
- ".gitignore"
|
103
|
+
- ".travis.yml"
|
91
104
|
- Gemfile
|
92
105
|
- LICENSE.txt
|
93
106
|
- README.md
|
@@ -96,11 +109,16 @@ files:
|
|
96
109
|
- assets/swagger-2.0-schema.json
|
97
110
|
- lib/swaggable.rb
|
98
111
|
- lib/swaggable/api_definition.rb
|
112
|
+
- lib/swaggable/attribute_definition.rb
|
113
|
+
- lib/swaggable/definition_base.rb
|
99
114
|
- lib/swaggable/endpoint_definition.rb
|
115
|
+
- lib/swaggable/enumerable_attributes.rb
|
100
116
|
- lib/swaggable/grape_adapter.rb
|
117
|
+
- lib/swaggable/grape_entity_translator.rb
|
101
118
|
- lib/swaggable/parameter_definition.rb
|
102
119
|
- lib/swaggable/rack_app.rb
|
103
120
|
- lib/swaggable/response_definition.rb
|
121
|
+
- lib/swaggable/schema_definition.rb
|
104
122
|
- lib/swaggable/swagger_2_serializer.rb
|
105
123
|
- lib/swaggable/swagger_2_validator.rb
|
106
124
|
- lib/swaggable/tag_definition.rb
|
@@ -108,12 +126,15 @@ files:
|
|
108
126
|
- spec/assets/valid-swagger-2.0.json
|
109
127
|
- spec/spec_helper.rb
|
110
128
|
- spec/swaggable/api_definition_spec.rb
|
129
|
+
- spec/swaggable/attribute_definition_spec.rb
|
111
130
|
- spec/swaggable/endpoint_definition_spec.rb
|
112
131
|
- spec/swaggable/grape_adapter_spec.rb
|
132
|
+
- spec/swaggable/grape_entity_translator_spec.rb
|
113
133
|
- spec/swaggable/integration_spec.rb
|
114
134
|
- spec/swaggable/parameter_definition_spec.rb
|
115
135
|
- spec/swaggable/rack_app_spec.rb
|
116
136
|
- spec/swaggable/response_definition_spec.rb
|
137
|
+
- spec/swaggable/schema_definition_spec.rb
|
117
138
|
- spec/swaggable/swagger_2_serializer_spec.rb
|
118
139
|
- spec/swaggable/swagger_2_validator_spec.rb
|
119
140
|
- spec/swaggable/tag_definition_spec.rb
|
@@ -148,12 +169,15 @@ test_files:
|
|
148
169
|
- spec/assets/valid-swagger-2.0.json
|
149
170
|
- spec/spec_helper.rb
|
150
171
|
- spec/swaggable/api_definition_spec.rb
|
172
|
+
- spec/swaggable/attribute_definition_spec.rb
|
151
173
|
- spec/swaggable/endpoint_definition_spec.rb
|
152
174
|
- spec/swaggable/grape_adapter_spec.rb
|
175
|
+
- spec/swaggable/grape_entity_translator_spec.rb
|
153
176
|
- spec/swaggable/integration_spec.rb
|
154
177
|
- spec/swaggable/parameter_definition_spec.rb
|
155
178
|
- spec/swaggable/rack_app_spec.rb
|
156
179
|
- spec/swaggable/response_definition_spec.rb
|
180
|
+
- spec/swaggable/schema_definition_spec.rb
|
157
181
|
- spec/swaggable/swagger_2_serializer_spec.rb
|
158
182
|
- spec/swaggable/swagger_2_validator_spec.rb
|
159
183
|
- spec/swaggable/tag_definition_spec.rb
|