Class: Dependabot::Elm::UpdateChecker::Elm18VersionResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/dependabot/elm/update_checker/elm_18_version_resolver.rb

Defined Under Namespace

Classes: UnrecoverableState

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, dependency_files:, candidate_versions:) ⇒ Elm18VersionResolver

Returns a new instance of Elm18VersionResolver.



18
19
20
21
22
# File 'lib/dependabot/elm/update_checker/elm_18_version_resolver.rb', line 18

def initialize(dependency:, dependency_files:, candidate_versions:)
  @dependency = dependency
  @dependency_files = dependency_files
  @candidate_versions = candidate_versions
end

Instance Method Details

#latest_resolvable_version(unlock_requirement:) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/dependabot/elm/update_checker/elm_18_version_resolver.rb', line 24

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

  # 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

  # Otherwise, we gotta check a few conditions to see if bumping
  # wouldn't also bump other deps in elm-package.json
  candidate_versions.sort.reverse_each do |version|
    return version if can_update?(version, unlock_requirement)
  end

  # Fall back to returning the dependency's current version, which is
  # presumed to be resolvable
  current_version
end

#updated_dependencies_after_full_unlockObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/dependabot/elm/update_checker/elm_18_version_resolver.rb', line 44

def updated_dependencies_after_full_unlock
  version = latest_resolvable_version(unlock_requirement: :all)
  deps_after_install = (target_version: version)

  original_dependency_details.map do |original_dep|
    new_version = deps_after_install.fetch(original_dep.name)

    old_reqs = original_dep.requirements.map do |req|
      requirement_class.new(req[:requirement])
    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.compact
end