apipie-rails 1.4.0 → 1.4.2
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/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +46 -135
- data/CHANGELOG.md +16 -0
- data/apipie-rails.gemspec +1 -0
- data/lib/apipie/application.rb +6 -6
- data/lib/apipie/error_description.rb +7 -5
- data/lib/apipie/extractor/recorder.rb +3 -3
- data/lib/apipie/extractor/writer.rb +6 -6
- data/lib/apipie/generator/swagger/method_description/api_schema_service.rb +2 -2
- data/lib/apipie/generator/swagger/method_description/parameters_service.rb +7 -7
- data/lib/apipie/generator/swagger/param_description/builder.rb +3 -3
- data/lib/apipie/generator/swagger/param_description/in.rb +1 -1
- data/lib/apipie/generator/swagger/param_description/path_params_composite.rb +10 -10
- data/lib/apipie/generator/swagger/param_description/type.rb +5 -1
- data/lib/apipie/generator/swagger/resource_description_composite.rb +5 -5
- data/lib/apipie/generator/swagger/type_extractor.rb +1 -1
- data/lib/apipie/generator/swagger/warning.rb +2 -2
- data/lib/apipie/helpers.rb +1 -1
- data/lib/apipie/response_description.rb +10 -5
- data/lib/apipie/routes_formatter.rb +1 -1
- data/lib/apipie/static_dispatcher.rb +2 -2
- data/lib/apipie/version.rb +1 -1
- data/lib/tasks/apipie.rake +4 -4
- data/spec/controllers/api/v1/architectures_controller_spec.rb +3 -3
- data/spec/controllers/api/v2/nested/resources_controller_spec.rb +1 -1
- data/spec/controllers/concerns_controller_spec.rb +2 -2
- data/spec/controllers/extended_controller_spec.rb +2 -2
- data/spec/controllers/included_param_group_controller_spec.rb +1 -1
- data/spec/controllers/pets_controller_spec.rb +1 -1
- data/spec/controllers/users_controller_spec.rb +64 -63
- data/spec/dummy/app/controllers/extending_concern.rb +7 -7
- data/spec/dummy/app/controllers/pets_controller.rb +4 -4
- data/spec/dummy/app/controllers/pets_using_auto_views_controller.rb +2 -2
- data/spec/dummy/app/controllers/pets_using_self_describing_classes_controller.rb +16 -16
- data/spec/dummy/app/controllers/sample_controller.rb +31 -31
- data/spec/lib/apipie/application_spec.rb +2 -2
- data/spec/lib/apipie/extractor/writer_spec.rb +8 -8
- data/spec/lib/apipie/generator/swagger/param_description/builder_spec.rb +30 -0
- data/spec/lib/apipie/generator/swagger/param_description/type_spec.rb +29 -2
- data/spec/lib/apipie/method_description_spec.rb +2 -2
- data/spec/lib/apipie/param_description_spec.rb +47 -47
- data/spec/lib/apipie/param_group_spec.rb +4 -4
- data/spec/lib/apipie/resource_description_spec.rb +2 -2
- data/spec/lib/apipie/validator_spec.rb +12 -12
- data/spec/lib/swagger/swagger_dsl_spec.rb +40 -40
- data/spec/spec_helper.rb +5 -2
- data/spec/test_engine/memes_controller_spec.rb +1 -1
- metadata +138 -4
@@ -28,7 +28,7 @@ describe UsersController do
|
|
28
28
|
Apipie.get_resource_description(UsersController, Apipie.configuration.default_version)
|
29
29
|
end
|
30
30
|
|
31
|
-
it "
|
31
|
+
it "contains all resource methods" do
|
32
32
|
methods = subject._methods
|
33
33
|
expect(methods.keys).to include(:show)
|
34
34
|
expect(methods.keys).to include(:create_route)
|
@@ -40,7 +40,7 @@ describe UsersController do
|
|
40
40
|
expect(methods.keys).to include(:multiple_required_params)
|
41
41
|
end
|
42
42
|
|
43
|
-
it "
|
43
|
+
it "contains info about resource" do
|
44
44
|
expect(subject._short_description).to eq('Site members')
|
45
45
|
expect(subject._id).to eq('users')
|
46
46
|
expect(subject._path).to eq('/users')
|
@@ -49,7 +49,7 @@ describe UsersController do
|
|
49
49
|
expect(subject._formats).to eq(['json'])
|
50
50
|
end
|
51
51
|
|
52
|
-
it "
|
52
|
+
it "contains params defined on resource level" do
|
53
53
|
expect(subject._params_args.count).to eq(2)
|
54
54
|
name, type, options = subject._params_args.first
|
55
55
|
expect(name).to eq(:id)
|
@@ -67,12 +67,12 @@ describe UsersController do
|
|
67
67
|
Apipie.configuration.validate_presence = true
|
68
68
|
end
|
69
69
|
|
70
|
-
it "
|
70
|
+
it "replies to valid request" do
|
71
71
|
get :show, :params => { :id => '5', :session => "secret_hash" }
|
72
72
|
assert_response :success
|
73
73
|
end
|
74
74
|
|
75
|
-
it "
|
75
|
+
it "passes if required parameter is missing" do
|
76
76
|
expect { get :show, :params => { :id => 5 } }.not_to raise_error
|
77
77
|
end
|
78
78
|
|
@@ -93,20 +93,20 @@ describe UsersController do
|
|
93
93
|
Apipie.configuration.validate_key = false
|
94
94
|
end
|
95
95
|
|
96
|
-
it "
|
96
|
+
it "replies to valid request" do
|
97
97
|
expect { get :show, :params => { :id => 5, :session => "secret_hash" }}.not_to raise_error
|
98
98
|
assert_response :success
|
99
99
|
end
|
100
100
|
|
101
|
-
it "
|
101
|
+
it "fails if required parameter is missing" do
|
102
102
|
expect { get :show, :params => { :id => 5 }}.to raise_error(Apipie::ParamMissing, /session_parameter_is_required/)
|
103
103
|
end
|
104
104
|
|
105
|
-
it "
|
105
|
+
it "fails if multiple required parameters are missing" do
|
106
106
|
expect { get :multiple_required_params }.to raise_error(Apipie::ParamMultipleMissing, /required_param1.*\n.*required_param2|required_param2.*\n.*required_parameter1/)
|
107
107
|
end
|
108
108
|
|
109
|
-
it "
|
109
|
+
it "passes if required parameter has wrong type" do
|
110
110
|
expect { get :show, :params => { :id => 5 , :session => "secret_hash" }}.not_to raise_error
|
111
111
|
expect { get :show, :params => { :id => "ten" , :session => "secret_hash" }}.not_to raise_error
|
112
112
|
end
|
@@ -120,12 +120,12 @@ describe UsersController do
|
|
120
120
|
Apipie.configuration.validate_key = true
|
121
121
|
end
|
122
122
|
|
123
|
-
it "
|
123
|
+
it "replies to valid request" do
|
124
124
|
expect { get :show, :params => { :id => 5, :session => 'secret_hash' }}.not_to raise_error
|
125
125
|
assert_response :success
|
126
126
|
end
|
127
127
|
|
128
|
-
it "
|
128
|
+
it "fails if extra parameter is passed in" do
|
129
129
|
expect { get :show, :params => { :id => 5 , :badparam => 'badfoo', :session => "secret_hash" }}.to raise_error(Apipie::UnknownParam, /\bbadparam\b/)
|
130
130
|
end
|
131
131
|
end
|
@@ -138,12 +138,12 @@ describe UsersController do
|
|
138
138
|
Apipie.configuration.action_on_non_validated_keys = :skip
|
139
139
|
end
|
140
140
|
|
141
|
-
it "
|
141
|
+
it "replies to valid request" do
|
142
142
|
expect { get :show, :params => { :id => 5, :session => 'secret_hash' }}.not_to raise_error
|
143
143
|
assert_response :success
|
144
144
|
end
|
145
145
|
|
146
|
-
it "
|
146
|
+
it "deletes the param and not fail if an extra parameter is passed." do
|
147
147
|
expect { get :show, :params => { :id => 5 , :badparam => 'badfoo', :session => "secret_hash" }}.not_to raise_error
|
148
148
|
expect(controller.params.as_json).to eq({"session"=>"secret_hash", "id"=>"5", "controller"=>"users", "action"=>"show"})
|
149
149
|
end
|
@@ -160,41 +160,42 @@ describe UsersController do
|
|
160
160
|
Apipie.configuration.validate_key = false
|
161
161
|
end
|
162
162
|
|
163
|
-
it "
|
163
|
+
it "replies to valid request" do
|
164
164
|
get :show, :params => { :id => '5', :session => "secret_hash" }
|
165
165
|
assert_response :success
|
166
166
|
end
|
167
167
|
|
168
|
-
it "
|
169
|
-
expect
|
168
|
+
it "works with nil value for a required hash param" do
|
169
|
+
expect do
|
170
170
|
get :show, :params => { :id => '5', :session => "secret_hash", :hash_param => {:dummy_hash => nil} }
|
171
|
-
|
171
|
+
end.to raise_error(Apipie::ParamInvalid, /dummy_hash/)
|
172
172
|
assert_response :success
|
173
173
|
end
|
174
174
|
|
175
|
-
it "
|
175
|
+
it "fails if required parameter is missing" do
|
176
176
|
expect { get :show, :params => { :id => 5 }}.to raise_error(Apipie::ParamMissing, /session_parameter_is_required/)
|
177
177
|
end
|
178
178
|
|
179
|
-
|
180
|
-
|
179
|
+
# old-style error rather than ParamInvalid
|
180
|
+
it "works with custom Type validator" do
|
181
|
+
expect do
|
181
182
|
get :show,
|
182
183
|
:params => { :id => "not a number", :session => "secret_hash" }
|
183
|
-
|
184
|
+
end.to raise_error(Apipie::ParamError, /id/)
|
184
185
|
end
|
185
186
|
|
186
|
-
it "
|
187
|
+
it "works with Regexp validator" do
|
187
188
|
get :show, :params => { :id => 5, :session => "secret_hash", :regexp_param => "24 years" }
|
188
189
|
assert_response :success
|
189
190
|
|
190
|
-
expect
|
191
|
+
expect do
|
191
192
|
get :show, :params => { :id => 5,
|
192
193
|
:session => "secret_hash",
|
193
194
|
:regexp_param => "ten years" }
|
194
|
-
|
195
|
+
end.to raise_error(Apipie::ParamInvalid, /regexp_param/)
|
195
196
|
end
|
196
197
|
|
197
|
-
it "
|
198
|
+
it "works with Array validator" do
|
198
199
|
get :show, :params => { :id => 5, :session => "secret_hash", :array_param => "one" }
|
199
200
|
assert_response :success
|
200
201
|
get :show, :params => { :id => 5, :session => "secret_hash", :array_param => "two" }
|
@@ -202,28 +203,28 @@ describe UsersController do
|
|
202
203
|
get :show, :params => { :id => 5, :session => "secret_hash", :array_param => '1' }
|
203
204
|
assert_response :success
|
204
205
|
|
205
|
-
expect
|
206
|
+
expect do
|
206
207
|
get :show, :params => { :id => 5,
|
207
208
|
:session => "secret_hash",
|
208
209
|
:array_param => "blabla" }
|
209
|
-
|
210
|
+
end.to raise_error(Apipie::ParamInvalid, /array_param/)
|
210
211
|
|
211
|
-
expect
|
212
|
+
expect do
|
212
213
|
get :show, :params => {
|
213
214
|
:id => 5,
|
214
215
|
:session => "secret_hash",
|
215
216
|
:array_param => 3 }
|
216
|
-
|
217
|
+
end.to raise_error(Apipie::ParamInvalid, /array_param/)
|
217
218
|
end
|
218
219
|
|
219
|
-
it "
|
220
|
-
expect
|
220
|
+
it "works with Proc validator" do
|
221
|
+
expect do
|
221
222
|
get :show,
|
222
223
|
:params => {
|
223
224
|
:id => 5,
|
224
225
|
:session => "secret_hash",
|
225
226
|
:proc_param => "asdgsag" }
|
226
|
-
|
227
|
+
end.to raise_error(Apipie::ParamInvalid, /proc_param/)
|
227
228
|
|
228
229
|
get :show,
|
229
230
|
:params => {
|
@@ -233,7 +234,7 @@ describe UsersController do
|
|
233
234
|
assert_response :success
|
234
235
|
end
|
235
236
|
|
236
|
-
it "
|
237
|
+
it "works with Hash validator" do
|
237
238
|
post :create, params: { :user => { :name => "root", :pass => "12345", :membership => "standard" } }
|
238
239
|
assert_response :success
|
239
240
|
|
@@ -247,28 +248,28 @@ describe UsersController do
|
|
247
248
|
hash_params[1].name == :pass
|
248
249
|
hash_params[2].name == :membership
|
249
250
|
|
250
|
-
expect
|
251
|
+
expect do
|
251
252
|
post :create, :params => { :user => { :name => "root", :pass => "12345", :membership => "____" } }
|
252
|
-
|
253
|
+
end.to raise_error(Apipie::ParamInvalid, /membership/)
|
253
254
|
|
254
255
|
# Should include both pass and name
|
255
|
-
expect
|
256
|
+
expect do
|
256
257
|
post :create, :params => { :user => { :membership => "standard" } }
|
257
|
-
|
258
|
+
end.to raise_error(Apipie::ParamMultipleMissing, /pass.*\n.*name|name.*\n.*pass/)
|
258
259
|
|
259
|
-
expect
|
260
|
+
expect do
|
260
261
|
post :create, :params => { :user => { :name => "root" } }
|
261
|
-
|
262
|
+
end.to raise_error(Apipie::ParamMissing, /pass/)
|
262
263
|
|
263
|
-
expect
|
264
|
+
expect do
|
264
265
|
post :create, :params => { :user => "a string is not a hash" }
|
265
|
-
|
266
|
+
end.to raise_error(Apipie::ParamInvalid, /user/)
|
266
267
|
|
267
268
|
post :create, :params => { :user => { :name => "root", :pass => "pwd" } }
|
268
269
|
assert_response :success
|
269
270
|
end
|
270
271
|
|
271
|
-
it "
|
272
|
+
it "supports Hash validator without specifying keys" do
|
272
273
|
params = Apipie[UsersController, :create].to_json[:params]
|
273
274
|
expect(params).to include(:name => "facts",
|
274
275
|
:full_name => "facts",
|
@@ -284,7 +285,7 @@ describe UsersController do
|
|
284
285
|
:validations => [])
|
285
286
|
end
|
286
287
|
|
287
|
-
it "
|
288
|
+
it "allows nil when allow_nil is set to true" do
|
288
289
|
post :create,
|
289
290
|
:params => {
|
290
291
|
:user => {
|
@@ -297,7 +298,7 @@ describe UsersController do
|
|
297
298
|
assert_response :success
|
298
299
|
end
|
299
300
|
|
300
|
-
it "
|
301
|
+
it "allows blank when allow_blank is set to true" do
|
301
302
|
post :create,
|
302
303
|
:params => {
|
303
304
|
:user => {
|
@@ -313,7 +314,7 @@ describe UsersController do
|
|
313
314
|
describe "nested elements" do
|
314
315
|
|
315
316
|
context "with valid input" do
|
316
|
-
it "
|
317
|
+
it "succeeds" do
|
317
318
|
put :update,
|
318
319
|
:params => {
|
319
320
|
:id => 5,
|
@@ -335,8 +336,8 @@ describe UsersController do
|
|
335
336
|
end
|
336
337
|
end
|
337
338
|
context "with bad input" do
|
338
|
-
it "
|
339
|
-
expect
|
339
|
+
it "raises an error" do
|
340
|
+
expect do
|
340
341
|
put :update,
|
341
342
|
:params => {
|
342
343
|
:id => 5,
|
@@ -353,10 +354,10 @@ describe UsersController do
|
|
353
354
|
}
|
354
355
|
]
|
355
356
|
}
|
356
|
-
|
357
|
+
end.to raise_error(Apipie::ParamInvalid)
|
357
358
|
end
|
358
359
|
end
|
359
|
-
it "
|
360
|
+
it "works with empty array" do
|
360
361
|
put :update,
|
361
362
|
:params => {
|
362
363
|
:id => 5,
|
@@ -407,7 +408,7 @@ describe UsersController do
|
|
407
408
|
|
408
409
|
describe "method description" do
|
409
410
|
|
410
|
-
it "
|
411
|
+
it "contains basic info about method" do
|
411
412
|
a = Apipie[UsersController, :create]
|
412
413
|
expect(a.apis.count).to eq(1)
|
413
414
|
expect(a.formats).to eq(['json'])
|
@@ -431,7 +432,7 @@ describe UsersController do
|
|
431
432
|
end
|
432
433
|
|
433
434
|
context "Using routes.rb" do
|
434
|
-
it "
|
435
|
+
it "contains basic info about method" do
|
435
436
|
a = Apipie[UsersController, :create_route]
|
436
437
|
expect(a.apis.count).to eq(1)
|
437
438
|
expect(a.formats).to eq(['json'])
|
@@ -446,7 +447,7 @@ describe UsersController do
|
|
446
447
|
context "contain :see option" do
|
447
448
|
|
448
449
|
context "the key is valid" do
|
449
|
-
it "
|
450
|
+
it "contains reference to another method" do
|
450
451
|
api = Apipie[UsersController, :see_another]
|
451
452
|
expect(api.show).to be false
|
452
453
|
see = api.see.first
|
@@ -464,18 +465,18 @@ describe UsersController do
|
|
464
465
|
end
|
465
466
|
|
466
467
|
context "the key is not valid" do
|
467
|
-
it "
|
468
|
+
it "raises exception" do
|
468
469
|
api = Apipie[UsersController, :see_another]
|
469
470
|
api.instance_variable_set :@see, [Apipie::SeeDescription.new(['doesnot#exist'])]
|
470
|
-
expect
|
471
|
+
expect do
|
471
472
|
api.see.first.see_url
|
472
|
-
|
473
|
+
end.to raise_error(ArgumentError, /does not exist/)
|
473
474
|
api.instance_variable_set :@see, []
|
474
475
|
end
|
475
476
|
end
|
476
477
|
end
|
477
478
|
|
478
|
-
it "
|
479
|
+
it "contains possible errors description" do
|
479
480
|
a = Apipie.get_method_description(UsersController, :show)
|
480
481
|
|
481
482
|
expect(a.errors[0].code).to eq(500)
|
@@ -486,7 +487,7 @@ describe UsersController do
|
|
486
487
|
expect(a.errors[2].description).to eq("Not Found")
|
487
488
|
end
|
488
489
|
|
489
|
-
it '
|
490
|
+
it 'recognizes Rack symbols as error codes' do
|
490
491
|
a = Apipie.get_method_description(UsersController, :create)
|
491
492
|
|
492
493
|
error = a.errors.find { |e| e.code == 422 }
|
@@ -494,7 +495,7 @@ describe UsersController do
|
|
494
495
|
expect(error.description).to include("Unprocessable Entity")
|
495
496
|
end
|
496
497
|
|
497
|
-
it "
|
498
|
+
it "contains all params description" do
|
498
499
|
a = Apipie.get_method_description(UsersController, :show)
|
499
500
|
expect(a.params.count).to eq(12)
|
500
501
|
expect(a.instance_variable_get('@params_ordered').count).to eq(10)
|
@@ -564,7 +565,7 @@ describe UsersController do
|
|
564
565
|
end
|
565
566
|
end
|
566
567
|
|
567
|
-
it "
|
568
|
+
it "contains all api method description" do
|
568
569
|
method_description = Apipie[UsersController, :two_urls]
|
569
570
|
expect(method_description.class).to be(Apipie::MethodDescription)
|
570
571
|
expect(method_description.apis.count).to eq(2)
|
@@ -579,7 +580,7 @@ describe UsersController do
|
|
579
580
|
expect(a2.http_method).to eq('GET')
|
580
581
|
end
|
581
582
|
|
582
|
-
it "
|
583
|
+
it "is described by valid json" do
|
583
584
|
json = Apipie[UsersController, :two_urls].to_json
|
584
585
|
expected_hash = {
|
585
586
|
:errors => [{:code=>404, :description=>"Missing", :metadata => {:some => "metadata"}},
|
@@ -672,7 +673,7 @@ describe UsersController do
|
|
672
673
|
|
673
674
|
describe "examples" do
|
674
675
|
|
675
|
-
it "
|
676
|
+
it "is able to load examples from yml file" do
|
676
677
|
expect(Apipie.get_method_description(UsersController, :show).examples).to eq [<<EOS1, <<EOS2].map(&:chomp)
|
677
678
|
GET /users/14?verbose=true
|
678
679
|
200
|
@@ -686,7 +687,7 @@ EOS2
|
|
686
687
|
end
|
687
688
|
|
688
689
|
describe "document" do
|
689
|
-
it "
|
690
|
+
it "is able to load document from markup file" do
|
690
691
|
expect(Apipie.get_method_description(UsersController, :desc_from_file).full_description).to include("description from document")
|
691
692
|
end
|
692
693
|
end
|
@@ -694,7 +695,7 @@ EOS2
|
|
694
695
|
|
695
696
|
describe "param description" do
|
696
697
|
|
697
|
-
it "
|
698
|
+
it "contains all specified information" do
|
698
699
|
a = Apipie.get_method_description(UsersController, :show)
|
699
700
|
|
700
701
|
param = a.params[:session]
|
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module ExtendingConcern
|
2
|
+
extend Apipie::DSL::Concern
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
meta metadata: 'data'
|
4
|
+
update_api(:create) do
|
5
|
+
param :user, Hash do
|
6
|
+
param :from_concern, String, :desc => 'param from concern', :allow_nil => false
|
9
7
|
end
|
8
|
+
meta metadata: 'data'
|
10
9
|
end
|
10
|
+
end
|
@@ -364,8 +364,8 @@ class PetsController < ApplicationController
|
|
364
364
|
result = {
|
365
365
|
a_number: 3,
|
366
366
|
array_of_objects: [
|
367
|
-
|
368
|
-
|
367
|
+
{number1: 1, number2: 2},
|
368
|
+
{number1: 10, number2: 20}
|
369
369
|
]
|
370
370
|
}
|
371
371
|
render :json => result
|
@@ -387,8 +387,8 @@ class PetsController < ApplicationController
|
|
387
387
|
result = {
|
388
388
|
a_number: 3,
|
389
389
|
array_of_objects: [
|
390
|
-
|
391
|
-
|
390
|
+
{number1: 1, number2: 2},
|
391
|
+
{number1: 10, number2: "this should have been a number"}
|
392
392
|
]
|
393
393
|
}
|
394
394
|
render :json => result
|
@@ -22,11 +22,11 @@ class SelfDocumentingView
|
|
22
22
|
# self.describe_own_properties (a class method) generates the meta-data
|
23
23
|
# (i.e., the type description) for the subclass.
|
24
24
|
def self.describe_own_properties
|
25
|
-
(self.instance_methods - self.class.instance_methods).map
|
25
|
+
(self.instance_methods - self.class.instance_methods).map do |m|
|
26
26
|
if matchdata = /^v_(\w+)__(\w+)$/.match(m)
|
27
27
|
Apipie::prop(matchdata[1], matchdata[2])
|
28
28
|
end
|
29
|
-
|
29
|
+
end.compact
|
30
30
|
end
|
31
31
|
|
32
32
|
# to_json (an instance method) generates the actual view
|
@@ -13,9 +13,9 @@
|
|
13
13
|
class Pet
|
14
14
|
def self.describe_own_properties
|
15
15
|
[
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
Apipie::prop(:pet_name, 'string', {:description => 'Name of pet', :required => false}),
|
17
|
+
Apipie::prop(:animal_type, 'string', {:description => 'Type of pet', :values => %w[dog cat iguana kangaroo]}),
|
18
|
+
Apipie::additional_properties(false)
|
19
19
|
]
|
20
20
|
end
|
21
21
|
end
|
@@ -26,14 +26,14 @@ end
|
|
26
26
|
class PetWithMeasurements
|
27
27
|
def self.describe_own_properties
|
28
28
|
[
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
Apipie::prop(:pet_name, 'string', {:description => 'Name of pet', :required => false}),
|
30
|
+
Apipie::prop('animal_type', 'string', {:description => 'Type of pet', :values => %w[dog cat iguana kangaroo]}),
|
31
|
+
Apipie::prop(:pet_measurements, 'object', {}, [
|
32
|
+
Apipie::prop(:weight, 'number', {:description => "Weight in pounds" }),
|
33
|
+
Apipie::prop(:height, 'number', {:description => "Height in inches" }),
|
34
|
+
Apipie::prop(:num_legs, 'number', {:description => "Number of legs", :required => false }),
|
35
|
+
Apipie::additional_properties(false)
|
36
|
+
])
|
37
37
|
]
|
38
38
|
end
|
39
39
|
end
|
@@ -44,11 +44,11 @@ end
|
|
44
44
|
class PetWithManyMeasurements
|
45
45
|
def self.describe_own_properties
|
46
46
|
[
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
Apipie::prop(:pet_name, 'string', {:description => 'Name of pet', :required => false}),
|
48
|
+
Apipie::prop(:many_pet_measurements, 'object', {is_array: true}, [
|
49
|
+
Apipie::prop(:weight, 'number', {:description => "Weight in pounds" }),
|
50
|
+
Apipie::prop(:height, 'number', {:description => "Height in inches" }),
|
51
|
+
])
|
52
52
|
]
|
53
53
|
end
|
54
54
|
end
|
@@ -1,39 +1,39 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module SampleController
|
2
|
+
extend Apipie::DSL::Concern
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
api!
|
5
|
+
def index
|
6
|
+
render :plain => "OK #{params.inspect}"
|
7
|
+
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
api :GET, '/:resource_id/:id'
|
10
|
+
param :id, String
|
11
|
+
def show
|
12
|
+
render :plain => "OK #{params.inspect}"
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
15
|
+
def_param_group :concern do
|
16
|
+
param :concern, Hash, :required => true, :action_aware => true do
|
17
|
+
param :name, String, "Name of a :concern"
|
18
|
+
param :concern_type, String
|
20
19
|
end
|
20
|
+
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
api :POST, '/:resource_id', "Create a :concern"
|
23
|
+
param_group :concern
|
24
|
+
def create
|
25
|
+
render :plain => "OK #{params.inspect}"
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
api :PUT, '/:resource_id/:id'
|
29
|
+
param :id, String
|
30
|
+
param_group :concern
|
31
|
+
def update
|
32
|
+
render :plain => "OK #{params.inspect}"
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
35
|
+
api :GET, '/:resource_id/:custom_subst'
|
36
|
+
def custom
|
37
|
+
render :plain => "OK #{params.inspect}"
|
39
38
|
end
|
39
|
+
end
|
@@ -8,7 +8,7 @@ describe Apipie::Application do
|
|
8
8
|
File.join(Rails.root, "lib", "**","*.rb")]
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
11
|
+
it "supports receiving array as parameter" do
|
12
12
|
expect { Apipie.api_controllers_paths}.
|
13
13
|
not_to raise_error
|
14
14
|
end
|
@@ -33,7 +33,7 @@ describe Apipie::Application do
|
|
33
33
|
context "with an undefined base url" do
|
34
34
|
let(:base_url) { nil }
|
35
35
|
|
36
|
-
it "
|
36
|
+
it "does not raise an error" do
|
37
37
|
expect { method_call }.not_to raise_error
|
38
38
|
end
|
39
39
|
end
|
@@ -6,7 +6,7 @@ describe Apipie::Extractor::Writer do
|
|
6
6
|
let(:writer_class) { Apipie::Extractor::Writer }
|
7
7
|
let(:writer) { writer_class.new(collector) }
|
8
8
|
let(:test_examples_file) { File.join(Rails.root, "doc", "apipie_examples_test.json") }
|
9
|
-
let(:records)
|
9
|
+
let(:records) do
|
10
10
|
{
|
11
11
|
"concern_resources#show" =>
|
12
12
|
[{
|
@@ -31,8 +31,8 @@ describe Apipie::Extractor::Writer do
|
|
31
31
|
:code=>"200"
|
32
32
|
}]
|
33
33
|
}
|
34
|
-
|
35
|
-
let(:loaded_records)
|
34
|
+
end
|
35
|
+
let(:loaded_records) do
|
36
36
|
{
|
37
37
|
"concern_resources#show" =>
|
38
38
|
[{
|
@@ -57,7 +57,7 @@ describe Apipie::Extractor::Writer do
|
|
57
57
|
"recorded"=>true
|
58
58
|
}]
|
59
59
|
}
|
60
|
-
|
60
|
+
end
|
61
61
|
|
62
62
|
context 'with doc_path overridden in configuration' do
|
63
63
|
around(:each) do |example|
|
@@ -67,7 +67,7 @@ describe Apipie::Extractor::Writer do
|
|
67
67
|
Apipie.configuration.doc_path = standard_path
|
68
68
|
end
|
69
69
|
|
70
|
-
it '
|
70
|
+
it 'uses the doc_path specified in configuration' do
|
71
71
|
expect(writer_class.examples_file).to eql(File.join(Rails.root, 'tmp', 'user_specified_doc_path', 'apipie_examples.json'))
|
72
72
|
end
|
73
73
|
end
|
@@ -80,13 +80,13 @@ describe Apipie::Extractor::Writer do
|
|
80
80
|
Apipie.configuration.compress_examples = nil
|
81
81
|
end
|
82
82
|
|
83
|
-
it '
|
83
|
+
it 'writes to a compressed file' do
|
84
84
|
expect(writer_class.examples_file).to match(/\.gz$/)
|
85
85
|
writer_class.write_recorded_examples(records)
|
86
86
|
expect(File.exist?(writer_class.examples_file))
|
87
87
|
end
|
88
88
|
|
89
|
-
it '
|
89
|
+
it 'reads from a compressed file' do
|
90
90
|
writer_class.write_recorded_examples(records)
|
91
91
|
expected_string = writer_class.send(:serialize_examples, records)
|
92
92
|
expect(writer_class.load_recorded_examples)
|
@@ -100,7 +100,7 @@ describe Apipie::Extractor::Writer do
|
|
100
100
|
expect(collector).to receive(:records).and_return(records)
|
101
101
|
end
|
102
102
|
|
103
|
-
it "
|
103
|
+
it "reads and write examples" do
|
104
104
|
writer.write_examples
|
105
105
|
expect(writer.send(:load_recorded_examples)).to eql(loaded_records)
|
106
106
|
end
|