grape 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +3 -7
  3. data/CHANGELOG.md +21 -1
  4. data/Gemfile.lock +26 -26
  5. data/README.md +109 -29
  6. data/UPGRADING.md +45 -0
  7. data/gemfiles/rack_1.5.2.gemfile.lock +232 -0
  8. data/gemfiles/rails_3.gemfile +1 -1
  9. data/gemfiles/rails_3.gemfile.lock +288 -0
  10. data/gemfiles/rails_4.gemfile +1 -1
  11. data/gemfiles/rails_4.gemfile.lock +280 -0
  12. data/gemfiles/rails_5.gemfile +1 -1
  13. data/gemfiles/rails_5.gemfile.lock +312 -0
  14. data/lib/grape.rb +1 -0
  15. data/lib/grape/api.rb +74 -195
  16. data/lib/grape/api/instance.rb +242 -0
  17. data/lib/grape/dsl/desc.rb +17 -1
  18. data/lib/grape/dsl/middleware.rb +7 -0
  19. data/lib/grape/dsl/parameters.rb +9 -4
  20. data/lib/grape/dsl/routing.rb +5 -1
  21. data/lib/grape/endpoint.rb +1 -1
  22. data/lib/grape/exceptions/base.rb +9 -1
  23. data/lib/grape/exceptions/invalid_response.rb +9 -0
  24. data/lib/grape/locale/en.yml +1 -0
  25. data/lib/grape/middleware/error.rb +8 -2
  26. data/lib/grape/middleware/versioner/header.rb +2 -2
  27. data/lib/grape/validations/params_scope.rb +1 -0
  28. data/lib/grape/validations/validators/multiple_params_base.rb +1 -1
  29. data/lib/grape/version.rb +1 -1
  30. data/pkg/grape-1.2.0.gem +0 -0
  31. data/spec/grape/api/routes_with_requirements_spec.rb +59 -0
  32. data/spec/grape/api_remount_spec.rb +85 -0
  33. data/spec/grape/api_spec.rb +70 -1
  34. data/spec/grape/dsl/desc_spec.rb +17 -1
  35. data/spec/grape/dsl/middleware_spec.rb +8 -0
  36. data/spec/grape/dsl/routing_spec.rb +10 -0
  37. data/spec/grape/exceptions/base_spec.rb +61 -0
  38. data/spec/grape/exceptions/invalid_response_spec.rb +11 -0
  39. data/spec/grape/middleware/auth/dsl_spec.rb +3 -3
  40. data/spec/grape/middleware/exception_spec.rb +1 -1
  41. data/spec/grape/middleware/versioner/header_spec.rb +6 -0
  42. data/spec/grape/validations/params_scope_spec.rb +133 -0
  43. data/spec/spec_helper.rb +3 -1
  44. metadata +99 -87
  45. data/gemfiles/rack_1.5.2.gemfile +0 -35
  46. data/pkg/grape-0.17.0.gem +0 -0
  47. data/pkg/grape-0.19.0.gem +0 -0
@@ -21,6 +21,7 @@ module Grape
21
21
 
22
22
  it 'can be set with a block' do
23
23
  expected_options = {
24
+ summary: 'summary',
24
25
  description: 'The description',
25
26
  detail: 'more details',
26
27
  params: { first: :param },
@@ -34,10 +35,18 @@ module Grape
34
35
  XOptionalHeader: {
35
36
  description: 'Not really needed',
36
37
  required: false
37
- }]
38
+ }],
39
+ hidden: false,
40
+ deprecated: false,
41
+ is_array: true,
42
+ nickname: 'nickname',
43
+ produces: %w[array of mime_types],
44
+ consumes: %w[array of mime_types],
45
+ tags: %w[tag1 tag2]
38
46
  }
39
47
 
40
48
  subject.desc 'The description' do
49
+ summary 'summary'
41
50
  detail 'more details'
42
51
  params(first: :param)
43
52
  success Object
@@ -51,6 +60,13 @@ module Grape
51
60
  description: 'Not really needed',
52
61
  required: false
53
62
  }]
63
+ hidden false
64
+ deprecated false
65
+ is_array true
66
+ nickname 'nickname'
67
+ produces %w[array of mime_types]
68
+ consumes %w[array of mime_types]
69
+ tags %w[tag1 tag2]
54
70
  end
55
71
 
56
72
  expect(subject.namespace_setting(:description)).to eq(expected_options)
@@ -22,6 +22,14 @@ module Grape
22
22
  end
23
23
  end
24
24
 
25
+ describe '.insert' do
26
+ it 'adds a middleware with the right operation' do
27
+ expect(subject).to receive(:namespace_stackable).with(:middleware, [:insert, 0, :arg1, proc])
28
+
29
+ subject.insert 0, :arg1, &proc
30
+ end
31
+ end
32
+
25
33
  describe '.insert_before' do
26
34
  it 'adds a middleware with the right operation' do
27
35
  expect(subject).to receive(:namespace_stackable).with(:middleware, [:insert_before, foo_middleware, :arg1, proc])
@@ -70,6 +70,16 @@ module Grape
70
70
 
71
71
  expect(app2.inheritable_setting.to_hash[:namespace_stackable]).to eq(mount_path: ['/app1', '/app2'])
72
72
  end
73
+
74
+ it 'mounts multiple routes at once' do
75
+ base_app = Class.new(Grape::API)
76
+ app1 = Class.new(Grape::API)
77
+ app2 = Class.new(Grape::API)
78
+ base_app.mount(app1 => '/app1', app2 => '/app2')
79
+
80
+ expect(app1.inheritable_setting.to_hash[:namespace_stackable]).to eq(mount_path: ['/app1'])
81
+ expect(app2.inheritable_setting.to_hash[:namespace_stackable]).to eq(mount_path: ['/app2'])
82
+ end
73
83
  end
74
84
 
75
85
  describe '.route' do
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Exceptions::Base do
4
+ describe '#compose_message' do
5
+ subject { described_class.new.send(:compose_message, key, attributes) }
6
+
7
+ let(:key) { :invalid_formatter }
8
+ let(:attributes) { { klass: String, to_format: 'xml' } }
9
+
10
+ after do
11
+ I18n.available_locales = %i[en]
12
+ I18n.default_locale = :en
13
+ end
14
+
15
+ context 'when I18n enforces available locales' do
16
+ before { I18n.enforce_available_locales = true }
17
+
18
+ context 'when the fallback locale is available' do
19
+ before do
20
+ I18n.available_locales = %i[de en]
21
+ I18n.default_locale = :de
22
+ end
23
+
24
+ it 'returns the translated message' do
25
+ expect(subject).to eq('cannot convert String to xml')
26
+ end
27
+ end
28
+
29
+ context 'when the fallback locale is not available' do
30
+ before do
31
+ I18n.available_locales = %i[de jp]
32
+ I18n.default_locale = :de
33
+ end
34
+
35
+ it 'returns the translation string' do
36
+ expect(subject).to eq("grape.errors.messages.#{key}")
37
+ end
38
+ end
39
+ end
40
+
41
+ context 'when I18n does not enforce available locales' do
42
+ before { I18n.enforce_available_locales = false }
43
+
44
+ context 'when the fallback locale is available' do
45
+ before { I18n.available_locales = %i[de en] }
46
+
47
+ it 'returns the translated message' do
48
+ expect(subject).to eq('cannot convert String to xml')
49
+ end
50
+ end
51
+
52
+ context 'when the fallback locale is not available' do
53
+ before { I18n.available_locales = %i[de jp] }
54
+
55
+ it 'returns the translated message' do
56
+ expect(subject).to eq('cannot convert String to xml')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Grape::Exceptions::InvalidResponse do
4
+ describe '#message' do
5
+ let(:error) { described_class.new }
6
+
7
+ it 'contains the problem in the message' do
8
+ expect(error.message).to include('Invalid response')
9
+ end
10
+ end
11
+ end
@@ -15,15 +15,15 @@ describe Grape::Middleware::Auth::DSL do
15
15
 
16
16
  describe '.auth' do
17
17
  it 'stets auth parameters' do
18
- expect(subject).to receive(:use).with(Grape::Middleware::Auth::Base, settings)
18
+ expect(subject.base_instance).to receive(:use).with(Grape::Middleware::Auth::Base, settings)
19
19
 
20
20
  subject.auth :http_digest, realm: settings[:realm], opaque: settings[:opaque], &settings[:proc]
21
21
  expect(subject.auth).to eq(settings)
22
22
  end
23
23
 
24
24
  it 'can be called multiple times' do
25
- expect(subject).to receive(:use).with(Grape::Middleware::Auth::Base, settings)
26
- expect(subject).to receive(:use).with(Grape::Middleware::Auth::Base, settings.merge(realm: 'super_secret'))
25
+ expect(subject.base_instance).to receive(:use).with(Grape::Middleware::Auth::Base, settings)
26
+ expect(subject.base_instance).to receive(:use).with(Grape::Middleware::Auth::Base, settings.merge(realm: 'super_secret'))
27
27
 
28
28
  subject.auth :http_digest, realm: settings[:realm], opaque: settings[:opaque], &settings[:proc]
29
29
  first_settings = subject.auth
@@ -128,7 +128,7 @@ describe Grape::Middleware::Error do
128
128
  subject do
129
129
  Rack::Builder.app do
130
130
  use Spec::Support::EndpointFaker
131
- use Grape::Middleware::Error, rescue_handlers: { NotImplementedError => -> { [200, {}, 'rescued'] } }
131
+ use Grape::Middleware::Error, rescue_handlers: { NotImplementedError => -> { Rack::Response.new('rescued', 200, {}) } }
132
132
  run ExceptionSpec::OtherExceptionApp
133
133
  end
134
134
  end
@@ -160,6 +160,12 @@ describe Grape::Middleware::Versioner::Header do
160
160
  expect(subject.call({}).first).to eq(200)
161
161
  end
162
162
 
163
+ it 'succeeds if :strict is set to false and given an invalid header' do
164
+ @options[:version_options][:strict] = false
165
+ expect(subject.call('HTTP_ACCEPT' => 'yaml').first).to eq(200)
166
+ expect(subject.call({}).first).to eq(200)
167
+ end
168
+
163
169
  context 'when :strict is set' do
164
170
  before do
165
171
  @options[:versions] = ['v1']
@@ -479,6 +479,49 @@ describe Grape::Validations::ParamsScope do
479
479
  end.to_not raise_error
480
480
  end
481
481
 
482
+ it 'does not raise an error if when using nested given' do
483
+ expect do
484
+ subject.params do
485
+ optional :a, type: Hash do
486
+ requires :b
487
+ end
488
+ given :a do
489
+ requires :c
490
+ given :c do
491
+ requires :d
492
+ end
493
+ end
494
+ end
495
+ end.to_not raise_error
496
+ end
497
+
498
+ it 'allows nested dependent parameters' do
499
+ subject.params do
500
+ optional :a
501
+ given a: ->(val) { val == 'a' } do
502
+ optional :b
503
+ given b: ->(val) { val == 'b' } do
504
+ optional :c
505
+ given c: ->(val) { val == 'c' } do
506
+ requires :d
507
+ end
508
+ end
509
+ end
510
+ end
511
+ subject.get('/') { declared(params).to_json }
512
+
513
+ get '/'
514
+ expect(last_response.status).to eq 200
515
+
516
+ get '/', a: 'a', b: 'b', c: 'c'
517
+ expect(last_response.status).to eq 400
518
+ expect(last_response.body).to eq 'd is missing'
519
+
520
+ get '/', a: 'a', b: 'b', c: 'c', d: 'd'
521
+ expect(last_response.status).to eq 200
522
+ expect(last_response.body).to eq({ a: 'a', b: 'b', c: 'c', d: 'd' }.to_json)
523
+ end
524
+
482
525
  it 'allows aliasing of dependent parameters' do
483
526
  subject.params do
484
527
  optional :a
@@ -497,6 +540,34 @@ describe Grape::Validations::ParamsScope do
497
540
  expect(body.keys).to_not include('b')
498
541
  end
499
542
 
543
+ it 'allows aliasing of dependent on parameter' do
544
+ subject.params do
545
+ optional :a, as: :b
546
+ given b: ->(val) { val == 'x' } do
547
+ requires :c
548
+ end
549
+ end
550
+ subject.get('/') { declared(params) }
551
+
552
+ get '/', a: 'x'
553
+ expect(last_response.status).to eq 400
554
+ expect(last_response.body).to eq 'c is missing'
555
+
556
+ get '/', a: 'y'
557
+ expect(last_response.status).to eq 200
558
+ end
559
+
560
+ it 'raises an error if the dependent parameter is not the aliased one' do
561
+ expect do
562
+ subject.params do
563
+ optional :a, as: :b
564
+ given :a do
565
+ requires :c
566
+ end
567
+ end
568
+ end.to raise_error(Grape::Exceptions::UnknownParameter)
569
+ end
570
+
500
571
  it 'does not validate nested requires when given is false' do
501
572
  subject.params do
502
573
  requires :a, type: String, allow_blank: false, values: %w[x y z]
@@ -592,6 +663,32 @@ describe Grape::Validations::ParamsScope do
592
663
  end
593
664
  end
594
665
 
666
+ context 'default value in given block' do
667
+ before do
668
+ subject.params do
669
+ optional :a, values: %w[a b]
670
+ given a: ->(val) { val == 'a' } do
671
+ optional :b, default: 'default'
672
+ end
673
+ end
674
+ subject.get('/') { params.to_json }
675
+ end
676
+
677
+ context 'when dependency meets' do
678
+ it 'sets default value for dependent parameter' do
679
+ get '/', a: 'a'
680
+ expect(last_response.body).to eq({ a: 'a', b: 'default' }.to_json)
681
+ end
682
+ end
683
+
684
+ context 'when dependency does not meet' do
685
+ it 'does not set default value for dependent parameter' do
686
+ get '/', a: 'b'
687
+ expect(last_response.body).to eq({ a: 'b' }.to_json)
688
+ end
689
+ end
690
+ end
691
+
595
692
  context 'when validations are dependent on a parameter within an array param' do
596
693
  before do
597
694
  subject.params do
@@ -948,4 +1045,40 @@ describe Grape::Validations::ParamsScope do
948
1045
  end
949
1046
  end
950
1047
  end
1048
+
1049
+ context 'with exactly_one_of validation for optional parameters within an Hash param' do
1050
+ before do
1051
+ subject.params do
1052
+ optional :memo, type: Hash do
1053
+ optional :text, type: String
1054
+ optional :custom_body, type: Hash, coerce_with: JSON
1055
+ exactly_one_of :text, :custom_body
1056
+ end
1057
+ end
1058
+ subject.get('test')
1059
+ end
1060
+
1061
+ context 'when correct data is provided' do
1062
+ it 'returns a successful response' do
1063
+ get 'test', memo: {}
1064
+ expect(last_response.status).to eq(200)
1065
+
1066
+ get 'test', memo: { text: 'HOGEHOGE' }
1067
+ expect(last_response.status).to eq(200)
1068
+
1069
+ get 'test', memo: { custom_body: '{ "xxx": "yyy" }' }
1070
+ expect(last_response.status).to eq(200)
1071
+ end
1072
+ end
1073
+
1074
+ context 'when invalid data is provided' do
1075
+ it 'returns a failure response' do
1076
+ get 'test', memo: { text: 'HOGEHOGE', custom_body: '{ "xxx": "yyy" }' }
1077
+ expect(last_response.status).to eq(400)
1078
+
1079
+ get 'test', memo: '{ "custom_body": "HOGE" }'
1080
+ expect(last_response.status).to eq(400)
1081
+ end
1082
+ end
1083
+ end
951
1084
  end
@@ -12,7 +12,9 @@ Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
12
12
  require file
13
13
  end
14
14
 
15
- I18n.enforce_available_locales = false
15
+ # The default value for this setting is true in a standard Rails app,
16
+ # so it should be set to true here as well to reflect that.
17
+ I18n.enforce_available_locales = true
16
18
 
17
19
  RSpec.configure do |config|
18
20
  config.include Rack::Test::Methods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-04 00:00:00.000000000 Z
11
+ date: 2018-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -117,17 +117,21 @@ files:
117
117
  - benchmark/simple_with_type_coercer.rb
118
118
  - gemfiles/multi_json.gemfile
119
119
  - gemfiles/multi_xml.gemfile
120
- - gemfiles/rack_1.5.2.gemfile
120
+ - gemfiles/rack_1.5.2.gemfile.lock
121
121
  - gemfiles/rack_edge.gemfile
122
122
  - gemfiles/rails_3.gemfile
123
+ - gemfiles/rails_3.gemfile.lock
123
124
  - gemfiles/rails_4.gemfile
125
+ - gemfiles/rails_4.gemfile.lock
124
126
  - gemfiles/rails_5.gemfile
127
+ - gemfiles/rails_5.gemfile.lock
125
128
  - gemfiles/rails_edge.gemfile
126
129
  - grape.gemspec
127
130
  - grape.png
128
131
  - lib/grape.rb
129
132
  - lib/grape/api.rb
130
133
  - lib/grape/api/helpers.rb
134
+ - lib/grape/api/instance.rb
131
135
  - lib/grape/cookies.rb
132
136
  - lib/grape/dsl/api.rb
133
137
  - lib/grape/dsl/callbacks.rb
@@ -154,6 +158,7 @@ files:
154
158
  - lib/grape/exceptions/invalid_accept_header.rb
155
159
  - lib/grape/exceptions/invalid_formatter.rb
156
160
  - lib/grape/exceptions/invalid_message_body.rb
161
+ - lib/grape/exceptions/invalid_response.rb
157
162
  - lib/grape/exceptions/invalid_version_header.rb
158
163
  - lib/grape/exceptions/invalid_versioner_option.rb
159
164
  - lib/grape/exceptions/invalid_with_option_for_represent.rb
@@ -250,8 +255,7 @@ files:
250
255
  - lib/grape/validations/validators/regexp.rb
251
256
  - lib/grape/validations/validators/values.rb
252
257
  - lib/grape/version.rb
253
- - pkg/grape-0.17.0.gem
254
- - pkg/grape-0.19.0.gem
258
+ - pkg/grape-1.2.0.gem
255
259
  - spec/grape/api/custom_validations_spec.rb
256
260
  - spec/grape/api/deeply_included_options_spec.rb
257
261
  - spec/grape/api/inherited_helpers_spec.rb
@@ -264,8 +268,10 @@ files:
264
268
  - spec/grape/api/recognize_path_spec.rb
265
269
  - spec/grape/api/required_parameters_in_route_spec.rb
266
270
  - spec/grape/api/required_parameters_with_invalid_method_spec.rb
271
+ - spec/grape/api/routes_with_requirements_spec.rb
267
272
  - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
268
273
  - spec/grape/api/shared_helpers_spec.rb
274
+ - spec/grape/api_remount_spec.rb
269
275
  - spec/grape/api_spec.rb
270
276
  - spec/grape/dsl/callbacks_spec.rb
271
277
  - spec/grape/dsl/configuration_spec.rb
@@ -282,9 +288,11 @@ files:
282
288
  - spec/grape/dsl/validations_spec.rb
283
289
  - spec/grape/endpoint_spec.rb
284
290
  - spec/grape/entity_spec.rb
291
+ - spec/grape/exceptions/base_spec.rb
285
292
  - spec/grape/exceptions/body_parse_errors_spec.rb
286
293
  - spec/grape/exceptions/invalid_accept_header_spec.rb
287
294
  - spec/grape/exceptions/invalid_formatter_spec.rb
295
+ - spec/grape/exceptions/invalid_response_spec.rb
288
296
  - spec/grape/exceptions/invalid_versioner_option_spec.rb
289
297
  - spec/grape/exceptions/missing_mime_type_spec.rb
290
298
  - spec/grape/exceptions/missing_option_spec.rb
@@ -369,105 +377,109 @@ required_rubygems_version: !ruby/object:Gem::Requirement
369
377
  version: '0'
370
378
  requirements: []
371
379
  rubyforge_project:
372
- rubygems_version: 2.7.6
380
+ rubygems_version: 2.7.7
373
381
  signing_key:
374
382
  specification_version: 4
375
383
  summary: A simple Ruby framework for building REST-like APIs.
376
384
  test_files:
377
- - spec/spec_helper.rb
378
- - spec/integration/multi_xml/xml_spec.rb
379
- - spec/integration/multi_json/json_spec.rb
380
385
  - spec/shared/versioning_examples.rb
381
- - spec/support/basic_auth_encode_helpers.rb
382
- - spec/support/endpoint_faker.rb
383
- - spec/support/file_streamer.rb
384
- - spec/support/versioned_helpers.rb
385
- - spec/support/content_type_helpers.rb
386
- - spec/support/integer_helpers.rb
386
+ - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
387
+ - spec/grape/api/custom_validations_spec.rb
388
+ - spec/grape/api/parameters_modification_spec.rb
389
+ - spec/grape/api/namespace_parameters_in_route_spec.rb
390
+ - spec/grape/api/deeply_included_options_spec.rb
391
+ - spec/grape/api/shared_helpers_spec.rb
392
+ - spec/grape/api/required_parameters_with_invalid_method_spec.rb
393
+ - spec/grape/api/inherited_helpers_spec.rb
394
+ - spec/grape/api/recognize_path_spec.rb
395
+ - spec/grape/api/required_parameters_in_route_spec.rb
396
+ - spec/grape/api/nested_helpers_spec.rb
397
+ - spec/grape/api/routes_with_requirements_spec.rb
398
+ - spec/grape/api/patch_method_helpers_spec.rb
399
+ - spec/grape/api/optional_parameters_in_route_spec.rb
400
+ - spec/grape/api/invalid_format_spec.rb
401
+ - spec/grape/exceptions/validation_spec.rb
402
+ - spec/grape/exceptions/validation_errors_spec.rb
403
+ - spec/grape/exceptions/missing_option_spec.rb
404
+ - spec/grape/exceptions/unknown_options_spec.rb
405
+ - spec/grape/exceptions/missing_mime_type_spec.rb
406
+ - spec/grape/exceptions/base_spec.rb
407
+ - spec/grape/exceptions/invalid_versioner_option_spec.rb
408
+ - spec/grape/exceptions/invalid_response_spec.rb
409
+ - spec/grape/exceptions/body_parse_errors_spec.rb
410
+ - spec/grape/exceptions/unknown_validator_spec.rb
411
+ - spec/grape/exceptions/invalid_formatter_spec.rb
412
+ - spec/grape/exceptions/invalid_accept_header_spec.rb
413
+ - spec/grape/dsl/routing_spec.rb
414
+ - spec/grape/dsl/logger_spec.rb
415
+ - spec/grape/dsl/request_response_spec.rb
416
+ - spec/grape/dsl/validations_spec.rb
417
+ - spec/grape/dsl/desc_spec.rb
418
+ - spec/grape/dsl/headers_spec.rb
419
+ - spec/grape/dsl/configuration_spec.rb
420
+ - spec/grape/dsl/settings_spec.rb
421
+ - spec/grape/dsl/callbacks_spec.rb
422
+ - spec/grape/dsl/parameters_spec.rb
423
+ - spec/grape/dsl/inside_route_spec.rb
424
+ - spec/grape/dsl/middleware_spec.rb
425
+ - spec/grape/dsl/helpers_spec.rb
426
+ - spec/grape/endpoint_spec.rb
427
+ - spec/grape/validations_spec.rb
428
+ - spec/grape/entity_spec.rb
429
+ - spec/grape/extensions/param_builders/hash_spec.rb
430
+ - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
431
+ - spec/grape/extensions/param_builders/hashie/mash_spec.rb
432
+ - spec/grape/api_remount_spec.rb
433
+ - spec/grape/parser_spec.rb
434
+ - spec/grape/util/inheritable_setting_spec.rb
435
+ - spec/grape/util/reverse_stackable_values_spec.rb
436
+ - spec/grape/util/stackable_values_spec.rb
437
+ - spec/grape/util/inheritable_values_spec.rb
438
+ - spec/grape/util/strict_hash_configuration_spec.rb
439
+ - spec/grape/presenters/presenter_spec.rb
440
+ - spec/grape/middleware/versioner/header_spec.rb
441
+ - spec/grape/middleware/versioner/accept_version_header_spec.rb
442
+ - spec/grape/middleware/versioner/param_spec.rb
443
+ - spec/grape/middleware/versioner/path_spec.rb
387
444
  - spec/grape/middleware/error_spec.rb
388
445
  - spec/grape/middleware/globals_spec.rb
446
+ - spec/grape/middleware/base_spec.rb
389
447
  - spec/grape/middleware/formatter_spec.rb
448
+ - spec/grape/middleware/exception_spec.rb
449
+ - spec/grape/middleware/auth/base_spec.rb
390
450
  - spec/grape/middleware/auth/strategies_spec.rb
391
451
  - spec/grape/middleware/auth/dsl_spec.rb
392
- - spec/grape/middleware/auth/base_spec.rb
393
452
  - spec/grape/middleware/stack_spec.rb
394
- - spec/grape/middleware/exception_spec.rb
395
453
  - spec/grape/middleware/versioner_spec.rb
396
- - spec/grape/middleware/versioner/accept_version_header_spec.rb
397
- - spec/grape/middleware/versioner/header_spec.rb
398
- - spec/grape/middleware/versioner/path_spec.rb
399
- - spec/grape/middleware/versioner/param_spec.rb
400
- - spec/grape/middleware/base_spec.rb
401
- - spec/grape/loading_spec.rb
402
- - spec/grape/endpoint_spec.rb
403
- - spec/grape/api_spec.rb
404
- - spec/grape/util/reverse_stackable_values_spec.rb
405
- - spec/grape/util/stackable_values_spec.rb
406
- - spec/grape/util/inheritable_setting_spec.rb
407
- - spec/grape/util/strict_hash_configuration_spec.rb
408
- - spec/grape/util/inheritable_values_spec.rb
454
+ - spec/grape/request_spec.rb
455
+ - spec/grape/integration/global_namespace_function_spec.rb
409
456
  - spec/grape/integration/rack_spec.rb
410
457
  - spec/grape/integration/rack_sendfile_spec.rb
411
- - spec/grape/integration/global_namespace_function_spec.rb
412
- - spec/grape/validations_spec.rb
413
- - spec/grape/entity_spec.rb
414
- - spec/grape/exceptions/validation_spec.rb
415
- - spec/grape/exceptions/invalid_accept_header_spec.rb
416
- - spec/grape/exceptions/missing_option_spec.rb
417
- - spec/grape/exceptions/body_parse_errors_spec.rb
418
- - spec/grape/exceptions/invalid_formatter_spec.rb
419
- - spec/grape/exceptions/missing_mime_type_spec.rb
420
- - spec/grape/exceptions/unknown_options_spec.rb
421
- - spec/grape/exceptions/validation_errors_spec.rb
422
- - spec/grape/exceptions/unknown_validator_spec.rb
423
- - spec/grape/exceptions/invalid_versioner_option_spec.rb
424
- - spec/grape/presenters/presenter_spec.rb
425
458
  - spec/grape/validations/attributes_iterator_spec.rb
426
- - spec/grape/validations/params_scope_spec.rb
427
- - spec/grape/validations/instance_behaivour_spec.rb
428
- - spec/grape/validations/types_spec.rb
429
- - spec/grape/validations/validators/regexp_spec.rb
430
- - spec/grape/validations/validators/mutual_exclusion_spec.rb
431
459
  - spec/grape/validations/validators/exactly_one_of_spec.rb
432
- - spec/grape/validations/validators/except_values_spec.rb
433
- - spec/grape/validations/validators/presence_spec.rb
434
- - spec/grape/validations/validators/all_or_none_spec.rb
435
- - spec/grape/validations/validators/allow_blank_spec.rb
436
- - spec/grape/validations/validators/default_spec.rb
437
460
  - spec/grape/validations/validators/values_spec.rb
438
- - spec/grape/validations/validators/at_least_one_of_spec.rb
461
+ - spec/grape/validations/validators/presence_spec.rb
439
462
  - spec/grape/validations/validators/coerce_spec.rb
463
+ - spec/grape/validations/validators/at_least_one_of_spec.rb
440
464
  - spec/grape/validations/validators/zh-CN.yml
441
- - spec/grape/extensions/param_builders/hashie/mash_spec.rb
442
- - spec/grape/extensions/param_builders/hash_spec.rb
443
- - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
444
- - spec/grape/parser_spec.rb
445
- - spec/grape/request_spec.rb
446
- - spec/grape/api/parameters_modification_spec.rb
447
- - spec/grape/api/patch_method_helpers_spec.rb
448
- - spec/grape/api/required_parameters_with_invalid_method_spec.rb
449
- - spec/grape/api/nested_helpers_spec.rb
450
- - spec/grape/api/invalid_format_spec.rb
451
- - spec/grape/api/required_parameters_in_route_spec.rb
452
- - spec/grape/api/namespace_parameters_in_route_spec.rb
453
- - spec/grape/api/recognize_path_spec.rb
454
- - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
455
- - spec/grape/api/inherited_helpers_spec.rb
456
- - spec/grape/api/shared_helpers_spec.rb
457
- - spec/grape/api/deeply_included_options_spec.rb
458
- - spec/grape/api/custom_validations_spec.rb
459
- - spec/grape/api/optional_parameters_in_route_spec.rb
460
- - spec/grape/dsl/request_response_spec.rb
461
- - spec/grape/dsl/desc_spec.rb
462
- - spec/grape/dsl/logger_spec.rb
463
- - spec/grape/dsl/configuration_spec.rb
464
- - spec/grape/dsl/validations_spec.rb
465
- - spec/grape/dsl/parameters_spec.rb
466
- - spec/grape/dsl/helpers_spec.rb
467
- - spec/grape/dsl/middleware_spec.rb
468
- - spec/grape/dsl/headers_spec.rb
469
- - spec/grape/dsl/callbacks_spec.rb
470
- - spec/grape/dsl/settings_spec.rb
471
- - spec/grape/dsl/routing_spec.rb
472
- - spec/grape/dsl/inside_route_spec.rb
465
+ - spec/grape/validations/validators/default_spec.rb
466
+ - spec/grape/validations/validators/regexp_spec.rb
467
+ - spec/grape/validations/validators/all_or_none_spec.rb
468
+ - spec/grape/validations/validators/except_values_spec.rb
469
+ - spec/grape/validations/validators/mutual_exclusion_spec.rb
470
+ - spec/grape/validations/validators/allow_blank_spec.rb
471
+ - spec/grape/validations/params_scope_spec.rb
472
+ - spec/grape/validations/instance_behaivour_spec.rb
473
+ - spec/grape/validations/types_spec.rb
474
+ - spec/grape/api_spec.rb
475
+ - spec/grape/loading_spec.rb
473
476
  - spec/grape/path_spec.rb
477
+ - spec/support/file_streamer.rb
478
+ - spec/support/versioned_helpers.rb
479
+ - spec/support/content_type_helpers.rb
480
+ - spec/support/integer_helpers.rb
481
+ - spec/support/basic_auth_encode_helpers.rb
482
+ - spec/support/endpoint_faker.rb
483
+ - spec/spec_helper.rb
484
+ - spec/integration/multi_json/json_spec.rb
485
+ - spec/integration/multi_xml/xml_spec.rb