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.
@@ -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