Skip to content

Commit abfcbb6

Browse files
ericproulxclaude
andcommitted
Update RuboCop to 1.86.0 and autocorrect offenses
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0d6fde4 commit abfcbb6

File tree

14 files changed

+117
-109
lines changed

14 files changed

+117
-109
lines changed

.rubocop.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ AllCops:
55
Exclude:
66
- vendor/**/*
77
- bin/**/*
8+
- benchmark/**/*
89

910
plugins:
1011
- rubocop-performance

.rubocop_todo.yml

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2026-01-31 18:13:50 UTC using RuboCop version 1.84.0.
3+
# on 2026-04-08 20:39:39 UTC using RuboCop version 1.86.0.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
@@ -59,7 +59,7 @@ RSpec/IndexedLet:
5959
- 'spec/grape/presenters/presenter_spec.rb'
6060
- 'spec/shared/versioning_examples.rb'
6161

62-
# Offense count: 40
62+
# Offense count: 41
6363
# Configuration parameters: AssignmentOnly.
6464
RSpec/InstanceVariable:
6565
Exclude:
@@ -84,19 +84,16 @@ RSpec/MissingExampleGroupArgument:
8484
Exclude:
8585
- 'spec/grape/middleware/exception_spec.rb'
8686

87-
# Offense count: 12
87+
# Offense count: 6
8888
RSpec/RepeatedDescription:
8989
Exclude:
9090
- 'spec/grape/api_spec.rb'
9191
- 'spec/grape/endpoint_spec.rb'
92-
- 'spec/grape/validations/validators/allow_blank_validator_spec.rb'
93-
- 'spec/grape/validations/validators/values_validator_spec.rb'
9492

95-
# Offense count: 6
93+
# Offense count: 2
9694
RSpec/RepeatedExample:
9795
Exclude:
9896
- 'spec/grape/middleware/versioner/accept_version_header_spec.rb'
99-
- 'spec/grape/validations/validators/allow_blank_validator_spec.rb'
10097

10198
# Offense count: 8
10299
RSpec/RepeatedExampleGroupDescription:
@@ -144,15 +141,14 @@ Style/CombinableLoops:
144141
Exclude:
145142
- 'spec/grape/endpoint_spec.rb'
146143

147-
# Offense count: 10
144+
# Offense count: 9
148145
# Configuration parameters: AllowedMethods.
149146
# AllowedMethods: respond_to_missing?
150147
Style/OptionalBooleanParameter:
151148
Exclude:
152149
- 'lib/grape/dsl/parameters.rb'
153150
- 'lib/grape/endpoint.rb'
154151
- 'lib/grape/serve_stream/sendfile_response.rb'
155-
- 'lib/grape/validations/params_scope.rb'
156152
- 'lib/grape/validations/types/array_coercer.rb'
157153
- 'lib/grape/validations/types/custom_type_collection_coercer.rb'
158154
- 'lib/grape/validations/types/dry_type_coercer.rb'

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#### Fixes
88

9+
* [#2678](https://github.com/ruby-grape/grape/pull/2678): Update rubocop to 1.86.0 and autocorrect offenses - [@ericproulx](https://github.com/ericproulx).
910
* Your contribution here.
1011

1112
### 3.2.0 (2026-04-08)

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ group :development, :test do
88
gem 'builder', require: false
99
gem 'bundler'
1010
gem 'rake'
11-
gem 'rubocop', '1.84.0', require: false
11+
gem 'rubocop', '1.86.0', require: false
1212
gem 'rubocop-performance', '1.26.1', require: false
1313
gem 'rubocop-rspec', '3.9.0', require: false
1414
end

lib/grape/request.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ class Request < Rack::Request
132132
X-UA-Compatible
133133
X-WebKit-CS
134134
X-XSS-Protection
135-
].each_with_object({}) do |header, response|
136-
response["HTTP_#{header.upcase.tr('-', '_')}"] = header
135+
].to_h do |header|
136+
["HTTP_#{header.upcase.tr('-', '_')}", header]
137137
end.freeze
138138

139139
alias rack_params params

lib/grape/util/stackable_values.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ def []=(name, value)
1919
end
2020

2121
def to_hash
22-
keys.each_with_object({}) do |key, result|
23-
result[key] = self[key]
22+
keys.to_h do |key|
23+
[key, self[key]]
2424
end
2525
end
2626

lib/grape/validations/params_documentation.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module ParamsDocumentation
99
def document_params(attrs, validations, type = nil, values = nil, except_values = nil)
1010
return validations.except!(:desc, :description, :documentation) if @api.inheritable_setting.namespace_inheritable[:do_not_document]
1111

12-
documented_attrs = attrs.each_with_object({}) do |name, memo|
13-
memo[full_name(name)] = extract_details(validations, type, values, except_values)
12+
documented_attrs = attrs.to_h do |name|
13+
[full_name(name), extract_details(validations, type, values, except_values)]
1414
end
1515
@api.inheritable_setting.namespace_stackable[:params] = documented_attrs
1616
end

lib/grape/validations/params_scope.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ def configure_declared_params
317317
push_renamed_param(full_path, @element_renamed) if @element_renamed
318318

319319
if nested?
320-
@parent.push_declared_params [@element => @declared_params]
320+
@parent.push_declared_params [{ @element => @declared_params }]
321321
else
322322
@api.inheritable_setting.namespace_stackable[:declared_params] = @declared_params
323323
end

spec/grape/api_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
dummy_presenter_klass = Class.new
120120
represent_object = Class.new
121121
subject.represent represent_object, with: dummy_presenter_klass
122-
expect(subject.inheritable_setting.namespace_stackable[:representations]).to eq([represent_object => dummy_presenter_klass])
122+
expect(subject.inheritable_setting.namespace_stackable[:representations]).to eq([{ represent_object => dummy_presenter_klass }])
123123
end
124124
end
125125

spec/grape/dsl/desc_spec.rb

Lines changed: 68 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -19,68 +19,76 @@
1919
expect(subject.route_setting(:description)).to eq(options.merge(description: desc_text))
2020
end
2121

22-
it 'can be set with a block' do
23-
expected_options = {
24-
summary: 'summary',
25-
description: 'The description',
26-
detail: 'more details',
27-
params: { first: :param },
28-
entity: Object,
29-
default: { code: 400, message: 'Invalid' },
30-
http_codes: [[401, 'Unauthorized', 'Entities::Error']],
31-
named: 'My named route',
32-
body_name: 'My body name',
33-
headers: [
34-
XAuthToken: {
35-
description: 'Valdates your identity',
36-
required: true
37-
},
38-
XOptionalHeader: {
39-
description: 'Not really needed',
40-
required: false
41-
}
42-
],
43-
hidden: false,
44-
deprecated: false,
45-
is_array: true,
46-
nickname: 'nickname',
47-
produces: %w[array of mime_types],
48-
consumes: %w[array of mime_types],
49-
tags: %w[tag1 tag2],
50-
security: %w[array of security schemes]
51-
}
52-
53-
subject.desc 'The description' do
54-
summary 'summary'
55-
detail 'more details'
56-
params(first: :param)
57-
success Object
58-
default code: 400, message: 'Invalid'
59-
failure [[401, 'Unauthorized', 'Entities::Error']]
60-
named 'My named route'
61-
body_name 'My body name'
62-
headers [
63-
XAuthToken: {
64-
description: 'Valdates your identity',
65-
required: true
66-
},
67-
XOptionalHeader: {
68-
description: 'Not really needed',
69-
required: false
70-
}
71-
]
72-
hidden false
73-
deprecated false
74-
is_array true
75-
nickname 'nickname'
76-
produces %w[array of mime_types]
77-
consumes %w[array of mime_types]
78-
tags %w[tag1 tag2]
79-
security %w[array of security schemes]
22+
context 'when a block is passed' do
23+
let(:expected_options) do
24+
{
25+
summary: 'summary',
26+
description: 'The description',
27+
detail: 'more details',
28+
params: { first: :param },
29+
entity: Object,
30+
default: { code: 400, message: 'Invalid' },
31+
http_codes: [[401, 'Unauthorized', 'Entities::Error']],
32+
named: 'My named route',
33+
body_name: 'My body name',
34+
headers: [
35+
{
36+
XAuthToken: {
37+
description: 'Valdates your identity',
38+
required: true
39+
},
40+
XOptionalHeader: {
41+
description: 'Not really needed',
42+
required: false
43+
}
44+
}
45+
],
46+
hidden: false,
47+
deprecated: false,
48+
is_array: true,
49+
nickname: 'nickname',
50+
produces: %w[array of mime_types],
51+
consumes: %w[array of mime_types],
52+
tags: %w[tag1 tag2],
53+
security: %w[array of security schemes]
54+
}
8055
end
8156

82-
expect(subject.namespace_setting(:description)).to eq(expected_options)
83-
expect(subject.route_setting(:description)).to eq(expected_options)
57+
it 'can be set with a block' do
58+
subject.desc 'The description' do
59+
summary 'summary'
60+
detail 'more details'
61+
params(first: :param)
62+
success Object
63+
default code: 400, message: 'Invalid'
64+
failure [[401, 'Unauthorized', 'Entities::Error']]
65+
named 'My named route'
66+
body_name 'My body name'
67+
headers [
68+
{
69+
XAuthToken: {
70+
description: 'Valdates your identity',
71+
required: true
72+
},
73+
XOptionalHeader: {
74+
description: 'Not really needed',
75+
required: false
76+
}
77+
}
78+
]
79+
hidden false
80+
deprecated false
81+
is_array true
82+
nickname 'nickname'
83+
produces %w[array of mime_types]
84+
consumes %w[array of mime_types]
85+
tags %w[tag1 tag2]
86+
security %w[array of security schemes]
87+
end
88+
89+
expect(subject.namespace_setting(:description)).to eq(expected_options)
90+
expect(subject.route_setting(:description)).to eq(expected_options)
91+
end
8492
end
8593
end
8694
end

0 commit comments

Comments
 (0)