Class: Dependabot::Elm::UpdateChecker::Elm19LatestVersionFinder

Inherits:
Package::PackageLatestVersionFinder
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/elm/update_checker/latest_version_finder.rb

Overview

ELM19 version finder ######

Defined Under Namespace

Classes: UnrecoverableState

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, dependency_files:, ignored_versions: [], cooldown_options: nil) ⇒ Elm19LatestVersionFinder

Returns a new instance of Elm19LatestVersionFinder.



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/dependabot/elm/update_checker/latest_version_finder.rb', line 124

def initialize(dependency:, dependency_files:, ignored_versions: [], cooldown_options: nil)
  super(
    dependency: dependency,
    dependency_files: dependency_files,
    credentials: [],
    ignored_versions: ignored_versions,
    security_advisories: [],
    cooldown_options: cooldown_options
  )

   = T.let(nil, T.nilable(T::Hash[String, Dependabot::Elm::Version]))
  @original_dependency_details ||= T.let(nil, T.nilable(T::Array[Dependabot::Dependency]))
end

Instance Method Details

#latest_resolvable_version(unlock_requirement:) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/dependabot/elm/update_checker/latest_version_finder.rb', line 139

def latest_resolvable_version(unlock_requirement:)
  raise "Invalid unlock setting: #{unlock_requirement}" unless i(none own all).include?(unlock_requirement)

  # Elm has no lockfile, so we will never create an update PR if
  # unlock requirements are `none`. Just return the current version.
  return current_version if unlock_requirement == :none

  current = current_version
  # Run the solver first so errors (unsupported deps, invalid layouts) propagate
  resolved = fetch_latest_resolvable_version(unlock_requirement)
  return current unless resolved
  # If there is no current version (e.g., only a range in elm.json), treat any
  # successfully resolved version as the candidate update.
  return cap_at_max_allowed_version(resolved) unless current
  return current unless resolved > current

  # Cap the solver result at the highest non-ignored, non-cooldown version
  cap_at_max_allowed_version(resolved)
end

#updated_dependencies_after_full_unlockObject



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/dependabot/elm/update_checker/latest_version_finder.rb', line 160

def updated_dependencies_after_full_unlock
  changed_deps = 

  original_dependency_details.filter_map do |original_dep|
    new_version = changed_deps.fetch(original_dep.name, nil)
    next unless new_version

    old_reqs = original_dep.requirements.map do |req|
      requirement_class.new(req.requirement_string)
    end

    next if old_reqs.all? { |req| req.satisfied_by?(new_version) }

    new_requirements =
      RequirementsUpdater.new(
        requirements: original_dep.requirements,
        latest_resolvable_version: new_version.to_s
      ).updated_requirements

    Dependency.new(
      name: original_dep.name,
      version: new_version.to_s,
      requirements: new_requirements,
      previous_version: original_dep.version,
      previous_requirements: original_dep.requirements,
      package_manager: original_dep.package_manager
    )
  end
end