grape 1.7.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c13bf4d5de206b76e7cccbe4ffa454512986457b8f5d055cde0cfac5d4f164a9
4
- data.tar.gz: 1177df9af2a24d80e01366f3d705f29e4180898f4cc1ac7e0221e8412e36dcf1
3
+ metadata.gz: 40277732454d8810e4e96f638da9e6bd4ab818e39ac9c30788791cb4bd429871
4
+ data.tar.gz: b075dd96ba3dda6fcd05e6b1c126255b5e206b2d6bb9bf9b52f9cd6ec25a6efc
5
5
  SHA512:
6
- metadata.gz: 32a0d1d9ae7d16b9760f8919814b2aa362ec95a666159a6dc8314946e8a9fd2461d8c074f705ac7afa21939d2a43bec4196a8b7803efdae967b2d01acd1ae77a
7
- data.tar.gz: 5ca9d54a6db6bc63107c2bd0b17cb747f293ec72bc3c0d57a7f7514f0c1122774bce82c5411f4fa19f1c7b435d2c3d1d87102e3f83ff5c31aa8a0dc531817e4d
6
+ metadata.gz: 61d1ef36c90927e08119b6abf57b87fc5317b7b4ac73587d14bc23c9b671e0e76930b89b22d15ec806861f2c60c582647a4f95bc6a1100dca07066be1853d4e6
7
+ data.tar.gz: 42a4595d466b2092759dee55ad467a6733e29912b0faaf3abe203c18ab1c84b53b6a1d45868102ac16e6b431254664a6762b3ec0b8e52217c777f99adcf965cc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ### 1.7.1 (2023/05/14)
2
+
3
+ #### Features
4
+
5
+ * [#2288](https://github.com/ruby-grape/grape/pull/2288): Droped support for Ruby 2.5 - [@ericproulx](https://github.com/ericproulx).
6
+ * [#2288](https://github.com/ruby-grape/grape/pull/2288): Updated rubocop to 1.41.0 - [@ericproulx](https://github.com/ericproulx).
7
+ * [#2296](https://github.com/ruby-grape/grape/pull/2296): Fix cops and enables some - [@ericproulx](https://github.com/ericproulx).
8
+ * [#2302](https://github.com/ruby-grape/grape/pull/2302): Rack < 3 and update rack-test - [@ericproulx](https://github.com/ericproulx).
9
+ * [#2303](https://github.com/ruby-grape/grape/pull/2302): Rack >= 1.3.0 - [@ericproulx](https://github.com/ericproulx).
10
+ * [#2301](https://github.com/ruby-grape/grape/pull/2301): Revisit GH workflows - [@ericproulx](https://github.com/ericproulx).
11
+ * [#2311](https://github.com/ruby-grape/grape/pull/2311): Fix tests by pinning rack-test to < 2.1 - [@duffn](https://github.com/duffn).
12
+ * [#2310](https://github.com/ruby-grape/grape/pull/2310): Fix YARD docs markdown rendering - [@duffn](https://github.com/duffn).
13
+ * [#2317](https://github.com/ruby-grape/grape/pull/2317): Remove maruku and rubocop-ast as direct development/testing dependencies - [@ericproulx](https://github.com/ericproulx).
14
+ * [#2292](https://github.com/ruby-grape/grape/pull/2292): Introduce Docker to local development - [@ericproulx](https://github.com/ericproulx).
15
+ * [#2325](https://github.com/ruby-grape/grape/pull/2325): Change edge test workflows only run on demand - [@dblock](https://github.com/dblock).
16
+ * [#2324](https://github.com/ruby-grape/grape/pull/2324): Expose default in the description dsl - [@dhruvCW](https://github.com/dhruvCW).
17
+
18
+ #### Fixes
19
+
20
+ * [#2299](https://github.com/ruby-grape/grape/pull/2299): Fix, do not use kwargs for empty args - [@dm1try](https://github.com/dm1try).
21
+ * [#2307](https://github.com/ruby-grape/grape/pull/2307): Fixed autoloading of InvalidValue - [@fixlr](https://github.com/fixlr).
22
+ * [#2315](https://github.com/ruby-grape/grape/pull/2315): Update rspec - [@ericproulx](https://github.com/ericproulx).
23
+ * [#2319](https://github.com/ruby-grape/grape/pull/2319): Update rubocop - [@ericproulx](https://github.com/ericproulx).
24
+ * [#2323](https://github.com/ruby-grape/grape/pull/2323): Fix using endless ranges for values parameter - [@dhruvCW](https://github.com/dhruvCW).
25
+
1
26
  ### 1.7.0 (2022/12/20)
2
27
 
3
28
  #### Features
data/CONTRIBUTING.md CHANGED
@@ -23,6 +23,34 @@ git pull upstream master
23
23
  git checkout -b my-feature-branch
24
24
  ```
25
25
 
26
+ ### Docker
27
+
28
+ If you're familiar with [Docker](https://www.docker.com/), you can run everything through the following command:
29
+
30
+ ```
31
+ docker-compose run --rm --build grape <command_and_parameters>
32
+ ```
33
+
34
+ About the execution process:
35
+ - displays Ruby, Rubygems, Bundle and Gemfile version when starting:
36
+ ```
37
+ ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux-musl]
38
+ rubygems 3.4.12
39
+ Bundler version 2.4.1 (2022-12-24 commit f3175f033c)
40
+ Running default Gemfile
41
+ ```
42
+ - keeps the gems to the latest possible version
43
+ - executes under `bundle exec`
44
+
45
+ Here are some examples:
46
+
47
+ - running all specs `docker-compose run --rm --build grape rspec`
48
+ - running rspec on a specific file `docker-compose run --rm --build grape rspec spec/:file_path`
49
+ - running task `docker-compose run --rm --build grape rake <task_name>`
50
+ - running rubocop `docker-compose run --rm --build grape rubocop`
51
+ - running all specs on a specific ruby version (e.g 2.7.7) `RUBY_VERSION=2.7.7 docker-compose run --rm --build grape rspec`
52
+ - running specs on a specific gemfile (e.g rails_7_0.gemfile) `docker-compose run -e GEMFILE=rails_7_0 --rm --build grape rspec`
53
+
26
54
  #### Bundle Install and Test
27
55
 
28
56
  Ensure that you can build the project and run tests.
@@ -58,6 +86,8 @@ Make sure that `bundle exec rake` completes without errors.
58
86
 
59
87
  Document any external behavior in the [README](README.md).
60
88
 
89
+ You should also document code as necessary, using current code as examples. This project uses [YARD](https://yardoc.org/). You can run and preview the docs locally by [installing `yard`](https://yardoc.org/), running `yard server --reload` and view the docs at http://localhost:8808.
90
+
61
91
  #### Update Changelog
62
92
 
63
93
  Add a line to [CHANGELOG](CHANGELOG.md) under *Next Release*. Make it look like every other line, including your name and link to your Github account.
data/README.md CHANGED
@@ -159,7 +159,7 @@ content negotiation, versioning and much more.
159
159
 
160
160
  ## Stable Release
161
161
 
162
- You're reading the documentation for the stable release of Grape, 1.7.0.
162
+ You're reading the documentation for the stable release of Grape, 1.7.1.
163
163
  Please read [UPGRADING](UPGRADING.md) when upgrading from a previous version.
164
164
 
165
165
  ## Project Resources
@@ -538,12 +538,12 @@ end
538
538
 
539
539
  class V1 < Grape::API
540
540
  version 'v1'
541
- mount BasicAPI, with: { entity: mounted { configuration[:entity] || API::Enitities::Status } }
541
+ mount BasicAPI, with: { entity: mounted { configuration[:entity] || API::Entities::Status } }
542
542
  end
543
543
 
544
544
  class V2 < Grape::API
545
545
  version 'v2'
546
- mount BasicAPI, with: { entity: mounted { configuration[:entity] || API::Enitities::V2::Status } }
546
+ mount BasicAPI, with: { entity: mounted { configuration[:entity] || API::Entities::V2::Status } }
547
547
  end
548
548
  ```
549
549
 
@@ -638,6 +638,7 @@ desc 'Returns your public timeline.' do
638
638
  params API::Entities::Status.documentation
639
639
  success API::Entities::Entity
640
640
  failure [[401, 'Unauthorized', 'Entities::Error']]
641
+ default { code: 500, message: 'InvalidRequest', model: Entities::Error }
641
642
  named 'My named route'
642
643
  headers XAuthToken: {
643
644
  description: 'Validates your identity',
@@ -662,8 +663,9 @@ end
662
663
 
663
664
  * `detail`: A more enhanced description
664
665
  * `params`: Define parameters directly from an `Entity`
665
- * `success`: (former entity) The `Entity` to be used to present by default this route
666
- * `failure`: (former http_codes) A definition of the used failure HTTP Codes and Entities
666
+ * `success`: (former entity) The `Entity` to be used to present the success response for this route.
667
+ * `failure`: (former http_codes) A definition of the used failure HTTP Codes and Entities.
668
+ * `default`: The definition and `Entity` used to present the default response for this route.
667
669
  * `named`: A helper to give a route a name and find it with this name in the documentation Hash
668
670
  * `headers`: A definition of the used Headers
669
671
  * Other options can be found in [grape-swagger][grape-swagger]
@@ -1586,6 +1588,15 @@ params do
1586
1588
  end
1587
1589
  ```
1588
1590
 
1591
+ Note endless ranges are also supported with ActiveSupport >= 6.0, but they require that the type be provided.
1592
+
1593
+ ```ruby
1594
+ params do
1595
+ requires :minimum, type: Integer, values: 10..
1596
+ optional :maximum, type: Integer, values: ..10
1597
+ end
1598
+ ```
1599
+
1589
1600
  Note that *both* range endpoints have to be a `#kind_of?` your `:type` option (if you don't supply the `:type` option, it will be guessed to be equal to the class of the range's first endpoint). So the following is invalid:
1590
1601
 
1591
1602
  ```ruby
@@ -3340,6 +3351,17 @@ end
3340
3351
 
3341
3352
  Use `body false` to return `204 No Content` without any data or content-type.
3342
3353
 
3354
+ If you want to empty the body with an HTTP status code other than `204 No Content`, you can override the status code after specifying `body false` as follows
3355
+
3356
+ ```ruby
3357
+ class API < Grape::API
3358
+ get '/' do
3359
+ body false
3360
+ status 304
3361
+ end
3362
+ end
3363
+ ```
3364
+
3343
3365
  You can also set the response to a file with `sendfile`. This works with the
3344
3366
  [Rack::Sendfile](https://www.rubydoc.info/gems/rack/Rack/Sendfile) middleware to optimally send
3345
3367
  the file through your web server software.
data/grape.gemspec CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency 'builder'
25
25
  s.add_runtime_dependency 'dry-types', '>= 1.1'
26
26
  s.add_runtime_dependency 'mustermann-grape', '~> 1.0.0'
27
- s.add_runtime_dependency 'rack', '>= 1.3.0'
27
+ s.add_runtime_dependency 'rack', '>= 1.3.0', '< 3'
28
28
  s.add_runtime_dependency 'rack-accept'
29
29
 
30
30
  s.files = %w[CHANGELOG.md CONTRIBUTING.md README.md grape.png UPGRADING.md LICENSE]
@@ -32,5 +32,5 @@ Gem::Specification.new do |s|
32
32
  s.files += Dir['lib/**/*']
33
33
  s.test_files = Dir['spec/**/*']
34
34
  s.require_paths = ['lib']
35
- s.required_ruby_version = '>= 2.5.0'
35
+ s.required_ruby_version = '>= 2.6.0'
36
36
  end
@@ -98,7 +98,8 @@ module Grape
98
98
  :produces,
99
99
  :consumes,
100
100
  :security,
101
- :tags
101
+ :tags,
102
+ :default
102
103
  )
103
104
  config_context.define_singleton_method(:configuration) do
104
105
  endpoint_configuration
@@ -95,7 +95,7 @@ module Grape
95
95
  return yield if has_passed_children
96
96
 
97
97
  key = params_nested_path[0]
98
- key += "[#{params_nested_path[1..-1].join('][')}]" if params_nested_path.size > 1
98
+ key += "[#{params_nested_path[1..].join('][')}]" if params_nested_path.size > 1
99
99
 
100
100
  route_options_params = options[:route_options][:params] || {}
101
101
  type = route_options_params.dig(key, :type)
@@ -62,7 +62,12 @@ module Grape
62
62
  params_block = named_params.fetch(name) do
63
63
  raise "Params :#{name} not found!"
64
64
  end
65
- instance_exec(**options, &params_block)
65
+
66
+ if options.empty?
67
+ instance_exec(options, &params_block)
68
+ else
69
+ instance_exec(**options, &params_block)
70
+ end
66
71
  end
67
72
  end
68
73
  alias use_scope use
@@ -125,7 +125,7 @@ module Grape
125
125
  :base_only_rescue_handlers
126
126
  end
127
127
 
128
- namespace_reverse_stackable handler_type, args.map { |arg| [arg, handler] }.to_h
128
+ namespace_reverse_stackable(handler_type, args.to_h { |arg| [arg, handler] })
129
129
  end
130
130
 
131
131
  namespace_stackable(:rescue_options, options)
@@ -299,7 +299,7 @@ module Grape
299
299
 
300
300
  if namespace_inheritable(:version)
301
301
  stack.use Grape::Middleware::Versioner.using(namespace_inheritable(:version_options)[:using]),
302
- versions: namespace_inheritable(:version) ? namespace_inheritable(:version).flatten : nil,
302
+ versions: namespace_inheritable(:version)&.flatten,
303
303
  version_options: namespace_inheritable(:version_options),
304
304
  prefix: namespace_inheritable(:root_prefix),
305
305
  mount_path: namespace_stackable(:mount_path).first
@@ -325,7 +325,7 @@ module Grape
325
325
  private :build_stack, :build_helpers
326
326
 
327
327
  def execute
328
- @block ? @block.call(self) : nil
328
+ @block&.call(self)
329
329
  end
330
330
 
331
331
  def helpers
@@ -10,9 +10,10 @@ module Grape
10
10
  attr_reader :status, :headers
11
11
 
12
12
  def initialize(status: nil, message: nil, headers: nil, **_options)
13
+ super(message)
14
+
13
15
  @status = status
14
16
  @headers = headers
15
- super(message)
16
17
  end
17
18
 
18
19
  def [](index)
@@ -95,7 +95,7 @@ module Grape
95
95
 
96
96
  # @return [Rack::Builder] the builder object with our middlewares applied
97
97
  def build(builder = Rack::Builder.new)
98
- others.shift(others.size).each(&method(:merge_with))
98
+ others.shift(others.size).each { |m| merge_with(m) }
99
99
  middlewares.each do |m|
100
100
  m.use_in(builder)
101
101
  end
data/lib/grape/request.rb CHANGED
@@ -47,7 +47,7 @@ module Grape
47
47
  end
48
48
 
49
49
  def transform_header(header)
50
- -header[5..-1].split('_').each(&:capitalize!).join('-')
50
+ -header[5..].split('_').each(&:capitalize!).join('-')
51
51
  end
52
52
  end
53
53
  end
@@ -39,7 +39,7 @@ module Grape
39
39
 
40
40
  def method_missing(method_name, *args)
41
41
  if setter?(method_name[-1])
42
- attributes[method_name[0..-1]] = *args
42
+ attributes[method_name[0..]] = *args
43
43
  else
44
44
  attributes[method_name]
45
45
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # only exists to make it shorter for external use
4
+ module Grape
5
+ module Types
6
+ InvalidValue = Class.new(Grape::Validations::Types::InvalidValue)
7
+ end
8
+ end
@@ -1,4 +1,4 @@
1
- # frozen_String_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'singleton'
4
4
  require 'forwardable'
@@ -485,7 +485,7 @@ module Grape
485
485
  values_list.each do |values|
486
486
  next if !values || values.is_a?(Proc)
487
487
 
488
- value_types = values.is_a?(Range) ? [values.begin, values.end] : values
488
+ value_types = values.is_a?(Range) ? [values.begin, values.end].compact : values
489
489
  value_types = value_types.map { |type| Grape::API::Boolean.build(type) } if coerce_type == Grape::API::Boolean
490
490
  raise Grape::Exceptions::IncompatibleOptionValues.new(:type, coerce_type, :values, values) unless value_types.all?(coerce_type)
491
491
  end
@@ -15,10 +15,3 @@ module Grape
15
15
  end
16
16
  end
17
17
  end
18
-
19
- # only exists to make it shorter for external use
20
- module Grape
21
- module Types
22
- InvalidValue = Class.new(Grape::Validations::Types::InvalidValue)
23
- end
24
- end
data/lib/grape/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Grape
4
4
  # The current version of Grape.
5
- VERSION = '1.7.0'
5
+ VERSION = '1.7.1'
6
6
  end
data/lib/grape.rb CHANGED
@@ -277,6 +277,14 @@ module Grape
277
277
  end
278
278
  end
279
279
  end
280
+
281
+ module Types
282
+ extend ::ActiveSupport::Autoload
283
+
284
+ eager_autoload do
285
+ autoload :InvalidValue
286
+ end
287
+ end
280
288
  end
281
289
 
282
290
  require 'grape/config'
@@ -103,22 +103,6 @@ describe Grape::API do
103
103
  }
104
104
  end
105
105
  end
106
-
107
- # Behavior as defined by rfc2616 when no header is defined
108
- # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
109
- describe 'no specified accept header' do
110
- # subject.version 'v1', using: :header
111
- # subject.get '/hello' do
112
- # 'hello'
113
- # end
114
-
115
- # it 'routes' do
116
- # get '/hello'
117
- # last_response.status.should eql 200
118
- # end
119
- end
120
-
121
- # pending 'routes if any media type is allowed'
122
106
  end
123
107
 
124
108
  describe '.version using accept_version_header' do
@@ -448,9 +432,10 @@ describe Grape::API do
448
432
  expect(last_response.body).to eql 'hiya'
449
433
  end
450
434
 
435
+ objects = ['string', :symbol, 1, -1.1, {}, [], true, false, nil].freeze
451
436
  %i[put post].each do |verb|
452
437
  context verb.to_s do
453
- ['string', :symbol, 1, -1.1, {}, [], true, false, nil].each do |object|
438
+ objects.each do |object|
454
439
  it "allows a(n) #{object.class} json object in params" do
455
440
  subject.format :json
456
441
  subject.send(verb) do
@@ -1601,7 +1586,7 @@ describe Grape::API do
1601
1586
 
1602
1587
  subject.get(:hello) { 'Hello, world.' }
1603
1588
  get '/hello', {}, 'HTTP_AUTHORIZATION' => encode_basic_auth('allow', 'whatever')
1604
- expect(basic_auth_context).to be_a_kind_of(Grape::Endpoint)
1589
+ expect(basic_auth_context).to be_a(Grape::Endpoint)
1605
1590
  end
1606
1591
 
1607
1592
  it 'has access to helper methods' do
@@ -3067,7 +3052,7 @@ describe Grape::API do
3067
3052
  expect(route.description).to eq('first method')
3068
3053
  expect(route.route_foo).to be_nil
3069
3054
  expect(route.params).to eq({})
3070
- expect(route.options).to be_a_kind_of(Hash)
3055
+ expect(route.options).to be_a(Hash)
3071
3056
  end
3072
3057
 
3073
3058
  it 'has params which does not include format and version as named captures' do
@@ -3725,7 +3710,7 @@ describe Grape::API do
3725
3710
  it 'sets the instance' do
3726
3711
  expect(subject.instance).to be_nil
3727
3712
  subject.compile
3728
- expect(subject.instance).to be_kind_of(subject.base_instance)
3713
+ expect(subject.instance).to be_a(subject.base_instance)
3729
3714
  end
3730
3715
  end
3731
3716
 
@@ -26,6 +26,7 @@ module Grape
26
26
  detail: 'more details',
27
27
  params: { first: :param },
28
28
  entity: Object,
29
+ default: { code: 400, message: 'Invalid' },
29
30
  http_codes: [[401, 'Unauthorized', 'Entities::Error']],
30
31
  named: 'My named route',
31
32
  body_name: 'My body name',
@@ -54,6 +55,7 @@ module Grape
54
55
  detail 'more details'
55
56
  params(first: :param)
56
57
  success Object
58
+ default code: 400, message: 'Invalid'
57
59
  failure [[401, 'Unauthorized', 'Entities::Error']]
58
60
  named 'My named route'
59
61
  body_name 'My body name'
@@ -75,7 +75,7 @@ describe Grape::Endpoint do
75
75
  it 'sets itself in the env upon call' do
76
76
  subject.get('/') { 'Hello world.' }
77
77
  get '/'
78
- expect(last_request.env['api.endpoint']).to be_kind_of(described_class)
78
+ expect(last_request.env['api.endpoint']).to be_a(described_class)
79
79
  end
80
80
 
81
81
  describe '#status' do
@@ -140,7 +140,8 @@ describe Grape::Endpoint do
140
140
  get '/headers'
141
141
  expect(JSON.parse(last_response.body)).to eq(
142
142
  'Host' => 'example.org',
143
- 'Cookie' => ''
143
+ 'Cookie' => '',
144
+ 'Version' => 'HTTP/1.0'
144
145
  )
145
146
  end
146
147
 
@@ -213,10 +214,10 @@ describe Grape::Endpoint do
213
214
  end
214
215
  get '/test', {}, 'HTTP_COOKIE' => 'delete_this_cookie=1; and_this=2'
215
216
  expect(last_response.body).to eq('3')
216
- cookies = last_response.headers['Set-Cookie'].split("\n").map do |set_cookie|
217
+ cookies = last_response.headers['Set-Cookie'].split("\n").to_h do |set_cookie|
217
218
  cookie = CookieJar::Cookie.from_set_cookie 'http://localhost/test', set_cookie
218
219
  [cookie.name, cookie]
219
- end.to_h
220
+ end
220
221
  expect(cookies.size).to eq(2)
221
222
  %w[and_this delete_this_cookie].each do |cookie_name|
222
223
  cookie = cookies[cookie_name]
@@ -237,10 +238,10 @@ describe Grape::Endpoint do
237
238
  end
238
239
  get('/test', {}, 'HTTP_COOKIE' => 'delete_this_cookie=1; and_this=2')
239
240
  expect(last_response.body).to eq('3')
240
- cookies = last_response.headers['Set-Cookie'].split("\n").map do |set_cookie|
241
+ cookies = last_response.headers['Set-Cookie'].split("\n").to_h do |set_cookie|
241
242
  cookie = CookieJar::Cookie.from_set_cookie 'http://localhost/test', set_cookie
242
243
  [cookie.name, cookie]
243
- end.to_h
244
+ end
244
245
  expect(cookies.size).to eq(2)
245
246
  %w[and_this delete_this_cookie].each do |cookie_name|
246
247
  cookie = cookies[cookie_name]
@@ -432,7 +433,7 @@ describe Grape::Endpoint do
432
433
  end
433
434
  post '/upload', { file: '' }, 'CONTENT_TYPE' => 'multipart/form-data; boundary=foobar'
434
435
  expect(last_response.status).to eq(400)
435
- expect(last_response.body).to eq('empty message body supplied with multipart/form-data; boundary=foobar content-type')
436
+ expect(last_response.body).to eq('file is invalid')
436
437
  end
437
438
  end
438
439
 
@@ -10,11 +10,13 @@ describe Grape::Exceptions::InvalidAcceptHeader do
10
10
  expect(last_response.body).to eq('beer received')
11
11
  end
12
12
  end
13
+
13
14
  shared_examples_for 'a cascaded request' do
14
15
  it 'does not find a matching route' do
15
16
  expect(last_response.status).to eq 404
16
17
  end
17
18
  end
19
+
18
20
  shared_examples_for 'a not-cascaded request' do
19
21
  it 'does not include the X-Cascade=pass header' do
20
22
  expect(last_response.headers['X-Cascade']).to be_nil
@@ -24,6 +26,7 @@ describe Grape::Exceptions::InvalidAcceptHeader do
24
26
  expect(last_response.status).to eq 406
25
27
  end
26
28
  end
29
+
27
30
  shared_examples_for 'a rescued request' do
28
31
  it 'does not include the X-Cascade=pass header' do
29
32
  expect(last_response.headers['X-Cascade']).to be_nil
@@ -27,19 +27,20 @@ describe Rack do
27
27
  end
28
28
 
29
29
  context 'when the app is mounted' do
30
- def app
31
- @main_app ||= Class.new(Grape::API) do
30
+ let(:ping_mount) do
31
+ Class.new(Grape::API) do
32
32
  get 'ping'
33
33
  end
34
34
  end
35
35
 
36
- let!(:base) do
37
- app_to_mount = app
38
- Class.new(Grape::API) do
36
+ let(:app) do
37
+ app_to_mount = ping_mount
38
+ app = Class.new(Grape::API) do
39
39
  namespace 'namespace' do
40
40
  mount app_to_mount
41
41
  end
42
42
  end
43
+ Rack::Builder.new(app)
43
44
  end
44
45
 
45
46
  it 'finds the app on the namespace' do
@@ -70,18 +70,18 @@ describe Grape::Middleware::Base do
70
70
 
71
71
  it 'is able to access the response' do
72
72
  subject.call({})
73
- expect(subject.response).to be_kind_of(Rack::Response)
73
+ expect(subject.response).to be_a(Rack::Response)
74
74
  end
75
75
 
76
76
  describe '#response' do
77
77
  subject do
78
- puts described_class
79
78
  described_class.new(response)
80
79
  end
81
80
 
82
81
  before { subject.call({}) }
83
82
 
84
83
  context 'when Array' do
84
+ let(:rack_response) { Rack::Response.new('test', 204, abc: 1) }
85
85
  let(:response) { ->(_) { [204, { abc: 1 }, 'test'] } }
86
86
 
87
87
  it 'status' do
@@ -97,12 +97,14 @@ describe Grape::Middleware::Base do
97
97
  end
98
98
 
99
99
  it 'returns the memoized Rack::Response instance' do
100
- expect(subject.response).to be(subject.response)
100
+ allow(Rack::Response).to receive(:new).and_return(rack_response)
101
+ expect(subject.response).to eq(rack_response)
101
102
  end
102
103
  end
103
104
 
104
105
  context 'when Rack::Response' do
105
- let(:response) { ->(_) { Rack::Response.new('test', 204, abc: 1) } }
106
+ let(:rack_response) { Rack::Response.new('test', 204, abc: 1) }
107
+ let(:response) { ->(_) { rack_response } }
106
108
 
107
109
  it 'status' do
108
110
  expect(subject.response.status).to eq(204)
@@ -117,7 +119,7 @@ describe Grape::Middleware::Base do
117
119
  end
118
120
 
119
121
  it 'returns the memoized Rack::Response instance' do
120
- expect(subject.response).to be(subject.response)
122
+ expect(subject.response).to eq(rack_response)
121
123
  end
122
124
  end
123
125
  end
@@ -13,7 +13,7 @@ describe Grape::Middleware::Formatter do
13
13
 
14
14
  it 'looks at the bodies for possibly serializable data' do
15
15
  _, _, bodies = *subject.call('PATH_INFO' => '/somewhere', 'HTTP_ACCEPT' => 'application/json')
16
- bodies.each { |b| expect(b).to eq(::Grape::Json.dump(body)) }
16
+ bodies.each { |b| expect(b).to eq(::Grape::Json.dump(body)) } # rubocop:disable RSpec/IteratedExpectation
17
17
  end
18
18
 
19
19
  context 'default format' do
@@ -26,7 +26,7 @@ describe Grape::Middleware::Formatter do
26
26
  end
27
27
  end
28
28
 
29
- subject.call('PATH_INFO' => '/somewhere', 'HTTP_ACCEPT' => 'application/json').to_a.last.each { |b| expect(b).to eq('"bar"') }
29
+ subject.call('PATH_INFO' => '/somewhere', 'HTTP_ACCEPT' => 'application/json').to_a.last.each { |b| expect(b).to eq('"bar"') } # rubocop:disable RSpec/IteratedExpectation
30
30
  end
31
31
  end
32
32
 
@@ -40,7 +40,7 @@ describe Grape::Middleware::Formatter do
40
40
  end
41
41
  end
42
42
 
43
- subject.call('PATH_INFO' => '/somewhere', 'HTTP_ACCEPT' => 'application/vnd.api+json').to_a.last.each { |b| expect(b).to eq('{"foos":[{"bar":"baz"}] }') }
43
+ subject.call('PATH_INFO' => '/somewhere', 'HTTP_ACCEPT' => 'application/vnd.api+json').to_a.last.each { |b| expect(b).to eq('{"foos":[{"bar":"baz"}] }') } # rubocop:disable RSpec/IteratedExpectation
44
44
  end
45
45
  end
46
46
 
@@ -53,8 +53,7 @@ describe Grape::Middleware::Formatter do
53
53
  '<bar/>'
54
54
  end
55
55
  end
56
-
57
- subject.call('PATH_INFO' => '/somewhere.xml', 'HTTP_ACCEPT' => 'application/json').to_a.last.each { |b| expect(b).to eq('<bar/>') }
56
+ subject.call('PATH_INFO' => '/somewhere.xml', 'HTTP_ACCEPT' => 'application/json').to_a.last.each { |b| expect(b).to eq('<bar/>') } # rubocop:disable RSpec/IteratedExpectation
58
57
  end
59
58
  end
60
59
  end
@@ -243,6 +242,7 @@ describe Grape::Middleware::Formatter do
243
242
  end
244
243
 
245
244
  context 'input' do
245
+ content_types = ['application/json', 'application/json; charset=utf-8'].freeze
246
246
  %w[POST PATCH PUT DELETE].each do |method|
247
247
  context 'when body is not nil or empty' do
248
248
  context 'when Content-Type is supported' do
@@ -320,7 +320,7 @@ describe Grape::Middleware::Formatter do
320
320
  end
321
321
  end
322
322
 
323
- ['application/json', 'application/json; charset=utf-8'].each do |content_type|
323
+ content_types.each do |content_type|
324
324
  context content_type do
325
325
  it "parses the body from #{method} and copies values into rack.request.form_hash" do
326
326
  io = StringIO.new('{"is_boolean":true,"string":"thing"}')
@@ -114,6 +114,13 @@ describe Grape::Validations::Validators::ValuesValidator do
114
114
  { type: params[:type] }
115
115
  end
116
116
 
117
+ params do
118
+ optional :type, type: Integer, values: 1..
119
+ end
120
+ get '/endless' do
121
+ { type: params[:type] }
122
+ end
123
+
117
124
  params do
118
125
  requires :type, values: ->(v) { ValuesModel.include? v }
119
126
  end
@@ -374,6 +381,18 @@ describe Grape::Validations::Validators::ValuesValidator do
374
381
  expect(last_response.body).to eq({ error: 'type does not have a valid value' }.to_json)
375
382
  end
376
383
 
384
+ it 'validates against values in an endless range', if: ActiveSupport::VERSION::MAJOR >= 6 do
385
+ get('/endless', type: 10)
386
+ expect(last_response.status).to eq 200
387
+ expect(last_response.body).to eq({ type: 10 }.to_json)
388
+ end
389
+
390
+ it 'does not allow an invalid value for a parameter using an endless range', if: ActiveSupport::VERSION::MAJOR >= 6 do
391
+ get('/endless', type: 0)
392
+ expect(last_response.status).to eq 400
393
+ expect(last_response.body).to eq({ error: 'type does not have a valid value' }.to_json)
394
+ end
395
+
377
396
  it 'does not allow non-numeric string value for int value using lambda' do
378
397
  get('/lambda_int_val', number: 'foo')
379
398
  expect(last_response.status).to eq 400
@@ -1071,12 +1071,12 @@ describe Grape::Validations do
1071
1071
  }
1072
1072
  # debugger
1073
1073
  get '/multi_level', data
1074
- expect(last_response.body.split(', ')).to match_array([
1075
- 'top[3][top_id] is empty',
1076
- 'top[2][middle_1][0][middle_1_id] is empty',
1077
- 'top[1][middle_1][1][middle_2][0][middle_2_id] is empty',
1078
- 'top[0][middle_1][1][middle_2][1][bottom][0][bottom_id] is empty'
1079
- ])
1074
+ expect(last_response.body.split(', ')).to contain_exactly(
1075
+ 'top[3][top_id] is empty',
1076
+ 'top[2][middle_1][0][middle_1_id] is empty',
1077
+ 'top[1][middle_1][1][middle_2][0][middle_2_id] is empty',
1078
+ 'top[0][middle_1][1][middle_2][1][bottom][0][bottom_id] is empty'
1079
+ )
1080
1080
  expect(last_response.status).to eq(400)
1081
1081
  end
1082
1082
  end
@@ -1509,6 +1509,29 @@ describe Grape::Validations do
1509
1509
  end
1510
1510
  end
1511
1511
 
1512
+ context 'with block and empty args' do
1513
+ before do
1514
+ subject.helpers do
1515
+ params :shared_params do |empty_args|
1516
+ optional :param, default: empty_args[:some]
1517
+ end
1518
+ end
1519
+ subject.format :json
1520
+ subject.params do
1521
+ use :shared_params
1522
+ end
1523
+ subject.get '/shared_params' do
1524
+ :ok
1525
+ end
1526
+ end
1527
+
1528
+ it 'works' do
1529
+ get '/shared_params'
1530
+
1531
+ expect(last_response.status).to eq(200)
1532
+ end
1533
+ end
1534
+
1512
1535
  context 'all or none' do
1513
1536
  context 'optional params' do
1514
1537
  before 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.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-20 00:00:00.000000000 Z
11
+ date: 2023-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -73,6 +73,9 @@ dependencies:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 1.3.0
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '3'
76
79
  type: :runtime
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -80,6 +83,9 @@ dependencies:
80
83
  - - ">="
81
84
  - !ruby/object:Gem::Version
82
85
  version: 1.3.0
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '3'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: rack-accept
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +209,7 @@ files:
203
209
  - lib/grape/serve_stream/file_body.rb
204
210
  - lib/grape/serve_stream/sendfile_response.rb
205
211
  - lib/grape/serve_stream/stream_response.rb
212
+ - lib/grape/types/invalid_value.rb
206
213
  - lib/grape/util/base_inheritable.rb
207
214
  - lib/grape/util/cache.rb
208
215
  - lib/grape/util/endpoint_configuration.rb
@@ -276,7 +283,6 @@ files:
276
283
  - spec/grape/api_spec.rb
277
284
  - spec/grape/config_spec.rb
278
285
  - spec/grape/dsl/callbacks_spec.rb
279
- - spec/grape/dsl/configuration_spec.rb
280
286
  - spec/grape/dsl/desc_spec.rb
281
287
  - spec/grape/dsl/headers_spec.rb
282
288
  - spec/grape/dsl/helpers_spec.rb
@@ -337,7 +343,6 @@ files:
337
343
  - spec/grape/util/stackable_values_spec.rb
338
344
  - spec/grape/util/strict_hash_configuration_spec.rb
339
345
  - spec/grape/validations/attributes_doc_spec.rb
340
- - spec/grape/validations/attributes_iterator_spec.rb
341
346
  - spec/grape/validations/instance_behaivour_spec.rb
342
347
  - spec/grape/validations/multiple_attributes_iterator_spec.rb
343
348
  - spec/grape/validations/params_scope_spec.rb
@@ -377,10 +382,10 @@ licenses:
377
382
  - MIT
378
383
  metadata:
379
384
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
380
- changelog_uri: https://github.com/ruby-grape/grape/blob/v1.7.0/CHANGELOG.md
381
- documentation_uri: https://www.rubydoc.info/gems/grape/1.7.0
382
- source_code_uri: https://github.com/ruby-grape/grape/tree/v1.7.0
383
- post_install_message:
385
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v1.7.1/CHANGELOG.md
386
+ documentation_uri: https://www.rubydoc.info/gems/grape/1.7.1
387
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v1.7.1
388
+ post_install_message:
384
389
  rdoc_options: []
385
390
  require_paths:
386
391
  - lib
@@ -388,133 +393,131 @@ required_ruby_version: !ruby/object:Gem::Requirement
388
393
  requirements:
389
394
  - - ">="
390
395
  - !ruby/object:Gem::Version
391
- version: 2.5.0
396
+ version: 2.6.0
392
397
  required_rubygems_version: !ruby/object:Gem::Requirement
393
398
  requirements:
394
399
  - - ">="
395
400
  - !ruby/object:Gem::Version
396
401
  version: '0'
397
402
  requirements: []
398
- rubygems_version: 3.3.7
399
- signing_key:
403
+ rubygems_version: 3.0.3
404
+ signing_key:
400
405
  specification_version: 4
401
406
  summary: A simple Ruby framework for building REST-like APIs.
402
407
  test_files:
403
- - spec/grape/api/custom_validations_spec.rb
404
- - spec/grape/api/deeply_included_options_spec.rb
405
- - spec/grape/api/defines_boolean_in_params_spec.rb
406
- - spec/grape/api/documentation_spec.rb
407
- - spec/grape/api/inherited_helpers_spec.rb
408
- - spec/grape/api/instance_spec.rb
409
- - spec/grape/api/invalid_format_spec.rb
410
- - spec/grape/api/namespace_parameters_in_route_spec.rb
411
- - spec/grape/api/nested_helpers_spec.rb
412
- - spec/grape/api/optional_parameters_in_route_spec.rb
413
- - spec/grape/api/parameters_modification_spec.rb
414
- - spec/grape/api/patch_method_helpers_spec.rb
415
- - spec/grape/api/recognize_path_spec.rb
416
- - spec/grape/api/required_parameters_in_route_spec.rb
417
- - spec/grape/api/required_parameters_with_invalid_method_spec.rb
418
- - spec/grape/api/routes_with_requirements_spec.rb
419
- - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
420
- - spec/grape/api/shared_helpers_spec.rb
421
- - spec/grape/api_remount_spec.rb
422
- - spec/grape/api_spec.rb
423
- - spec/grape/config_spec.rb
424
- - spec/grape/dsl/callbacks_spec.rb
425
- - spec/grape/dsl/configuration_spec.rb
426
- - spec/grape/dsl/desc_spec.rb
427
- - spec/grape/dsl/headers_spec.rb
428
- - spec/grape/dsl/helpers_spec.rb
429
- - spec/grape/dsl/inside_route_spec.rb
430
- - spec/grape/dsl/logger_spec.rb
431
- - spec/grape/dsl/middleware_spec.rb
432
- - spec/grape/dsl/parameters_spec.rb
433
- - spec/grape/dsl/request_response_spec.rb
434
- - spec/grape/dsl/routing_spec.rb
435
- - spec/grape/dsl/settings_spec.rb
436
- - spec/grape/dsl/validations_spec.rb
437
- - spec/grape/endpoint/declared_spec.rb
438
- - spec/grape/endpoint_spec.rb
439
- - spec/grape/entity_spec.rb
440
- - spec/grape/exceptions/base_spec.rb
441
- - spec/grape/exceptions/body_parse_errors_spec.rb
442
- - spec/grape/exceptions/invalid_accept_header_spec.rb
443
- - spec/grape/exceptions/invalid_formatter_spec.rb
444
- - spec/grape/exceptions/invalid_response_spec.rb
445
- - spec/grape/exceptions/invalid_versioner_option_spec.rb
446
- - spec/grape/exceptions/missing_group_type_spec.rb
447
- - spec/grape/exceptions/missing_mime_type_spec.rb
448
- - spec/grape/exceptions/missing_option_spec.rb
449
- - spec/grape/exceptions/unknown_options_spec.rb
450
- - spec/grape/exceptions/unknown_validator_spec.rb
451
- - spec/grape/exceptions/unsupported_group_type_spec.rb
452
- - spec/grape/exceptions/validation_errors_spec.rb
453
- - spec/grape/exceptions/validation_spec.rb
454
- - spec/grape/extensions/param_builders/hash_spec.rb
455
- - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
456
- - spec/grape/extensions/param_builders/hashie/mash_spec.rb
457
- - spec/grape/integration/global_namespace_function_spec.rb
458
- - spec/grape/integration/rack_sendfile_spec.rb
459
- - spec/grape/integration/rack_spec.rb
460
- - spec/grape/loading_spec.rb
461
- - spec/grape/middleware/auth/base_spec.rb
462
- - spec/grape/middleware/auth/dsl_spec.rb
463
- - spec/grape/middleware/auth/strategies_spec.rb
464
- - spec/grape/middleware/base_spec.rb
408
+ - spec/spec_helper.rb
409
+ - spec/integration/eager_load/eager_load_spec.rb
410
+ - spec/integration/multi_xml/xml_spec.rb
411
+ - spec/integration/multi_json/json_spec.rb
412
+ - spec/shared/versioning_examples.rb
413
+ - spec/support/basic_auth_encode_helpers.rb
414
+ - spec/support/endpoint_faker.rb
415
+ - spec/support/chunks.rb
416
+ - spec/support/file_streamer.rb
417
+ - spec/support/versioned_helpers.rb
418
+ - spec/support/content_type_helpers.rb
419
+ - spec/support/integer_helpers.rb
465
420
  - spec/grape/middleware/error_spec.rb
466
- - spec/grape/middleware/exception_spec.rb
467
- - spec/grape/middleware/formatter_spec.rb
468
421
  - spec/grape/middleware/globals_spec.rb
422
+ - spec/grape/middleware/formatter_spec.rb
423
+ - spec/grape/middleware/auth/strategies_spec.rb
424
+ - spec/grape/middleware/auth/dsl_spec.rb
425
+ - spec/grape/middleware/auth/base_spec.rb
469
426
  - spec/grape/middleware/stack_spec.rb
427
+ - spec/grape/middleware/exception_spec.rb
428
+ - spec/grape/middleware/versioner_spec.rb
470
429
  - spec/grape/middleware/versioner/accept_version_header_spec.rb
471
430
  - spec/grape/middleware/versioner/header_spec.rb
472
- - spec/grape/middleware/versioner/param_spec.rb
473
431
  - spec/grape/middleware/versioner/path_spec.rb
474
- - spec/grape/middleware/versioner_spec.rb
475
- - spec/grape/named_api_spec.rb
476
- - spec/grape/parser_spec.rb
477
- - spec/grape/path_spec.rb
478
- - spec/grape/presenters/presenter_spec.rb
479
- - spec/grape/request_spec.rb
480
- - spec/grape/util/inheritable_setting_spec.rb
481
- - spec/grape/util/inheritable_values_spec.rb
432
+ - spec/grape/middleware/versioner/param_spec.rb
433
+ - spec/grape/middleware/base_spec.rb
434
+ - spec/grape/config_spec.rb
435
+ - spec/grape/loading_spec.rb
436
+ - spec/grape/endpoint_spec.rb
437
+ - spec/grape/api_spec.rb
482
438
  - spec/grape/util/reverse_stackable_values_spec.rb
483
439
  - spec/grape/util/stackable_values_spec.rb
440
+ - spec/grape/util/inheritable_setting_spec.rb
484
441
  - spec/grape/util/strict_hash_configuration_spec.rb
485
- - spec/grape/validations/attributes_doc_spec.rb
486
- - spec/grape/validations/attributes_iterator_spec.rb
487
- - spec/grape/validations/instance_behaivour_spec.rb
488
- - spec/grape/validations/multiple_attributes_iterator_spec.rb
489
- - spec/grape/validations/params_scope_spec.rb
442
+ - spec/grape/util/inheritable_values_spec.rb
443
+ - spec/grape/integration/rack_spec.rb
444
+ - spec/grape/integration/rack_sendfile_spec.rb
445
+ - spec/grape/integration/global_namespace_function_spec.rb
446
+ - spec/grape/validations_spec.rb
447
+ - spec/grape/entity_spec.rb
448
+ - spec/grape/exceptions/missing_group_type_spec.rb
449
+ - spec/grape/exceptions/unsupported_group_type_spec.rb
450
+ - spec/grape/exceptions/validation_spec.rb
451
+ - spec/grape/exceptions/invalid_accept_header_spec.rb
452
+ - spec/grape/exceptions/missing_option_spec.rb
453
+ - spec/grape/exceptions/invalid_response_spec.rb
454
+ - spec/grape/exceptions/body_parse_errors_spec.rb
455
+ - spec/grape/exceptions/invalid_formatter_spec.rb
456
+ - spec/grape/exceptions/missing_mime_type_spec.rb
457
+ - spec/grape/exceptions/unknown_options_spec.rb
458
+ - spec/grape/exceptions/validation_errors_spec.rb
459
+ - spec/grape/exceptions/unknown_validator_spec.rb
460
+ - spec/grape/exceptions/invalid_versioner_option_spec.rb
461
+ - spec/grape/exceptions/base_spec.rb
462
+ - spec/grape/presenters/presenter_spec.rb
490
463
  - spec/grape/validations/single_attribute_iterator_spec.rb
491
- - spec/grape/validations/types/array_coercer_spec.rb
492
464
  - spec/grape/validations/types/primitive_coercer_spec.rb
493
465
  - spec/grape/validations/types/set_coercer_spec.rb
466
+ - spec/grape/validations/types/array_coercer_spec.rb
467
+ - spec/grape/validations/attributes_doc_spec.rb
468
+ - spec/grape/validations/params_scope_spec.rb
469
+ - spec/grape/validations/instance_behaivour_spec.rb
470
+ - spec/grape/validations/multiple_attributes_iterator_spec.rb
494
471
  - spec/grape/validations/types_spec.rb
495
- - spec/grape/validations/validators/all_or_none_spec.rb
496
- - spec/grape/validations/validators/allow_blank_spec.rb
497
- - spec/grape/validations/validators/at_least_one_of_spec.rb
498
- - spec/grape/validations/validators/coerce_spec.rb
499
- - spec/grape/validations/validators/default_spec.rb
472
+ - spec/grape/validations/validators/regexp_spec.rb
473
+ - spec/grape/validations/validators/mutual_exclusion_spec.rb
500
474
  - spec/grape/validations/validators/exactly_one_of_spec.rb
501
475
  - spec/grape/validations/validators/except_values_spec.rb
502
- - spec/grape/validations/validators/mutual_exclusion_spec.rb
503
476
  - spec/grape/validations/validators/presence_spec.rb
504
- - spec/grape/validations/validators/regexp_spec.rb
477
+ - spec/grape/validations/validators/all_or_none_spec.rb
478
+ - spec/grape/validations/validators/allow_blank_spec.rb
505
479
  - spec/grape/validations/validators/same_as_spec.rb
480
+ - spec/grape/validations/validators/default_spec.rb
506
481
  - spec/grape/validations/validators/values_spec.rb
482
+ - spec/grape/validations/validators/at_least_one_of_spec.rb
483
+ - spec/grape/validations/validators/coerce_spec.rb
507
484
  - spec/grape/validations/validators/zh-CN.yml
508
- - spec/grape/validations_spec.rb
509
- - spec/integration/eager_load/eager_load_spec.rb
510
- - spec/integration/multi_json/json_spec.rb
511
- - spec/integration/multi_xml/xml_spec.rb
512
- - spec/shared/versioning_examples.rb
513
- - spec/spec_helper.rb
514
- - spec/support/basic_auth_encode_helpers.rb
515
- - spec/support/chunks.rb
516
- - spec/support/content_type_helpers.rb
517
- - spec/support/endpoint_faker.rb
518
- - spec/support/file_streamer.rb
519
- - spec/support/integer_helpers.rb
520
- - spec/support/versioned_helpers.rb
485
+ - spec/grape/extensions/param_builders/hashie/mash_spec.rb
486
+ - spec/grape/extensions/param_builders/hash_spec.rb
487
+ - spec/grape/extensions/param_builders/hash_with_indifferent_access_spec.rb
488
+ - spec/grape/parser_spec.rb
489
+ - spec/grape/request_spec.rb
490
+ - spec/grape/endpoint/declared_spec.rb
491
+ - spec/grape/api/parameters_modification_spec.rb
492
+ - spec/grape/api/patch_method_helpers_spec.rb
493
+ - spec/grape/api/required_parameters_with_invalid_method_spec.rb
494
+ - spec/grape/api/nested_helpers_spec.rb
495
+ - spec/grape/api/defines_boolean_in_params_spec.rb
496
+ - spec/grape/api/invalid_format_spec.rb
497
+ - spec/grape/api/required_parameters_in_route_spec.rb
498
+ - spec/grape/api/instance_spec.rb
499
+ - spec/grape/api/namespace_parameters_in_route_spec.rb
500
+ - spec/grape/api/recognize_path_spec.rb
501
+ - spec/grape/api/shared_helpers_exactly_one_of_spec.rb
502
+ - spec/grape/api/inherited_helpers_spec.rb
503
+ - spec/grape/api/shared_helpers_spec.rb
504
+ - spec/grape/api/deeply_included_options_spec.rb
505
+ - spec/grape/api/routes_with_requirements_spec.rb
506
+ - spec/grape/api/custom_validations_spec.rb
507
+ - spec/grape/api/optional_parameters_in_route_spec.rb
508
+ - spec/grape/api/documentation_spec.rb
509
+ - spec/grape/api_remount_spec.rb
510
+ - spec/grape/named_api_spec.rb
511
+ - spec/grape/dsl/request_response_spec.rb
512
+ - spec/grape/dsl/desc_spec.rb
513
+ - spec/grape/dsl/logger_spec.rb
514
+ - spec/grape/dsl/validations_spec.rb
515
+ - spec/grape/dsl/parameters_spec.rb
516
+ - spec/grape/dsl/helpers_spec.rb
517
+ - spec/grape/dsl/middleware_spec.rb
518
+ - spec/grape/dsl/headers_spec.rb
519
+ - spec/grape/dsl/callbacks_spec.rb
520
+ - spec/grape/dsl/settings_spec.rb
521
+ - spec/grape/dsl/routing_spec.rb
522
+ - spec/grape/dsl/inside_route_spec.rb
523
+ - spec/grape/path_spec.rb
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module DSL
5
- module ConfigurationSpec
6
- class Dummy
7
- include Grape::DSL::Configuration
8
- end
9
- end
10
- describe Configuration do
11
- subject { Class.new(ConfigurationSpec::Dummy) }
12
- end
13
- end
14
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Grape::Validations::AttributesIterator do
4
- end