dependabot-bundler 0.389.0 → 0.391.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b27c0ca95e53100edd2104766511302c6559cc4ebb099e304f2198337d940ab7
4
- data.tar.gz: bada129a0da00144bdd4f600ce5dee62a90ef73943cfb7b75e4f55f0c94d28f7
3
+ metadata.gz: 672d87cda96727e07addcdfc985c06c305ba63f344405f55ff4b10dd36562096
4
+ data.tar.gz: 6a19d0836c030bc9aaa9b27a4b1761fe11bb27e0afc8ecc6b1d1ae001872a892
5
5
  SHA512:
6
- metadata.gz: 88f3032fe0d5aa2a747208d0dfcbeac1a57cdfa9eec18d193d17ac50a586cafdcb64dd15d42e24a8350c833747094561381f4dfb7c540a5a77a5ded124829334
7
- data.tar.gz: 232bd45a635a8ad61404d957776977d25a1cf342fbe42025eeb14b629f0ff694ffd3a08bf47c059cb4a6e2ac60588d3261271c5af888076b92a9a22ba7229d3d
6
+ metadata.gz: 3ba582280818476c7829d113c8ce8d6658240d9295f497736621418c9d8d0e85b1aefa555ea4dbd2f6296149fe8f7e2b4527f176edf6d3bfeb3393f0bd94e90c
7
+ data.tar.gz: '08fc1b1c9f73c5649a53758f60a41a8139211f48fa81b371cce24666fd79ae6000e998c802808664ee8d54675047693c11bc15d544cbcd6598b43c75cd962d23'
@@ -104,7 +104,7 @@ module Dependabot
104
104
  sig { params(dependencies: T::Array[Dependabot::Dependency]).returns(T::Boolean) }
105
105
  def git_source?(dependencies)
106
106
  dependencies.any? do |dep|
107
- dep.requirements.any? { |req| req.fetch(:source)&.fetch(:type) == "git" }
107
+ dep.requirements.any? { |req| req.source_string("type") == "git" }
108
108
  end
109
109
  end
110
110
 
@@ -380,7 +380,7 @@ module Dependabot
380
380
  sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) }
381
381
  def production?(dependency)
382
382
  groups = dependency.requirements
383
- .flat_map { |r| r.fetch(:groups) }
383
+ .flat_map { |r| r.groups || [] }
384
384
  .map(&:to_s)
385
385
 
386
386
  return true if groups.empty?
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dependabot/bundler/file_updater"
@@ -56,18 +56,18 @@ module Dependabot
56
56
 
57
57
  updated_requirement =
58
58
  dependency.requirements
59
- .find { |r| r[:file] == file.name }
60
- &.fetch(:requirement)
59
+ .find { |r| r.file == file.name }
60
+ &.requirement_string
61
61
 
62
62
  previous_requirement =
63
63
  dependency.previous_requirements
64
- &.find { |r| r[:file] == file.name }
65
- &.fetch(:requirement)
64
+ &.find { |r| r.file == file.name }
65
+ &.requirement_string
66
66
 
67
67
  RequirementReplacer.new(
68
68
  dependency: dependency,
69
69
  file_type: :gemfile,
70
- updated_requirement: updated_requirement,
70
+ updated_requirement: T.must(updated_requirement),
71
71
  previous_requirement: previous_requirement
72
72
  ).rewrite(content)
73
73
  end
@@ -77,34 +77,34 @@ module Dependabot
77
77
  changed_requirements =
78
78
  dependency.requirements - T.must(dependency.previous_requirements)
79
79
 
80
- changed_requirements.any? { |f| f[:file] == file.name }
80
+ changed_requirements.any? { |f| f.file == file.name }
81
81
  end
82
82
 
83
83
  sig { params(dependency: Dependabot::Dependency).returns(T::Boolean) }
84
84
  def remove_git_source?(dependency)
85
85
  old_gemfile_req =
86
86
  dependency.previous_requirements
87
- &.find { |f| GEMFILE_FILENAMES.include?(f[:file]) }
87
+ &.find { |f| GEMFILE_FILENAMES.include?(f.file) }
88
88
 
89
- return false unless old_gemfile_req&.dig(:source, :type) == "git"
89
+ return false unless old_gemfile_req&.source_string("type") == "git"
90
90
 
91
91
  new_gemfile_req =
92
92
  dependency.requirements
93
- .find { |f| GEMFILE_FILENAMES.include?(f[:file]) }
93
+ .find { |f| GEMFILE_FILENAMES.include?(f.file) }
94
94
 
95
- T.must(new_gemfile_req)[:source].nil?
95
+ T.must(new_gemfile_req).source.nil?
96
96
  end
97
97
 
98
98
  sig { params(dependency: Dependabot::Dependency, file: Dependabot::DependencyFile).returns(T::Boolean) }
99
99
  def update_git_pin?(dependency, file)
100
100
  new_gemfile_req =
101
101
  dependency.requirements
102
- .find { |f| f[:file] == file.name }
103
- return false unless new_gemfile_req&.dig(:source, :type) == "git"
102
+ .find { |f| f.file == file.name }
103
+ return false unless new_gemfile_req&.source_string("type") == "git"
104
104
 
105
105
  # If the new requirement is a git dependency with a ref then there's
106
106
  # no harm in doing an update
107
- !T.must(new_gemfile_req).dig(:source, :ref).nil?
107
+ !T.must(new_gemfile_req).source_string("ref").nil?
108
108
  end
109
109
 
110
110
  sig { params(dependency: Dependabot::Dependency, content: String).returns(String) }
@@ -118,12 +118,11 @@ module Dependabot
118
118
  def update_gemfile_git_pin(dependency, file, content)
119
119
  new_pin =
120
120
  dependency.requirements
121
- .find { |f| f[:file] == file.name }
122
- &.fetch(:source)
123
- &.fetch(:ref)
121
+ .find { |f| f.file == file.name }
122
+ &.source_string("ref")
124
123
 
125
124
  GitPinReplacer
126
- .new(dependency: dependency, new_pin: new_pin)
125
+ .new(dependency: dependency, new_pin: T.must(new_pin))
127
126
  .rewrite(content)
128
127
  end
129
128
  end
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dependabot/bundler/file_updater"
@@ -13,8 +13,8 @@ module Dependabot
13
13
 
14
14
  sig { params(dependencies: T::Array[Dependabot::Dependency], gemspec: Dependabot::DependencyFile).void }
15
15
  def initialize(dependencies:, gemspec:)
16
- @dependencies = T.let(dependencies, T::Array[Dependabot::Dependency])
17
- @gemspec = T.let(gemspec, Dependabot::DependencyFile)
16
+ @dependencies = dependencies
17
+ @gemspec = gemspec
18
18
  end
19
19
 
20
20
  sig { returns(String) }
@@ -51,21 +51,21 @@ module Dependabot
51
51
  updated_requirement =
52
52
  T.must(
53
53
  dependency.requirements
54
- .find { |r| r[:file] == gemspec.name }
54
+ .find { |r| r.file == gemspec.name }
55
55
  )
56
- .fetch(:requirement)
56
+ .requirement_string
57
57
 
58
58
  previous_requirement =
59
59
  T.must(
60
60
  T.must(dependency.previous_requirements)
61
- .find { |r| r[:file] == gemspec.name }
61
+ .find { |r| r.file == gemspec.name }
62
62
  )
63
- .fetch(:requirement)
63
+ .requirement_string
64
64
 
65
65
  RequirementReplacer.new(
66
66
  dependency: dependency,
67
67
  file_type: :gemspec,
68
- updated_requirement: updated_requirement,
68
+ updated_requirement: T.must(updated_requirement),
69
69
  previous_requirement: previous_requirement
70
70
  ).rewrite(content)
71
71
  end
@@ -75,7 +75,7 @@ module Dependabot
75
75
  changed_requirements =
76
76
  dependency.requirements - T.must(dependency.previous_requirements)
77
77
 
78
- changed_requirements.any? { |f| f[:file] == file.name }
78
+ changed_requirements.any? { |f| f.file == file.name }
79
79
  end
80
80
  end
81
81
  end
@@ -20,8 +20,8 @@ module Dependabot
20
20
 
21
21
  sig { params(dependency: Dependabot::Dependency, new_pin: String).void }
22
22
  def initialize(dependency:, new_pin:)
23
- @dependency = T.let(dependency, Dependabot::Dependency)
24
- @new_pin = T.let(new_pin, String)
23
+ @dependency = dependency
24
+ @new_pin = new_pin
25
25
  end
26
26
 
27
27
  sig { params(content: String).returns(String) }
@@ -38,7 +38,7 @@ module Dependabot
38
38
  class Rewriter < Parser::TreeRewriter
39
39
  extend T::Sig
40
40
 
41
- PIN_KEYS = T.let(%i(ref tag).freeze, T::Array[Symbol])
41
+ PIN_KEYS = %i(ref tag).freeze
42
42
 
43
43
  sig { returns(Dependabot::Dependency) }
44
44
  attr_reader :dependency
@@ -49,8 +49,8 @@ module Dependabot
49
49
  sig { params(dependency: Dependabot::Dependency, new_pin: String).void }
50
50
  def initialize(dependency:, new_pin:)
51
51
  super()
52
- @dependency = T.let(dependency, Dependabot::Dependency)
53
- @new_pin = T.let(new_pin, String)
52
+ @dependency = dependency
53
+ @new_pin = new_pin
54
54
  end
55
55
 
56
56
  sig { params(node: Parser::AST::Node).void }
@@ -44,7 +44,7 @@ module Dependabot
44
44
 
45
45
  sig { params(dependency: Dependabot::Dependency).void }
46
46
  def initialize(dependency:)
47
- @dependency = T.let(dependency, Dependabot::Dependency)
47
+ @dependency = dependency
48
48
  end
49
49
 
50
50
  sig { params(node: Parser::AST::Node).void }
@@ -57,10 +57,10 @@ module Dependabot
57
57
  key_from_hash_pair(hash_pair)
58
58
  end
59
59
 
60
- if keys.none? { |key| GOOD_KEYS.include?(key) }
61
- remove_all_kwargs(node)
62
- else
60
+ if keys.intersect?(GOOD_KEYS)
63
61
  remove_git_related_kwargs(kwargs_node)
62
+ else
63
+ remove_all_kwargs(node)
64
64
  end
65
65
  end
66
66
 
@@ -29,9 +29,7 @@ module Dependabot
29
29
  # No `/m`: it would let the greedy `.*` in `entries` match newlines and
30
30
  # swallow the trailing `BUNDLED WITH` section. `^` is line-anchored anyway.
31
31
  CHECKSUMS_SECTION = /(^CHECKSUMS\n)(?<entries>(?:^ .*\n)+)/
32
- BUNDLED_WITH_VERSION_REGEX = /BUNDLED WITH\s+(?<version>\d+\.\d+\.\d+)/m
33
32
  BUNDLER_CHECKSUM_ENTRY_REGEX = /^ bundler \([^)]+\).*\n?$/
34
- MIN_BUNDLER_CHECKSUM_VERSION = Gem::Version.new("4.0.11")
35
33
 
36
34
  sig do
37
35
  params(
@@ -49,11 +47,11 @@ module Dependabot
49
47
  options:,
50
48
  repo_contents_path: nil
51
49
  )
52
- @dependencies = T.let(dependencies, T::Array[Dependabot::Dependency])
53
- @dependency_files = T.let(dependency_files, T::Array[Dependabot::DependencyFile])
54
- @repo_contents_path = T.let(repo_contents_path, T.nilable(String))
55
- @credentials = T.let(credentials, T::Array[Dependabot::Credential])
56
- @options = T.let(options, T::Hash[Symbol, T.untyped])
50
+ @dependencies = dependencies
51
+ @dependency_files = dependency_files
52
+ @repo_contents_path = repo_contents_path
53
+ @credentials = credentials
54
+ @options = options
57
55
  @updated_lockfile_content = T.let(nil, T.nilable(String))
58
56
  @gemfile = T.let(nil, T.nilable(Dependabot::DependencyFile))
59
57
  @lockfile = T.let(nil, T.nilable(Dependabot::DependencyFile))
@@ -250,14 +248,17 @@ module Dependabot
250
248
  lockfile_content = T.must(lockfile).content
251
249
  return false unless lockfile_content&.include?("CHECKSUMS\n")
252
250
 
251
+ # Strip a bundler self-checksum only when the original CHECKSUMS
252
+ # section did not contain one. If the original pins one,
253
+ # restore_bundler_checksum separately swaps a generated entry back to
254
+ # the original when present. Dependabot must not introduce a missing
255
+ # entry: the runner's regular-gem install can calculate a checksum that
256
+ # a default-gem install cannot (ruby/rubygems#9512), and its runtime
257
+ # bundler version need not match BUNDLED WITH because Dependabot does
258
+ # not manage that version. This can add unrelated or mismatched
259
+ # metadata and cause lockfile churn.
253
260
  checksums_section = lockfile_content.match(CHECKSUMS_SECTION)
254
- return false if checksums_section && T.must(checksums_section[:entries]).match?(BUNDLER_CHECKSUM_ENTRY_REGEX)
255
-
256
- bundled_with = lockfile_content.match(BUNDLED_WITH_VERSION_REGEX)&.[](:version)
257
- return false unless bundled_with
258
-
259
- bundled_with_version = Gem::Version.new(bundled_with)
260
- bundled_with_version >= Gem::Version.new("4.0.0") && bundled_with_version < MIN_BUNDLER_CHECKSUM_VERSION
261
+ !(checksums_section && T.must(checksums_section[:entries]).match?(BUNDLER_CHECKSUM_ENTRY_REGEX))
261
262
  end
262
263
 
263
264
  sig { params(lockfile_body: String).returns(String) }
@@ -117,7 +117,7 @@ module Dependabot
117
117
 
118
118
  # TODO: Ideally we wouldn't have to ignore all of these, but
119
119
  # implementing each one will be tricky.
120
- SKIPPED_TYPES = T.let(%i(send lvar dstr begin if case splat const or).freeze, T::Array[Symbol])
120
+ SKIPPED_TYPES = %i(send lvar dstr begin if case splat const or).freeze
121
121
 
122
122
  sig do
123
123
  params(
@@ -133,10 +133,10 @@ module Dependabot
133
133
  updated_requirement:,
134
134
  insert_if_bare:
135
135
  )
136
- @dependency = T.let(dependency, Dependabot::Dependency)
137
- @file_type = T.let(file_type, Symbol)
138
- @updated_requirement = T.let(updated_requirement, String)
139
- @insert_if_bare = T.let(insert_if_bare, T::Boolean)
136
+ @dependency = dependency
137
+ @file_type = file_type
138
+ @updated_requirement = updated_requirement
139
+ @insert_if_bare = insert_if_bare
140
140
 
141
141
  return if %i(gemfile gemspec).include?(file_type)
142
142
 
@@ -231,7 +231,7 @@ module Dependabot
231
231
  end
232
232
 
233
233
  ops = Gem::Requirement::OPS.keys
234
- return true if ops.none? { |op| req_string.include?(op) }
234
+ return true if ops.none? { |op| req_string.index(op) }
235
235
 
236
236
  req_string.include?(" ")
237
237
  end
@@ -11,19 +11,16 @@ module Dependabot
11
11
  class MetadataFinder < Dependabot::MetadataFinders::Base
12
12
  extend T::Sig
13
13
 
14
- SOURCE_KEYS = T.let(
15
- %w(
16
- source_code_uri
17
- homepage_uri
18
- wiki_uri
19
- bug_tracker_uri
20
- documentation_uri
21
- changelog_uri
22
- mailing_list_uri
23
- download_uri
24
- ).freeze,
25
- T::Array[String]
26
- )
14
+ SOURCE_KEYS = %w(
15
+ source_code_uri
16
+ homepage_uri
17
+ wiki_uri
18
+ bug_tracker_uri
19
+ documentation_uri
20
+ changelog_uri
21
+ mailing_list_uri
22
+ download_uri
23
+ ).freeze
27
24
 
28
25
  sig do
29
26
  params(
@@ -95,9 +92,9 @@ module Dependabot
95
92
 
96
93
  sig { returns(T.nilable(Dependabot::Source)) }
97
94
  def find_source_from_git_url
98
- info = dependency.requirements.filter_map { |r| r[:source] }.first
95
+ info = T.must(dependency.requirements.filter_map(&:source_hash).first)
99
96
 
100
- url = info[:url] || info.fetch("url")
97
+ url = T.cast(info[:url] || info.fetch("url"), T.nilable(String))
101
98
  Source.from_url(url)
102
99
  end
103
100
 
@@ -222,8 +219,8 @@ module Dependabot
222
219
  def registry_url
223
220
  return base_url if new_source_type == "default"
224
221
 
225
- info = dependency.requirements.filter_map { |r| r[:source] }.first
226
- info[:url] || info.fetch("url")
222
+ info = T.must(dependency.requirements.filter_map(&:source_hash).first)
223
+ T.cast(info[:url] || info.fetch("url"), String)
227
224
  end
228
225
 
229
226
  sig { returns(String) }
@@ -214,9 +214,9 @@ module Dependabot
214
214
  return nil unless dependency&.requirements&.any?
215
215
 
216
216
  first_requirement = dependency.requirements.first
217
- return nil unless first_requirement && first_requirement[:source]
217
+ return nil unless first_requirement
218
218
 
219
- url = T.let(first_requirement[:source][:url], T.nilable(String))
219
+ url = first_requirement.source_string("url")
220
220
  return nil unless url
221
221
 
222
222
  url.end_with?("/") ? url.chop : url
@@ -242,9 +242,9 @@ module Dependabot
242
242
  return nil unless dependency.requirements.any?
243
243
 
244
244
  first_requirement = dependency.requirements.first
245
- return nil unless first_requirement && first_requirement[:source]
245
+ return nil unless first_requirement
246
246
 
247
- first_requirement[:source][:type]
247
+ first_requirement.source_string("type")
248
248
  end
249
249
 
250
250
  sig { override.returns(String) }
@@ -11,11 +11,11 @@ module Dependabot
11
11
  class Requirement < Dependabot::Requirement
12
12
  extend T::Sig
13
13
 
14
- GEM_DEP_SPLIT = T.let(/\A(?<name>[a-zA-Z0-9_\-]+):(?<version>.+)\z/, Regexp)
14
+ GEM_DEP_SPLIT = /\A(?<name>[a-zA-Z0-9_\-]+):(?<version>.+)\z/
15
15
 
16
- sig { params(req: T::Hash[Symbol, String], version: Gem::Version).returns(T::Boolean) }
16
+ sig { params(req: Dependabot::DependencyRequirement, version: Gem::Version).returns(T::Boolean) }
17
17
  def self.satisfied_by?(req, version)
18
- new(req[:requirement]).satisfied_by?(version)
18
+ new(req.requirement_string).satisfied_by?(version)
19
19
  end
20
20
 
21
21
  # For consistency with other languages, we define a requirements array.
@@ -62,16 +62,16 @@ module Dependabot
62
62
  latest_allowable_version: nil,
63
63
  lock_ruby_version: true
64
64
  )
65
- @dependency_files = T.let(dependency_files, T::Array[Dependabot::DependencyFile])
66
- @dependency = T.let(dependency, Dependabot::Dependency)
67
- @remove_git_source = T.let(remove_git_source, T::Boolean)
68
- @unlock_requirement = T.let(unlock_requirement, T::Boolean)
69
- @replacement_git_pin = T.let(replacement_git_pin, T.nilable(String))
65
+ @dependency_files = dependency_files
66
+ @dependency = dependency
67
+ @remove_git_source = remove_git_source
68
+ @unlock_requirement = unlock_requirement
69
+ @replacement_git_pin = replacement_git_pin
70
70
  @latest_allowable_version = T.let(
71
71
  latest_allowable_version&.to_s,
72
72
  T.nilable(String)
73
73
  )
74
- @lock_ruby_version = T.let(lock_ruby_version, T::Boolean)
74
+ @lock_ruby_version = lock_ruby_version
75
75
  end
76
76
 
77
77
  # rubocop:disable Metrics/AbcSize
@@ -273,20 +273,20 @@ module Dependabot
273
273
  sig { params(filename: String).returns(String) }
274
274
  def updated_version_req_lower_bound(filename) # rubocop:disable Metrics/CyclomaticComplexity
275
275
  original_req = dependency.requirements
276
- .find { |r| r.fetch(:file) == filename }
277
- &.fetch(:requirement)
276
+ .find { |r| r.file == filename }
277
+ &.requirement_string
278
278
 
279
279
  if original_req && !unlock_requirement? then original_req
280
280
  elsif dependency.version&.match?(/^[0-9a-f]{40}$/) then ">= 0"
281
281
  elsif dependency.version then ">= #{dependency.version}"
282
282
  else
283
283
  version_for_requirement =
284
- dependency.requirements.map { |r| r[:requirement] }
285
- .reject { |req_string| req_string.start_with?("<") }
286
- .select { |req_string| req_string.match?(VERSION_REGEX) }
287
- .map { |req_string| req_string.match(VERSION_REGEX)&.to_s }
288
- .select { |version| Bundler::Version.correct?(version) }
289
- .max_by { |version| Bundler::Version.new(version) }
284
+ dependency.requirements.filter_map(&:requirement_string)
285
+ .reject { |req_string| req_string.start_with?("<") }
286
+ .select { |req_string| req_string.match?(VERSION_REGEX) }
287
+ .map { |req_string| req_string.match(VERSION_REGEX)&.to_s }
288
+ .select { |version| Bundler::Version.correct?(version) }
289
+ .max_by { |version| Bundler::Version.new(version) }
290
290
 
291
291
  ">= #{version_for_requirement || 0}"
292
292
  end
@@ -94,7 +94,7 @@ module Dependabot
94
94
  # rubocop:disable Metrics/AbcSize
95
95
  sig { returns(T::Array[Dependabot::Dependency]) }
96
96
  def force_update
97
- requirement = dependency.requirements.find { |req| req[:file] == T.must(gemfile).name }
97
+ requirement = dependency.requirements.find { |req| req.file == T.must(gemfile).name }
98
98
 
99
99
  valid_gem_version?(target_version)
100
100
 
@@ -192,11 +192,11 @@ module Dependabot
192
192
  )
193
193
  end
194
194
 
195
- sig { params(dependency: Dependabot::Dependency).returns(T.nilable(T::Hash[Symbol, T.untyped])) }
195
+ sig { params(dependency: Dependabot::Dependency).returns(T.nilable(Dependabot::DependencyRequirement::ObjectHash)) }
196
196
  def source_for(dependency)
197
197
  dependency.requirements
198
- .find { |r| r.fetch(:source) }
199
- &.fetch(:source)
198
+ .find(&:source)
199
+ &.source_hash
200
200
  end
201
201
 
202
202
  sig { returns(T.nilable(Dependabot::DependencyFile)) }
@@ -85,8 +85,10 @@ module Dependabot
85
85
  return unless git?
86
86
 
87
87
  source_details =
88
- dependency.requirements.map { |r| r.fetch(:source) }
89
- .uniq.compact.first
88
+ T.must(
89
+ dependency.requirements.map(&:source_hash)
90
+ .uniq.compact.first
91
+ )
90
92
 
91
93
  SharedHelpers.with_git_configured(credentials: credentials) do
92
94
  in_a_native_bundler_context do |tmp_dir|
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "excon"
@@ -128,7 +128,7 @@ module Dependabot
128
128
  begin
129
129
  current_version = dependency.numeric_version
130
130
  current_version&.prerelease? || dependency.requirements.any? do |req|
131
- req[:requirement].match?(/[a-z]/i)
131
+ T.must(req.requirement_string).match?(/[a-z]/i)
132
132
  end
133
133
  end,
134
134
  T.nilable(T::Boolean)
@@ -28,7 +28,7 @@ module Dependabot
28
28
  params(
29
29
  requirements: T::Array[Dependabot::DependencyRequirement],
30
30
  update_strategy: Dependabot::RequirementsUpdateStrategy,
31
- updated_source: T.nilable(T::Hash[Symbol, T.untyped]),
31
+ updated_source: T.nilable(Dependabot::DependencyRequirement::ObjectHash),
32
32
  latest_version: T.nilable(String),
33
33
  latest_resolvable_version: T.nilable(String)
34
34
  ).void
@@ -66,7 +66,7 @@ module Dependabot
66
66
  return requirements if update_strategy.lockfile_only?
67
67
 
68
68
  requirements.map do |req|
69
- if req[:file].include?(".gemspec")
69
+ if T.must(req.file).include?(".gemspec")
70
70
  update_gemspec_requirement(req)
71
71
  else
72
72
  # If a requirement doesn't come from a gemspec, it must be from
@@ -81,7 +81,7 @@ module Dependabot
81
81
  sig { returns(T::Array[Dependabot::DependencyRequirement]) }
82
82
  attr_reader :requirements
83
83
 
84
- sig { returns(T.nilable(T::Hash[Symbol, T.untyped])) }
84
+ sig { returns(T.nilable(Dependabot::DependencyRequirement::ObjectHash)) }
85
85
  attr_reader :updated_source
86
86
 
87
87
  sig { returns(T.nilable(Dependabot::Bundler::Version)) }
@@ -124,13 +124,14 @@ module Dependabot
124
124
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
125
125
  def update_version_requirement(req)
126
126
  requirements =
127
- req[:requirement].split(",").map { |r| Gem::Requirement.new(r) }
127
+ T.must(req.requirement_string).split(",").map { |r| Gem::Requirement.new(r) }
128
128
 
129
129
  new_requirement =
130
- if requirements.any?(&:exact?) then latest_resolvable_version.to_s
130
+ if requirements.any?(&:exact?)
131
+ latest_resolvable_version.to_s
131
132
  elsif requirements.any? { |r| r.to_s.start_with?("~>") }
132
133
  tw_req = requirements.find { |r| r.to_s.start_with?("~>") }
133
- update_twiddle_version(tw_req, T.must(latest_resolvable_version)).to_s
134
+ update_twiddle_version(T.must(tw_req), T.must(latest_resolvable_version)).to_s
134
135
  else
135
136
  update_gemfile_range(requirements).join(", ")
136
137
  end
@@ -185,21 +186,22 @@ module Dependabot
185
186
  # rubocop:disable Metrics/PerceivedComplexity
186
187
  sig { params(req: Dependabot::DependencyRequirement).returns(Dependabot::DependencyRequirement) }
187
188
  def update_gemspec_requirement(req)
188
- req = Dependabot::DependencyRequirement.create(req.merge(source: updated_source)) if req.fetch(:source)
189
+ req = Dependabot::DependencyRequirement.create(req.merge(source: updated_source)) if req.source
189
190
  return req unless latest_version && latest_resolvable_version
190
191
 
191
192
  requirements =
192
- req[:requirement].split(",").map { |r| Gem::Requirement.new(r) }
193
+ T.must(req.requirement_string).split(",").map { |r| Gem::Requirement.new(r) }
194
+ groups = T.must(req.groups).map(&:to_s)
193
195
 
194
196
  return req if requirements.all? do |r|
195
- requirement_satisfied?(r, req[:groups])
197
+ requirement_satisfied?(r, groups)
196
198
  end
197
199
 
198
200
  updated_requirements =
199
201
  requirements.flat_map do |r|
200
- next r if requirement_satisfied?(r, req[:groups])
202
+ next r if requirement_satisfied?(r, groups)
201
203
 
202
- if req[:groups] == ["development"] then bumped_requirements(r)
204
+ if groups == ["development"] then bumped_requirements(r)
203
205
  else
204
206
  widened_requirements(r)
205
207
  end
@@ -102,7 +102,7 @@ module Dependabot
102
102
 
103
103
  dependency.specific_requirements
104
104
  .all? do |req|
105
- file = T.must(dependency_files.find { |f| f.name == req.fetch(:file) })
105
+ file = T.must(dependency_files.find { |f| f.name == req.file })
106
106
  updated = FileUpdater::RequirementReplacer.new(
107
107
  dependency: dependency,
108
108
  file_type: file.name.end_with?("gemspec") ? :gemspec : :gemfile,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.389.0
4
+ version: 0.391.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.389.0
18
+ version: 0.391.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.389.0
25
+ version: 0.391.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: parallel
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -354,7 +354,7 @@ licenses:
354
354
  - MIT
355
355
  metadata:
356
356
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
357
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.389.0
357
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.391.0
358
358
  rdoc_options: []
359
359
  require_paths:
360
360
  - lib