Skip to content

Commit c20a3fb

Browse files
dependabot[bot]ledermannclaude
authored
Bump rubocop from 1.84.2 to 1.85.0 in the rubocop group (#782)
* Bump rubocop from 1.84.2 to 1.85.0 in the rubocop group Bumps the rubocop group with 1 update: [rubocop](https://github.com/rubocop/rubocop). Updates `rubocop` from 1.84.2 to 1.85.0 - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](rubocop/rubocop@v1.84.2...v1.85.0) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.85.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: rubocop ... Signed-off-by: dependabot[bot] <support@github.com> * Fix new RuboCop offenses after rubocop 1.85.0 upgrade - Disable Style/OneClassPerFile for intentional ActiveSupport monkey-patches in blank.rb - Remove redundant keyword_init: true from Struct.new (Style/RedundantStructKeywordInit) - Use keyword argument forwarding (**) in Config#initialize and Config.from_env - Replace hash.merge() calls with direct keyword arguments (Style/KeywordArgumentsMerging) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Georg Ledermann <georg@ledermann.dev> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c71c4f0 commit c20a3fb

File tree

4 files changed

+41
-48
lines changed

4 files changed

+41
-48
lines changed

Gemfile.lock

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ GEM
5252
csv
5353
io-console (0.8.2)
5454
json (2.18.1)
55+
json-schema (6.1.0)
56+
addressable (~> 2.8)
57+
bigdecimal (>= 3.1, < 5)
5558
jwt (3.1.2)
5659
base64
5760
language_server-protocol (3.17.0.5)
@@ -62,6 +65,8 @@ GEM
6265
rb-inotify (~> 0.9, >= 0.9.10)
6366
logger (1.7.0)
6467
lumberjack (1.4.2)
68+
mcp (0.7.1)
69+
json-schema (>= 4.1)
6570
method_source (1.1.0)
6671
multi_xml (0.8.1)
6772
bigdecimal (>= 3.1, < 5)
@@ -116,10 +121,11 @@ GEM
116121
diff-lcs (>= 1.2.0, < 2.0)
117122
rspec-support (~> 3.13.0)
118123
rspec-support (3.13.7)
119-
rubocop (1.84.2)
124+
rubocop (1.85.0)
120125
json (~> 2.3)
121126
language_server-protocol (~> 3.17.0.2)
122127
lint_roller (~> 1.1.0)
128+
mcp (~> 0.6)
123129
parallel (~> 1.10)
124130
parser (>= 3.3.0.2)
125131
rainbow (>= 2.2.2, < 4.0)

lib/blank.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# To not depend on ActiveSupport, we copy the following methods from ActiveSupport:
22
# https://github.com/rails/rails/blob/v7.1.3/activesupport/lib/active_support/core_ext/object/blank.rb
33

4+
# rubocop:disable Style/OneClassPerFile
45
class Object
56
def blank?
67
respond_to?(:empty?) ? !!empty? : !self
@@ -22,3 +23,4 @@ def blank?
2223
empty? || BLANK_RE.match?(self)
2324
end
2425
end
26+
# rubocop:enable Style/OneClassPerFile

lib/config.rb

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
}.freeze
3737

3838
Config =
39-
Struct.new(*KEYS, keyword_init: true) do
40-
def initialize(*options)
39+
Struct.new(*KEYS) do
40+
def initialize(**)
4141
super
4242

4343
set_types
@@ -197,11 +197,8 @@ def validate_url!(url)
197197
(uri.is_a?(URI::HTTP) && uri.host.present?) || throw("URL is invalid: #{url}")
198198
end
199199

200-
def self.from_env(options = {})
201-
new(
202-
KEYS.to_h do |key|
203-
[key, ENV.fetch(key.to_s.upcase, nil)]
204-
end.merge(options),
205-
)
200+
def self.from_env(**)
201+
env_options = KEYS.to_h { |key| [key, ENV.fetch(key.to_s.upcase, nil)] }
202+
new(**env_options, **)
206203
end
207204
end

spec/lib/config_spec.rb

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,58 +26,58 @@
2626

2727
describe '#initialize' do
2828
it 'raises an error for empty options' do
29-
expect { described_class.new({}) }.to raise_error(Exception)
29+
expect { described_class.new }.to raise_error(Exception)
3030
end
3131

3232
it 'raises an error for invalid INFLUX_SCHEMA' do
3333
expect do
34-
described_class.new(valid_local_options.merge(influx_schema: 'foo'))
34+
described_class.new(**valid_local_options, influx_schema: 'foo')
3535
end.to raise_error(Exception, /URL is invalid/)
3636
end
3737

3838
it 'raises an error for missing INFLUX_HOST' do
3939
expect do
40-
described_class.new(valid_local_options.merge(influx_host: nil))
40+
described_class.new(**valid_local_options, influx_host: nil)
4141
end.to raise_error(Exception, /INFLUX_HOST is missing/)
4242
end
4343

4444
it 'raises an error for missing INFLUX_ORG' do
4545
expect do
46-
described_class.new(valid_local_options.merge(influx_org: nil))
46+
described_class.new(**valid_local_options, influx_org: nil)
4747
end.to raise_error(Exception, /INFLUX_ORG is missing/)
4848
end
4949

5050
it 'raises an error for missing INFLUX_BUCKET' do
5151
expect do
52-
described_class.new(valid_local_options.merge(influx_bucket: nil))
52+
described_class.new(**valid_local_options, influx_bucket: nil)
5353
end.to raise_error(Exception, /INFLUX_BUCKET is missing/)
5454
end
5555

5656
it 'raises an error for missing INFLUX_TOKEN' do
5757
expect do
58-
described_class.new(valid_local_options.merge(influx_token: nil))
58+
described_class.new(**valid_local_options, influx_token: nil)
5959
end.to raise_error(Exception, /INFLUX_TOKEN is missing/)
6060
end
6161

6262
context 'when local' do
6363
it 'initializes with valid options' do
64-
expect { described_class.new(valid_local_options) }.not_to raise_error
64+
expect { described_class.new(**valid_local_options) }.not_to raise_error
6565
end
6666

6767
it 'raises an error for invalid SENEC_SCHEMA' do
6868
expect do
69-
described_class.new(valid_local_options.merge(senec_schema: 'httpss'))
69+
described_class.new(**valid_local_options, senec_schema: 'httpss')
7070
end.to raise_error(Exception, /URL is invalid/)
7171
end
7272

7373
it 'limits SENEC_INTERVAL for local adapter' do
74-
config = described_class.new(valid_local_options.merge(senec_adapter: :local, senec_interval: 1))
74+
config = described_class.new(**valid_local_options, senec_adapter: :local, senec_interval: 1)
7575

7676
expect(config.senec_interval).to eq(5)
7777
end
7878

7979
it 'limits SENEC_INTERVAL for cloud adapter' do
80-
config = described_class.new(valid_cloud_options.merge(senec_adapter: :cloud, senec_interval: 1))
80+
config = described_class.new(**valid_cloud_options, senec_adapter: :cloud, senec_interval: 1)
8181

8282
expect(config.senec_interval).to eq(60)
8383
end
@@ -86,33 +86,33 @@
8686
context 'when cloud' do
8787
it 'raises an error for missing SENEC_USERNAME' do
8888
expect do
89-
described_class.new(valid_cloud_options.merge(senec_username: nil))
89+
described_class.new(**valid_cloud_options, senec_username: nil)
9090
end.to raise_error(Exception, /SENEC_USERNAME is missing/)
9191
end
9292

9393
it 'raises an error for invalid SENEC_USERNAME' do
9494
expect do
95-
described_class.new(valid_cloud_options.merge(senec_username: 'foo'))
95+
described_class.new(**valid_cloud_options, senec_username: 'foo')
9696
end.to raise_error(Exception, /SENEC_USERNAME is invalid/)
9797
end
9898

9999
it 'raises an error for missing SENEC_PASSWORD' do
100100
expect do
101-
described_class.new(valid_cloud_options.merge(senec_password: nil))
101+
described_class.new(**valid_cloud_options, senec_password: nil)
102102
end.to raise_error(Exception, /SENEC_PASSWORD is missing/)
103103
end
104104

105105
it 'raises an error for invalid SENEC_TOTP_URI' do
106106
expect do
107-
described_class.new(valid_cloud_options.merge(senec_totp_uri: 'this is not a URI'))
107+
described_class.new(**valid_cloud_options, senec_totp_uri: 'this is not a URI')
108108
end.to raise_error(Exception, /SENEC_TOTP_URI is not a valid URI/)
109109

110110
expect do
111-
described_class.new(valid_cloud_options.merge(senec_totp_uri: 'ftp://example.com'))
111+
described_class.new(**valid_cloud_options, senec_totp_uri: 'ftp://example.com')
112112
end.to raise_error(Exception, %r{SENEC_TOTP_URI must start with otpauth://})
113113

114114
expect do
115-
described_class.new(valid_cloud_options.merge(senec_totp_uri: 'otpauth://totp/SENEC:mail%40example.com'))
115+
described_class.new(**valid_cloud_options, senec_totp_uri: 'otpauth://totp/SENEC:mail%40example.com')
116116
end.to raise_error(Exception, /SENEC_TOTP_URI must contain a secret parameter/)
117117
end
118118

@@ -125,9 +125,7 @@
125125
'&issuer=SENEC' \
126126
'&period=30'
127127

128-
config = described_class.new(
129-
valid_cloud_options.merge(senec_totp_uri:),
130-
)
128+
config = described_class.new(**valid_cloud_options, senec_totp_uri:)
131129

132130
expect(config.senec_totp_uri).to eq(senec_totp_uri)
133131
end
@@ -136,7 +134,7 @@
136134

137135
describe 'senec methods' do
138136
context 'when local' do
139-
subject(:config) { described_class.new(valid_local_options) }
137+
subject(:config) { described_class.new(**valid_local_options) }
140138

141139
it 'returns correct senec_adapter' do
142140
expect(config.senec_adapter).to eq(:local)
@@ -164,7 +162,7 @@
164162
end
165163

166164
context 'when cloud' do
167-
subject(:config) { described_class.new(valid_cloud_options) }
165+
subject(:config) { described_class.new(**valid_cloud_options) }
168166

169167
it 'returns correct senec_adapter' do
170168
expect(config.senec_adapter).to eq(:cloud)
@@ -188,9 +186,7 @@
188186

189187
context 'when senec_request_mode is minimal' do
190188
subject(:config) do
191-
described_class.new(
192-
valid_cloud_options.merge(senec_request_mode: 'minimal'),
193-
)
189+
described_class.new(**valid_cloud_options, senec_request_mode: 'minimal')
194190
end
195191

196192
it 'returns senec_request_mode as minimal' do
@@ -200,9 +196,7 @@
200196

201197
context 'when senec_request_mode is full' do
202198
subject(:config) do
203-
described_class.new(
204-
valid_cloud_options.merge(senec_request_mode: 'full'),
205-
)
199+
described_class.new(**valid_cloud_options, senec_request_mode: 'full')
206200
end
207201

208202
it 'returns senec_request_mode as full' do
@@ -213,9 +207,7 @@
213207

214208
context 'when ignoring single field' do
215209
subject(:config) do
216-
described_class.new(
217-
valid_cloud_options.merge(senec_ignore: 'wallbox_charge_power'),
218-
)
210+
described_class.new(**valid_cloud_options, senec_ignore: 'wallbox_charge_power')
219211
end
220212

221213
it 'returns senec_ignore with single element' do
@@ -225,9 +217,7 @@
225217

226218
context 'when ignoring multiple fields' do
227219
subject(:config) do
228-
described_class.new(
229-
valid_cloud_options.merge(senec_ignore: 'wallbox_charge_power,house_power'),
230-
)
220+
described_class.new(**valid_cloud_options, senec_ignore: 'wallbox_charge_power,house_power')
231221
end
232222

233223
it 'returns senec_ignore with multiple elements' do
@@ -236,7 +226,7 @@
236226
end
237227

238228
context 'when ignoring non-existing field' do
239-
subject(:config) { described_class.new(valid_cloud_options.merge(senec_ignore: 'foo')) }
229+
subject(:config) { described_class.new(**valid_cloud_options, senec_ignore: 'foo') }
240230

241231
it 'fails' do
242232
expect { config.senec_ignore }.to raise_error(Exception, /SENEC_IGNORE contains unknown field: foo/)
@@ -246,16 +236,14 @@
246236
context 'when senec_request_mode is invalid' do
247237
it 'fails with invalid value' do
248238
expect do
249-
described_class.new(
250-
valid_cloud_options.merge(senec_request_mode: 'invalid'),
251-
)
239+
described_class.new(**valid_cloud_options, senec_request_mode: 'invalid')
252240
end.to raise_error(Exception, /SENEC_REQUEST_MODE is invalid: invalid/)
253241
end
254242
end
255243

256244
context 'when senec_request_mode is nil' do
257245
subject(:config) do
258-
described_class.new(valid_cloud_options.merge(senec_request_mode: nil))
246+
described_class.new(**valid_cloud_options, senec_request_mode: nil)
259247
end
260248

261249
it 'returns default senec_request_mode as minimal' do
@@ -265,7 +253,7 @@
265253
end
266254

267255
describe 'influx methods' do
268-
subject(:config) { described_class.new(valid_local_options) }
256+
subject(:config) { described_class.new(**valid_local_options) }
269257

270258
it 'returns correct influx_host' do
271259
expect(config.influx_host).to eq('influx.example.com')

0 commit comments

Comments
 (0)