class Dependabot::Elm::UpdateChecker

Public Instance Methods

can_update?(requirements_to_unlock:) click to toggle source

Overwrite the base class to allow multi-dependency update PRs for dependencies for which we don't have a version.

# File lib/dependabot/elm/update_checker.rb, line 21
def can_update?(requirements_to_unlock:)
  if dependency.appears_in_lockfile?
    version_can_update?(requirements_to_unlock: requirements_to_unlock)
  elsif requirements_to_unlock == :none
    false
  elsif requirements_to_unlock == :own
    requirements_can_update?
  elsif requirements_to_unlock == :all
    updated_dependencies_after_full_unlock.any?
  end
end
latest_resolvable_version() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 33
def latest_resolvable_version
  @latest_resolvable_version ||=
    version_resolver.
    latest_resolvable_version(unlock_requirement: :own)
end
latest_resolvable_version_with_no_unlock() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 39
def latest_resolvable_version_with_no_unlock
  # Irrelevant, since Elm has a single dependency file (well, there's
  # also `exact-dependencies.json`, but it's not recommended that that
  # is committed).
  nil
end
latest_version() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 15
def latest_version
  @latest_version ||= candidate_versions.max
end
updated_requirements() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 46
def updated_requirements
  RequirementsUpdater.new(
    requirements: dependency.requirements,
    latest_resolvable_version: latest_resolvable_version
  ).updated_requirements
end

Private Instance Methods

all_versions() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 96
def all_versions
  return @all_versions if @version_lookup_attempted

  @version_lookup_attempted = true

  response = Excon.get(
    "https://package.elm-lang.org/packages/#{dependency.name}/"\
    "releases.json",
    idempotent: true,
    **Dependabot::SharedHelpers.excon_defaults
  )

  return @all_versions = [] unless response.status == 200

  @all_versions =
    JSON.parse(response.body).
    keys.
    map { |v| version_class.new(v) }.
    sort
end
candidate_versions() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 78
def candidate_versions
  filtered = all_versions.
             reject { |v| ignore_requirements.any? { |r| r.satisfied_by?(v) } }

  if @raise_on_ignored && filter_lower_versions(filtered).empty? && filter_lower_versions(all_versions).any?
    raise AllVersionsIgnored
  end

  filtered
end
filter_lower_versions(versions_array) click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 89
def filter_lower_versions(versions_array)
  return versions_array unless dependency.version && version_class.correct?(dependency.version)

  versions_array.
    select { |version| version > version_class.new(dependency.version) }
end
latest_version_resolvable_with_full_unlock?() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 73
def latest_version_resolvable_with_full_unlock?
  latest_version == version_resolver.
                    latest_resolvable_version(unlock_requirement: :all)
end
requirements_up_to_date?() click to toggle source

Overwrite the base class's requirements_up_to_date? method to instead check whether the latest version is allowed

# File lib/dependabot/elm/update_checker.rb, line 119
def requirements_up_to_date?
  return false unless latest_version

  dependency.requirements.
    map { |r| r.fetch(:requirement) }.
    map { |r| requirement_class.new(r) }.
    all? { |r| r.satisfied_by?(latest_version) }
end
updated_dependencies_after_full_unlock() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 69
def updated_dependencies_after_full_unlock
  version_resolver.updated_dependencies_after_full_unlock
end
version_resolver() click to toggle source
# File lib/dependabot/elm/update_checker.rb, line 55
def version_resolver
  @version_resolver ||=
    begin
      unless dependency.requirements.any? { |r| r.fetch(:file) == "elm.json" }
        raise Dependabot::DependencyFileNotResolvable, "No elm.json found"
      end

      Elm19VersionResolver.new(
        dependency: dependency,
        dependency_files: dependency_files
      )
    end
end