grape 2.1.1 → 2.1.3

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: 5ff753adfdf2428ba49d22317b87ff7a526845e582496dd6f653c8ff04261166
4
- data.tar.gz: b62d8ab4c9ac3ca28d62bb2e9afaae54255ed820be17029da35498111ff98cb7
3
+ metadata.gz: 172d51f08cb655e030afc83ecc06cb13ad5c72c9ad1d6f63d6f87d8b45a52772
4
+ data.tar.gz: 2d946a6526a7cc848e441fac2d4e0169a0762025d34445307f3945abeeef2b72
5
5
  SHA512:
6
- metadata.gz: 4501a8f8141b54f83a6e289d0dc9e1128273b92a23a4116f892ef2b47feb03fb852f6787d151a02f553665a5cdb3ac34e440f468ab4901a02c436340bde27f32
7
- data.tar.gz: 861d46d98bb44caf203c5e6f919ecf568174a5d915259df983f66310c4c9b118213c62b489c8e498569ea2eebf0a8bf65a0b0888fb4d14e97e408e1f3a12c5fe
6
+ metadata.gz: eb1ec3cd146f8e4a3f12314159e68177b92548fb7ea3eeac47a425addc3fa04a38c61c566ed3a0655d325bd5d24044b020449aa5702f997d746eef2c5d493928
7
+ data.tar.gz: 8c44c721a9e0acbb00997ac40ea4b491c4a3c0315e6f4cc1432a2ea5cff102887e028e10df883eba0b50645219918a3fc5a3a66f36068a9d6abc81b29b75c61f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ### 2.1.3 (2024-07-13)
2
+
3
+ #### Fixes
4
+
5
+ * [#2467](https://github.com/ruby-grape/grape/pull/2467): Fix repo coverage - [@ericproulx](https://github.com/ericproulx).
6
+ * [#2468](https://github.com/ruby-grape/grape/pull/2468): Align `error!` method signatures across different places - [@numbata](https://github.com/numbata).
7
+ * [#2469](https://github.com/ruby-grape/grape/pull/2469): Fix full path building for lateral scopes - [@numbata](https://github.com/numbata).
8
+
9
+ ### 2.1.2 (2024-06-28)
10
+
11
+ #### Fixes
12
+
13
+ * [#2459](https://github.com/ruby-grape/grape/pull/2459): Autocorrect cops - [@ericproulx](https://github.com/ericproulx).
14
+ * [#3458](https://github.com/ruby-grape/grape/pull/2458): Remove unused Grape::Util::Accept::Header - [@ericproulx](https://github.com/ericproulx).
15
+ * [#2463](https://github.com/ruby-grape/grape/pull/2463): Fix error message indices - [@ericproulx](https://github.com/ericproulx).
16
+
1
17
  ### 2.1.1 (2024-06-22)
2
18
 
3
19
  #### Features
data/README.md CHANGED
@@ -157,7 +157,7 @@ Grape is a REST-like API framework for Ruby. It's designed to run on Rack or com
157
157
 
158
158
  ## Stable Release
159
159
 
160
- You're reading the documentation for the stable release of Grape, **2.1.1**.
160
+ You're reading the documentation for the stable release of Grape, **2.1.3**.
161
161
  Please read [UPGRADING](UPGRADING.md) when upgrading from a previous version.
162
162
 
163
163
  ## Project Resources
@@ -46,7 +46,7 @@ module Grape
46
46
  # Parses the API's definition and compiles it into an instance of
47
47
  # Grape::API.
48
48
  def compile
49
- @instance ||= new
49
+ @instance ||= new # rubocop:disable Naming/MemoizedInstanceVariableName
50
50
  end
51
51
 
52
52
  # Wipe the compiled API so we can recompile after changes were made.
data/lib/grape/api.rb CHANGED
@@ -32,7 +32,7 @@ module Grape
32
32
  def inherited(api)
33
33
  super
34
34
 
35
- api.initial_setup(Grape::API == self ? Grape::API::Instance : @base_instance)
35
+ api.initial_setup(self == Grape::API ? Grape::API::Instance : @base_instance)
36
36
  api.override_all_methods!
37
37
  end
38
38
 
@@ -108,7 +108,7 @@ module Grape
108
108
  end
109
109
 
110
110
  def respond_to?(method, include_private = false)
111
- super(method, include_private) || base_instance.respond_to?(method, include_private)
111
+ super || base_instance.respond_to?(method, include_private)
112
112
  end
113
113
 
114
114
  def respond_to_missing?(method, include_private = false)
@@ -163,12 +163,14 @@ module Grape
163
163
  # end user with the specified message.
164
164
  #
165
165
  # @param message [String] The message to display.
166
- # @param status [Integer] the HTTP Status Code. Defaults to default_error_status, 500 if not set.
166
+ # @param status [Integer] The HTTP Status Code. Defaults to default_error_status, 500 if not set.
167
167
  # @param additional_headers [Hash] Addtional headers for the response.
168
- def error!(message, status = nil, additional_headers = nil)
168
+ # @param backtrace [Array<String>] The backtrace of the exception that caused the error.
169
+ # @param original_exception [Exception] The original exception that caused the error.
170
+ def error!(message, status = nil, additional_headers = nil, backtrace = nil, original_exception = nil)
169
171
  status = self.status(status || namespace_inheritable(:default_error_status))
170
172
  headers = additional_headers.present? ? header.merge(additional_headers) : header
171
- throw :error, message: message, status: status, headers: headers
173
+ throw :error, message: message, status: status, headers: headers, backtrace: backtrace, original_exception: original_exception
172
174
  end
173
175
 
174
176
  # Creates a Rack response based on the provided message, status, and headers.
@@ -231,7 +231,7 @@ module Grape
231
231
 
232
232
  alias group requires
233
233
 
234
- class EmptyOptionalValue; end
234
+ class EmptyOptionalValue; end # rubocop:disable Lint/EmptyClass
235
235
 
236
236
  def map_params(params, element, is_array = false)
237
237
  if params.is_a?(Array)
@@ -231,8 +231,8 @@ module Grape
231
231
  options[:app].endpoints if options[:app].respond_to?(:endpoints)
232
232
  end
233
233
 
234
- def equals?(e)
235
- (options == e.options) && (inheritable_setting.to_hash == e.inheritable_setting.to_hash)
234
+ def equals?(endpoint)
235
+ (options == endpoint.options) && (inheritable_setting.to_hash == endpoint.inheritable_setting.to_hash)
236
236
  end
237
237
 
238
238
  protected
@@ -4,7 +4,7 @@ module Grape
4
4
  module Exceptions
5
5
  class ValidationErrors < Grape::Exceptions::Base
6
6
  ERRORS_FORMAT_KEY = 'grape.errors.format'
7
- DEFAULT_ERRORS_FORMAT = '%{attributes} %{message}'
7
+ DEFAULT_ERRORS_FORMAT = '%<attributes>s %<message>s'
8
8
 
9
9
  include Enumerable
10
10
 
@@ -74,7 +74,7 @@ module Grape
74
74
  end
75
75
 
76
76
  def mime_types
77
- @mime_type ||= content_types.each_pair.with_object({}) do |(k, v), types_without_params|
77
+ @mime_types ||= content_types.each_pair.with_object({}) do |(k, v), types_without_params|
78
78
  types_without_params[v.split(';').first] = k
79
79
  end
80
80
  end
@@ -74,8 +74,8 @@ module Grape
74
74
  rack_response(status, headers, format_message(message, backtrace, original_exception))
75
75
  end
76
76
 
77
- def default_rescue_handler(e)
78
- error_response(message: e.message, backtrace: e.backtrace, original_exception: e)
77
+ def default_rescue_handler(exception)
78
+ error_response(message: exception.message, backtrace: exception.backtrace, original_exception: exception)
79
79
  end
80
80
 
81
81
  def rescue_handler_for_base_only_class(klass)
@@ -57,8 +57,8 @@ module Grape
57
57
  middlewares.last
58
58
  end
59
59
 
60
- def [](i)
61
- middlewares[i]
60
+ def [](index)
61
+ middlewares[index]
62
62
  end
63
63
 
64
64
  def insert(index, *args, &block)
@@ -21,6 +21,7 @@ module Grape
21
21
  private
22
22
 
23
23
  def do_each(params_to_process, parent_indicies = [], &block)
24
+ @scope.reset_index # gets updated depending on the size of params_to_process
24
25
  params_to_process.each_with_index do |resource_params, index|
25
26
  # when we get arrays of arrays it means that target element located inside array
26
27
  # we need this because we want to know parent arrays indicies
@@ -93,9 +93,7 @@ module Grape
93
93
 
94
94
  def meets_dependency?(params, request_params)
95
95
  return true unless @dependent_on
96
-
97
96
  return false if @parent.present? && !@parent.meets_dependency?(@parent.params(request_params), request_params)
98
-
99
97
  return params.any? { |param| meets_dependency?(param, request_params) } if params.is_a?(Array)
100
98
 
101
99
  meets_hash_dependency?(params)
@@ -103,7 +101,6 @@ module Grape
103
101
 
104
102
  def attr_meets_dependency?(params)
105
103
  return true unless @dependent_on
106
-
107
104
  return false if @parent.present? && !@parent.attr_meets_dependency?(params)
108
105
 
109
106
  meets_hash_dependency?(params)
@@ -169,6 +166,10 @@ module Grape
169
166
  !@optional
170
167
  end
171
168
 
169
+ def reset_index
170
+ @index = nil
171
+ end
172
+
172
173
  protected
173
174
 
174
175
  # Adds a parameter declaration to our list of validations.
@@ -189,7 +190,13 @@ module Grape
189
190
  #
190
191
  # @return [Array<Symbol>] the nesting/path of the current parameter scope
191
192
  def full_path
192
- nested? ? @parent.full_path + [@element] : []
193
+ if nested?
194
+ (@parent.full_path + [@element])
195
+ elsif lateral?
196
+ @parent.full_path
197
+ else
198
+ []
199
+ end
193
200
  end
194
201
 
195
202
  private
@@ -297,12 +304,7 @@ module Grape
297
304
  # `optional` invocation that opened this scope.
298
305
  # @yield parameter scope
299
306
  def new_group_scope(attrs, &block)
300
- self.class.new(
301
- api: @api,
302
- parent: self,
303
- group: attrs.first,
304
- &block
305
- )
307
+ self.class.new(api: @api, parent: self, group: attrs.first, &block)
306
308
  end
307
309
 
308
310
  # Pushes declared params to parent or settings
@@ -7,7 +7,7 @@ module Grape
7
7
  def validate_params!(params)
8
8
  keys = keys_in_common(params)
9
9
  return if keys.length == 1
10
- raise Grape::Exceptions::Validation.new(params: all_keys, message: message(:exactly_one)) if keys.length.zero?
10
+ raise Grape::Exceptions::Validation.new(params: all_keys, message: message(:exactly_one)) if keys.empty?
11
11
 
12
12
  raise Grape::Exceptions::Validation.new(params: keys, message: message(:mutual_exclusion))
13
13
  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 = '2.1.1'
5
+ VERSION = '2.1.3'
6
6
  end
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: 2.1.1
4
+ version: 2.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-22 00:00:00.000000000 Z
11
+ date: 2024-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -189,7 +189,6 @@ files:
189
189
  - lib/grape/serve_stream/sendfile_response.rb
190
190
  - lib/grape/serve_stream/stream_response.rb
191
191
  - lib/grape/types/invalid_value.rb
192
- - lib/grape/util/accept/header.rb
193
192
  - lib/grape/util/accept_header_handler.rb
194
193
  - lib/grape/util/base_inheritable.rb
195
194
  - lib/grape/util/cache.rb
@@ -252,9 +251,9 @@ licenses:
252
251
  - MIT
253
252
  metadata:
254
253
  bug_tracker_uri: https://github.com/ruby-grape/grape/issues
255
- changelog_uri: https://github.com/ruby-grape/grape/blob/v2.1.1/CHANGELOG.md
256
- documentation_uri: https://www.rubydoc.info/gems/grape/2.1.1
257
- source_code_uri: https://github.com/ruby-grape/grape/tree/v2.1.1
254
+ changelog_uri: https://github.com/ruby-grape/grape/blob/v2.1.3/CHANGELOG.md
255
+ documentation_uri: https://www.rubydoc.info/gems/grape/2.1.3
256
+ source_code_uri: https://github.com/ruby-grape/grape/tree/v2.1.3
258
257
  post_install_message:
259
258
  rdoc_options: []
260
259
  require_paths:
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Grape
4
- module Util
5
- module Accept
6
- module Header
7
- ALLOWED_CHARACTERS = %r{^([a-z*]+)/([a-z0-9*&\^\-_#{$ERROR_INFO}.+]+)(?:;([a-z0-9=;]+))?$}.freeze
8
- class << self
9
- # Corrected version of https://github.com/mjackson/rack-accept/blob/master/lib/rack/accept/header.rb#L40-L44
10
- def parse_media_type(media_type)
11
- # see http://tools.ietf.org/html/rfc6838#section-4.2 for allowed characters in media type names
12
- m = media_type&.match(ALLOWED_CHARACTERS)
13
- m ? [m[1], m[2], m[3] || ''] : []
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end