grape 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -146,9 +146,8 @@ content negotiation, versioning and much more.
146
146
 
147
147
  ## Stable Release
148
148
 
149
- You're reading the documentation for the next release of Grape, which should be **1.2.2**.
149
+ You're reading the documentation for the stable release of Grape, **1.2.2**.
150
150
  Please read [UPGRADING](UPGRADING.md) when upgrading from a previous version.
151
- The current stable release is [1.2.1](https://github.com/ruby-grape/grape/blob/v1.2.1/README.md).
152
151
 
153
152
  ## Project Resources
154
153
 
@@ -36,7 +36,7 @@ You're reading the documentation for the stable release of Grape, 0.6.0.
36
36
  Change "Next Release" in [CHANGELOG.md](CHANGELOG.md) to the new version.
37
37
 
38
38
  ```
39
- #### 0.6.0 (9/16/2013)
39
+ #### 0.6.0 (2013/9/16)
40
40
  ```
41
41
 
42
42
  Remove the line with "Your contribution here.", since there will be no more contributions to this release.
@@ -6,12 +6,16 @@ module Grape
6
6
  # should subclass this class in order to build an API.
7
7
  class API
8
8
  # Class methods that we want to call on the API rather than on the API object
9
- NON_OVERRIDABLE = %I[define_singleton_method instance_variable_set inspect class is_a? ! kind_of?
10
- respond_to? respond_to_missing? const_defined? const_missing parent
11
- parent_name name equal? to_s parents anonymous?].freeze
9
+ NON_OVERRIDABLE = (Class.new.methods + %i[call call!]).freeze
12
10
 
13
11
  class << self
14
12
  attr_accessor :base_instance, :instances
13
+
14
+ # Rather than initializing an object of type Grape::API, create an object of type Instance
15
+ def new(*args, &block)
16
+ base_instance.new(*args, &block)
17
+ end
18
+
15
19
  # When inherited, will create a list of all instances (times the API was mounted)
16
20
  # It will listen to the setup required to mount that endpoint, and replicate it on any new instance
17
21
  def inherited(api, base_instance_parent = Grape::API::Instance)
@@ -38,6 +42,15 @@ module Grape
38
42
  end
39
43
  end
40
44
 
45
+ # This is the interface point between Rack and Grape; it accepts a request
46
+ # from Rack and ultimately returns an array of three values: the status,
47
+ # the headers, and the body. See [the rack specification]
48
+ # (http://www.rubydoc.info/github/rack/rack/master/file/SPEC) for more.
49
+ # NOTE: This will only be called on an API directly mounted on RACK
50
+ def call(*args, &block)
51
+ base_instance.call(*args, &block)
52
+ end
53
+
41
54
  # Allows an API to itself be inheritable:
42
55
  def make_inheritable(api)
43
56
  # When a child API inherits from a parent API.
@@ -183,7 +183,7 @@ module Grape
183
183
  # informations again.
184
184
  without_root_prefix do
185
185
  without_versioning do
186
- routes_map.each do |_, config|
186
+ routes_map.each_value do |config|
187
187
  methods = config[:methods]
188
188
  allowed_methods = methods.dup
189
189
 
@@ -4,12 +4,12 @@ module Grape
4
4
  include Grape::DSL::Settings
5
5
 
6
6
  # Add a description to the next namespace or function.
7
- # @option options :summary [String] summary for this endpoint
8
7
  # @param description [String] descriptive string for this endpoint
9
8
  # or namespace
10
9
  # @param options [Hash] other properties you can set to describe the
11
10
  # endpoint or namespace. Optional.
12
11
  # @option options :detail [String] additional detail about this endpoint
12
+ # @option options :summary [String] summary for this endpoint
13
13
  # @option options :params [Hash] param types and info. normally, you set
14
14
  # these via the `params` dsl method.
15
15
  # @option options :entity [Grape::Entity] the entity returned upon a
@@ -17,6 +17,7 @@ module Grape
17
17
  # @option options :http_codes [Array[Array]] possible HTTP codes this
18
18
  # endpoint may return, with their meanings, in a 2d array
19
19
  # @option options :named [String] a specific name to help find this route
20
+ # @option options :body_name [String] override the autogenerated body name param
20
21
  # @option options :headers [Hash] HTTP headers this method can accept
21
22
  # @option options :hidden [Boolean] hide the endpoint or not
22
23
  # @option options :deprecated [Boolean] deprecate the endpoint or not
@@ -24,6 +25,7 @@ module Grape
24
25
  # @option options :nickname [String] nickname of the endpoint
25
26
  # @option options :produces [Array[String]] a list of MIME types the endpoint produce
26
27
  # @option options :consumes [Array[String]] a list of MIME types the endpoint consume
28
+ # @option options :security [Array[Hash]] a list of security schemes
27
29
  # @option options :tags [Array[String]] a list of tags
28
30
  # @yield a block yielding an instance context with methods mapping to
29
31
  # each of the above, except that :entity is also aliased as #success
@@ -67,13 +69,12 @@ module Grape
67
69
  end
68
70
 
69
71
  def description_field(field, value = nil)
72
+ description = route_setting(:description)
70
73
  if value
71
- description = route_setting(:description)
72
74
  description ||= route_setting(:description, {})
73
75
  description[field] = value
74
- else
75
- description = route_setting(:description)
76
- description[field] if description
76
+ elsif description
77
+ description[field]
77
78
  end
78
79
  end
79
80
 
@@ -93,6 +94,7 @@ module Grape
93
94
  :entity,
94
95
  :http_codes,
95
96
  :named,
97
+ :body_name,
96
98
  :headers,
97
99
  :hidden,
98
100
  :deprecated,
@@ -100,6 +102,7 @@ module Grape
100
102
  :nickname,
101
103
  :produces,
102
104
  :consumes,
105
+ :security,
103
106
  :tags
104
107
  )
105
108
 
@@ -96,7 +96,7 @@ module Grape
96
96
  # @param [Array] other_specs An array of middleware specifications (e.g. [[:use, klass], [:insert_before, *args]])
97
97
  def concat(other_specs)
98
98
  @others << Array(other_specs).reject { |o| o.first == :use }
99
- merge_with Array(other_specs).select { |o| o.first == :use }
99
+ merge_with(Array(other_specs).select { |o| o.first == :use })
100
100
  end
101
101
 
102
102
  protected
@@ -99,7 +99,7 @@ module Grape
99
99
  def available_media_types
100
100
  available_media_types = []
101
101
 
102
- content_types.each do |extension, _media_type|
102
+ content_types.each_key do |extension|
103
103
  versions.reverse_each do |version|
104
104
  available_media_types += [
105
105
  "application/vnd.#{vendor}-#{version}+#{extension}",
@@ -111,7 +111,7 @@ module Grape
111
111
 
112
112
  available_media_types << "application/vnd.#{vendor}"
113
113
 
114
- content_types.each do |_, media_type|
114
+ content_types.each_value do |media_type|
115
115
  available_media_types << media_type
116
116
  end
117
117
 
@@ -15,6 +15,8 @@ module Grape
15
15
  @attributes[m[0..-1]] = *args
16
16
  elsif m[-1] != '='
17
17
  @attributes[m]
18
+ else
19
+ super
18
20
  end
19
21
  end
20
22
 
@@ -98,9 +98,9 @@ module Grape
98
98
  path, line = *location.scan(SOURCE_LOCATION_REGEXP).first
99
99
  path = File.realpath(path) if Pathname.new(path).relative?
100
100
  expected ||= name
101
- warn <<-EOS
101
+ warn <<-WARNING
102
102
  #{path}:#{line}: The route_xxx methods such as route_#{name} have been deprecated, please use #{expected}.
103
- EOS
103
+ WARNING
104
104
  end
105
105
  end
106
106
  end
@@ -158,7 +158,7 @@ module Grape
158
158
  # necessary.
159
159
  def enforce_symbolized_keys(type, method)
160
160
  # Collections have all values processed individually
161
- if type == Array || type == Set
161
+ if [Array, Set].include?(type)
162
162
  lambda do |val|
163
163
  method.call(val).tap do |new_value|
164
164
  new_value.map do |item|
@@ -1,4 +1,4 @@
1
1
  module Grape
2
2
  # The current version of Grape.
3
- VERSION = '1.2.1'.freeze
3
+ VERSION = '1.2.2'.freeze
4
4
  end
Binary file
Binary file
Binary file
@@ -220,6 +220,15 @@ describe Grape::API do
220
220
  end
221
221
  end
222
222
 
223
+ describe '.call' do
224
+ context 'it does not add to the app setup' do
225
+ it 'calls the app' do
226
+ expect(subject).not_to receive(:add_setup)
227
+ subject.call({})
228
+ end
229
+ end
230
+ end
231
+
223
232
  describe '.route_param' do
224
233
  it 'adds a parameterized route segment namespace' do
225
234
  subject.namespace :users do
@@ -3649,4 +3658,22 @@ XML
3649
3658
  end
3650
3659
  end
3651
3660
  end
3661
+
3662
+ describe 'normal class methods' do
3663
+ subject(:grape_api) { Class.new(Grape::API) }
3664
+
3665
+ before do
3666
+ stub_const('MyAPI', grape_api)
3667
+ end
3668
+
3669
+ it 'can find the appropiate name' do
3670
+ expect(grape_api.name).to eq 'MyAPI'
3671
+ end
3672
+
3673
+ it 'is equal to itself' do
3674
+ expect(grape_api.itself).to eq grape_api
3675
+ expect(grape_api).to eq MyAPI
3676
+ expect(grape_api.eql?(MyAPI))
3677
+ end
3678
+ end
3652
3679
  end
@@ -28,21 +28,25 @@ module Grape
28
28
  entity: Object,
29
29
  http_codes: [[401, 'Unauthorized', 'Entities::Error']],
30
30
  named: 'My named route',
31
- headers: [XAuthToken: {
32
- description: 'Valdates your identity',
33
- required: true
34
- },
35
- XOptionalHeader: {
36
- description: 'Not really needed',
37
- required: false
38
- }],
31
+ body_name: 'My body name',
32
+ headers: [
33
+ XAuthToken: {
34
+ description: 'Valdates your identity',
35
+ required: true
36
+ },
37
+ XOptionalHeader: {
38
+ description: 'Not really needed',
39
+ required: false
40
+ }
41
+ ],
39
42
  hidden: false,
40
43
  deprecated: false,
41
44
  is_array: true,
42
45
  nickname: 'nickname',
43
46
  produces: %w[array of mime_types],
44
47
  consumes: %w[array of mime_types],
45
- tags: %w[tag1 tag2]
48
+ tags: %w[tag1 tag2],
49
+ security: %w[array of security schemes]
46
50
  }
47
51
 
48
52
  subject.desc 'The description' do
@@ -52,14 +56,17 @@ module Grape
52
56
  success Object
53
57
  failure [[401, 'Unauthorized', 'Entities::Error']]
54
58
  named 'My named route'
55
- headers [XAuthToken: {
56
- description: 'Valdates your identity',
57
- required: true
58
- },
59
- XOptionalHeader: {
60
- description: 'Not really needed',
61
- required: false
62
- }]
59
+ body_name 'My body name'
60
+ headers [
61
+ XAuthToken: {
62
+ description: 'Valdates your identity',
63
+ required: true
64
+ },
65
+ XOptionalHeader: {
66
+ description: 'Not really needed',
67
+ required: false
68
+ }
69
+ ]
63
70
  hidden false
64
71
  deprecated false
65
72
  is_array true
@@ -67,6 +74,7 @@ module Grape
67
74
  produces %w[array of mime_types]
68
75
  consumes %w[array of mime_types]
69
76
  tags %w[tag1 tag2]
77
+ security %w[array of security schemes]
70
78
  end
71
79
 
72
80
  expect(subject.namespace_setting(:description)).to eq(expected_options)
@@ -247,7 +247,7 @@ describe Grape::Middleware::Formatter do
247
247
  let(:content_type) { 'application/atom+xml' }
248
248
 
249
249
  it 'returns a 415 HTTP error status' do
250
- error = catch(:error) {
250
+ error = catch(:error) do
251
251
  subject.call(
252
252
  'PATH_INFO' => '/info',
253
253
  'REQUEST_METHOD' => method,
@@ -255,7 +255,7 @@ describe Grape::Middleware::Formatter do
255
255
  'rack.input' => io,
256
256
  'CONTENT_LENGTH' => io.length
257
257
  )
258
- }
258
+ end
259
259
  expect(error[:status]).to eq(415)
260
260
  expect(error[:message]).to eq("The provided content-type 'application/atom+xml' is not supported.")
261
261
  end
@@ -407,7 +407,7 @@ describe Grape::Middleware::Formatter do
407
407
  parsers: { json: ->(_object, _env) { raise StandardError, 'fail' } }
408
408
  )
409
409
  io = StringIO.new('{invalid}')
410
- error = catch(:error) {
410
+ error = catch(:error) do
411
411
  subject.call(
412
412
  'PATH_INFO' => '/info',
413
413
  'REQUEST_METHOD' => 'POST',
@@ -415,7 +415,7 @@ describe Grape::Middleware::Formatter do
415
415
  'rack.input' => io,
416
416
  'CONTENT_LENGTH' => io.length
417
417
  )
418
- }
418
+ end
419
419
 
420
420
  expect(error[:message]).to eq 'fail'
421
421
  expect(error[:backtrace].size).to be >= 1
@@ -1013,7 +1013,7 @@ describe Grape::Validations do
1013
1013
  expect(last_response.body).to eq('custom is not custom with options!')
1014
1014
  end
1015
1015
  end
1016
- end # end custom validation
1016
+ end
1017
1017
 
1018
1018
  context 'named' do
1019
1019
  context 'can be defined' do
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.2.1
4
+ version: 1.2.2
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-11-28 00:00:00.000000000 Z
11
+ date: 2018-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -117,14 +117,10 @@ 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.lock
121
120
  - gemfiles/rack_edge.gemfile
122
121
  - gemfiles/rails_3.gemfile
123
- - gemfiles/rails_3.gemfile.lock
124
122
  - gemfiles/rails_4.gemfile
125
- - gemfiles/rails_4.gemfile.lock
126
123
  - gemfiles/rails_5.gemfile
127
- - gemfiles/rails_5.gemfile.lock
128
124
  - gemfiles/rails_edge.gemfile
129
125
  - grape.gemspec
130
126
  - grape.png
@@ -255,7 +251,9 @@ files:
255
251
  - lib/grape/validations/validators/regexp.rb
256
252
  - lib/grape/validations/validators/values.rb
257
253
  - lib/grape/version.rb
258
- - pkg/grape-1.2.0.gem
254
+ - pkg/grape-0.19.1.gem
255
+ - pkg/grape-1.0.1.gem
256
+ - pkg/grape-1.0.2.gem
259
257
  - spec/grape/api/custom_validations_spec.rb
260
258
  - spec/grape/api/deeply_included_options_spec.rb
261
259
  - spec/grape/api/inherited_helpers_spec.rb
@@ -378,110 +376,110 @@ required_rubygems_version: !ruby/object:Gem::Requirement
378
376
  version: '0'
379
377
  requirements: []
380
378
  rubyforge_project:
381
- rubygems_version: 2.7.7
379
+ rubygems_version: 2.7.6
382
380
  signing_key:
383
381
  specification_version: 4
384
382
  summary: A simple Ruby framework for building REST-like APIs.
385
383
  test_files:
384
+ - spec/spec_helper.rb
385
+ - spec/integration/multi_xml/xml_spec.rb
386
+ - spec/integration/multi_json/json_spec.rb
386
387
  - spec/shared/versioning_examples.rb
387
- - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
388
- - spec/grape/api/custom_validations_spec.rb
389
- - spec/grape/api/parameters_modification_spec.rb
390
- - spec/grape/api/namespace_parameters_in_route_spec.rb
391
- - spec/grape/api/deeply_included_options_spec.rb
392
- - spec/grape/api/shared_helpers_spec.rb
393
- - spec/grape/api/required_parameters_with_invalid_method_spec.rb
394
- - spec/grape/api/inherited_helpers_spec.rb
395
- - spec/grape/api/recognize_path_spec.rb
396
- - spec/grape/api/required_parameters_in_route_spec.rb
397
- - spec/grape/api/nested_helpers_spec.rb
398
- - spec/grape/api/routes_with_requirements_spec.rb
399
- - spec/grape/api/patch_method_helpers_spec.rb
400
- - spec/grape/api/optional_parameters_in_route_spec.rb
401
- - spec/grape/api/invalid_format_spec.rb
402
- - spec/grape/named_api_spec.rb
403
- - spec/grape/exceptions/validation_spec.rb
404
- - spec/grape/exceptions/validation_errors_spec.rb
405
- - spec/grape/exceptions/missing_option_spec.rb
406
- - spec/grape/exceptions/unknown_options_spec.rb
407
- - spec/grape/exceptions/missing_mime_type_spec.rb
408
- - spec/grape/exceptions/base_spec.rb
409
- - spec/grape/exceptions/invalid_versioner_option_spec.rb
410
- - spec/grape/exceptions/invalid_response_spec.rb
411
- - spec/grape/exceptions/body_parse_errors_spec.rb
412
- - spec/grape/exceptions/unknown_validator_spec.rb
413
- - spec/grape/exceptions/invalid_formatter_spec.rb
414
- - spec/grape/exceptions/invalid_accept_header_spec.rb
415
- - spec/grape/dsl/routing_spec.rb
416
- - spec/grape/dsl/logger_spec.rb
417
- - spec/grape/dsl/request_response_spec.rb
418
- - spec/grape/dsl/validations_spec.rb
419
- - spec/grape/dsl/desc_spec.rb
420
- - spec/grape/dsl/headers_spec.rb
421
- - spec/grape/dsl/configuration_spec.rb
422
- - spec/grape/dsl/settings_spec.rb
423
- - spec/grape/dsl/callbacks_spec.rb
424
- - spec/grape/dsl/parameters_spec.rb
425
- - spec/grape/dsl/inside_route_spec.rb
426
- - spec/grape/dsl/middleware_spec.rb
427
- - spec/grape/dsl/helpers_spec.rb
428
- - spec/grape/endpoint_spec.rb
429
- - spec/grape/validations_spec.rb
430
- - spec/grape/entity_spec.rb
431
- - spec/grape/extensions/param_builders/hash_spec.rb
432
- - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
433
- - spec/grape/extensions/param_builders/hashie/mash_spec.rb
434
- - spec/grape/api_remount_spec.rb
435
- - spec/grape/parser_spec.rb
436
- - spec/grape/util/inheritable_setting_spec.rb
437
- - spec/grape/util/reverse_stackable_values_spec.rb
438
- - spec/grape/util/stackable_values_spec.rb
439
- - spec/grape/util/inheritable_values_spec.rb
440
- - spec/grape/util/strict_hash_configuration_spec.rb
441
- - spec/grape/presenters/presenter_spec.rb
442
- - spec/grape/middleware/versioner/header_spec.rb
443
- - spec/grape/middleware/versioner/accept_version_header_spec.rb
444
- - spec/grape/middleware/versioner/param_spec.rb
445
- - spec/grape/middleware/versioner/path_spec.rb
388
+ - spec/support/basic_auth_encode_helpers.rb
389
+ - spec/support/endpoint_faker.rb
390
+ - spec/support/file_streamer.rb
391
+ - spec/support/versioned_helpers.rb
392
+ - spec/support/content_type_helpers.rb
393
+ - spec/support/integer_helpers.rb
446
394
  - spec/grape/middleware/error_spec.rb
447
395
  - spec/grape/middleware/globals_spec.rb
448
- - spec/grape/middleware/base_spec.rb
449
396
  - spec/grape/middleware/formatter_spec.rb
450
- - spec/grape/middleware/exception_spec.rb
451
- - spec/grape/middleware/auth/base_spec.rb
452
397
  - spec/grape/middleware/auth/strategies_spec.rb
453
398
  - spec/grape/middleware/auth/dsl_spec.rb
399
+ - spec/grape/middleware/auth/base_spec.rb
454
400
  - spec/grape/middleware/stack_spec.rb
401
+ - spec/grape/middleware/exception_spec.rb
455
402
  - spec/grape/middleware/versioner_spec.rb
456
- - spec/grape/request_spec.rb
457
- - spec/grape/integration/global_namespace_function_spec.rb
403
+ - spec/grape/middleware/versioner/accept_version_header_spec.rb
404
+ - spec/grape/middleware/versioner/header_spec.rb
405
+ - spec/grape/middleware/versioner/path_spec.rb
406
+ - spec/grape/middleware/versioner/param_spec.rb
407
+ - spec/grape/middleware/base_spec.rb
408
+ - spec/grape/loading_spec.rb
409
+ - spec/grape/endpoint_spec.rb
410
+ - spec/grape/api_spec.rb
411
+ - spec/grape/util/reverse_stackable_values_spec.rb
412
+ - spec/grape/util/stackable_values_spec.rb
413
+ - spec/grape/util/inheritable_setting_spec.rb
414
+ - spec/grape/util/strict_hash_configuration_spec.rb
415
+ - spec/grape/util/inheritable_values_spec.rb
458
416
  - spec/grape/integration/rack_spec.rb
459
417
  - spec/grape/integration/rack_sendfile_spec.rb
418
+ - spec/grape/integration/global_namespace_function_spec.rb
419
+ - spec/grape/validations_spec.rb
420
+ - spec/grape/entity_spec.rb
421
+ - spec/grape/exceptions/validation_spec.rb
422
+ - spec/grape/exceptions/invalid_accept_header_spec.rb
423
+ - spec/grape/exceptions/missing_option_spec.rb
424
+ - spec/grape/exceptions/invalid_response_spec.rb
425
+ - spec/grape/exceptions/body_parse_errors_spec.rb
426
+ - spec/grape/exceptions/invalid_formatter_spec.rb
427
+ - spec/grape/exceptions/missing_mime_type_spec.rb
428
+ - spec/grape/exceptions/unknown_options_spec.rb
429
+ - spec/grape/exceptions/validation_errors_spec.rb
430
+ - spec/grape/exceptions/unknown_validator_spec.rb
431
+ - spec/grape/exceptions/invalid_versioner_option_spec.rb
432
+ - spec/grape/exceptions/base_spec.rb
433
+ - spec/grape/presenters/presenter_spec.rb
460
434
  - spec/grape/validations/attributes_iterator_spec.rb
435
+ - spec/grape/validations/params_scope_spec.rb
436
+ - spec/grape/validations/instance_behaivour_spec.rb
437
+ - spec/grape/validations/types_spec.rb
438
+ - spec/grape/validations/validators/regexp_spec.rb
439
+ - spec/grape/validations/validators/mutual_exclusion_spec.rb
461
440
  - spec/grape/validations/validators/exactly_one_of_spec.rb
462
- - spec/grape/validations/validators/values_spec.rb
441
+ - spec/grape/validations/validators/except_values_spec.rb
463
442
  - spec/grape/validations/validators/presence_spec.rb
464
- - spec/grape/validations/validators/coerce_spec.rb
465
- - spec/grape/validations/validators/at_least_one_of_spec.rb
466
- - spec/grape/validations/validators/zh-CN.yml
467
- - spec/grape/validations/validators/default_spec.rb
468
- - spec/grape/validations/validators/regexp_spec.rb
469
443
  - spec/grape/validations/validators/all_or_none_spec.rb
470
- - spec/grape/validations/validators/except_values_spec.rb
471
- - spec/grape/validations/validators/mutual_exclusion_spec.rb
472
444
  - spec/grape/validations/validators/allow_blank_spec.rb
473
- - spec/grape/validations/params_scope_spec.rb
474
- - spec/grape/validations/instance_behaivour_spec.rb
475
- - spec/grape/validations/types_spec.rb
476
- - spec/grape/api_spec.rb
477
- - spec/grape/loading_spec.rb
445
+ - spec/grape/validations/validators/default_spec.rb
446
+ - spec/grape/validations/validators/values_spec.rb
447
+ - spec/grape/validations/validators/at_least_one_of_spec.rb
448
+ - spec/grape/validations/validators/coerce_spec.rb
449
+ - spec/grape/validations/validators/zh-CN.yml
450
+ - spec/grape/extensions/param_builders/hashie/mash_spec.rb
451
+ - spec/grape/extensions/param_builders/hash_spec.rb
452
+ - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
453
+ - spec/grape/parser_spec.rb
454
+ - spec/grape/request_spec.rb
455
+ - spec/grape/api/parameters_modification_spec.rb
456
+ - spec/grape/api/patch_method_helpers_spec.rb
457
+ - spec/grape/api/required_parameters_with_invalid_method_spec.rb
458
+ - spec/grape/api/nested_helpers_spec.rb
459
+ - spec/grape/api/invalid_format_spec.rb
460
+ - spec/grape/api/required_parameters_in_route_spec.rb
461
+ - spec/grape/api/namespace_parameters_in_route_spec.rb
462
+ - spec/grape/api/recognize_path_spec.rb
463
+ - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
464
+ - spec/grape/api/inherited_helpers_spec.rb
465
+ - spec/grape/api/shared_helpers_spec.rb
466
+ - spec/grape/api/deeply_included_options_spec.rb
467
+ - spec/grape/api/routes_with_requirements_spec.rb
468
+ - spec/grape/api/custom_validations_spec.rb
469
+ - spec/grape/api/optional_parameters_in_route_spec.rb
470
+ - spec/grape/api_remount_spec.rb
471
+ - spec/grape/named_api_spec.rb
472
+ - spec/grape/dsl/request_response_spec.rb
473
+ - spec/grape/dsl/desc_spec.rb
474
+ - spec/grape/dsl/logger_spec.rb
475
+ - spec/grape/dsl/configuration_spec.rb
476
+ - spec/grape/dsl/validations_spec.rb
477
+ - spec/grape/dsl/parameters_spec.rb
478
+ - spec/grape/dsl/helpers_spec.rb
479
+ - spec/grape/dsl/middleware_spec.rb
480
+ - spec/grape/dsl/headers_spec.rb
481
+ - spec/grape/dsl/callbacks_spec.rb
482
+ - spec/grape/dsl/settings_spec.rb
483
+ - spec/grape/dsl/routing_spec.rb
484
+ - spec/grape/dsl/inside_route_spec.rb
478
485
  - spec/grape/path_spec.rb
479
- - spec/support/file_streamer.rb
480
- - spec/support/versioned_helpers.rb
481
- - spec/support/content_type_helpers.rb
482
- - spec/support/integer_helpers.rb
483
- - spec/support/basic_auth_encode_helpers.rb
484
- - spec/support/endpoint_faker.rb
485
- - spec/spec_helper.rb
486
- - spec/integration/multi_json/json_spec.rb
487
- - spec/integration/multi_xml/xml_spec.rb