swaggable 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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.9"
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.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-06-30 00:00:00.000000000 Z
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.9'
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.9'
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