Class: Dependabot::Bundler::UpdateChecker

Inherits:
UpdateCheckers::Base
  • Object
show all
Defined in:
lib/dependabot/bundler/update_checker.rb,
lib/dependabot/bundler/update_checker/file_preparer.rb,
lib/dependabot/bundler/update_checker/force_updater.rb,
lib/dependabot/bundler/update_checker/version_resolver.rb,
lib/dependabot/bundler/update_checker/requirements_updater.rb,
lib/dependabot/bundler/update_checker/latest_version_finder.rb,
lib/dependabot/bundler/update_checker/shared_bundler_helpers.rb

Defined Under Namespace

Modules: SharedBundlerHelpers Classes: FilePreparer, ForceUpdater, LatestVersionFinder, RequirementsUpdater, VersionResolver

Instance Method Summary collapse

Instance Method Details

#latest_resolvable_versionObject



24
25
26
27
28
# File 'lib/dependabot/bundler/update_checker.rb', line 24

def latest_resolvable_version
  return latest_resolvable_version_for_git_dependency if git_dependency?

  latest_resolvable_version_details&.fetch(:version)
end

#latest_resolvable_version_with_no_unlockObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/dependabot/bundler/update_checker.rb', line 30

def latest_resolvable_version_with_no_unlock
  current_ver = dependency.version
  return current_ver if git_dependency? && git_commit_checker.pinned?

  @latest_resolvable_version_detail_with_no_unlock ||=
    version_resolver(remove_git_source: false, unlock_requirement: false).
    latest_resolvable_version_details

  if git_dependency?
    @latest_resolvable_version_detail_with_no_unlock&.fetch(:commit_sha)
  else
    @latest_resolvable_version_detail_with_no_unlock&.fetch(:version)
  end
end

#latest_versionObject



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

def latest_version
  return latest_version_for_git_dependency if git_dependency?

  latest_version_details&.fetch(:version)
end

#requirements_unlocked_or_can_be?Boolean

Returns:

  • (Boolean)


71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/dependabot/bundler/update_checker.rb', line 71

def requirements_unlocked_or_can_be?
  dependency.requirements.
    reject { |r| r[:requirement].nil? }.
    all? do |req|
      requirement = requirement_class.new(req[:requirement])
      next true if requirement.satisfied_by?(Gem::Version.new("100000"))

      file = dependency_files.find { |f| f.name == req.fetch(:file) }
      updated = FileUpdater::RequirementReplacer.new(
        dependency: dependency,
        file_type: file.name.end_with?("gemspec") ? :gemspec : :gemfile,
        updated_requirement: "whatever"
      ).rewrite(file.content)

      updated != file.content
    end
end

#requirements_update_strategyObject



89
90
91
92
93
94
95
96
97
# File 'lib/dependabot/bundler/update_checker.rb', line 89

def requirements_update_strategy
  # If passed in as an option (in the base class) honour that option
  if @requirements_update_strategy
    return @requirements_update_strategy.to_sym
  end

  # Otherwise, widen ranges for libraries and bump versions for apps
  dependency.version.nil? ? :bump_versions_if_necessary : :bump_versions
end

#updated_requirementsObject



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
# File 'lib/dependabot/bundler/update_checker.rb', line 45

def updated_requirements
  if updated_source&.fetch(:ref, nil) &&
     updated_source.fetch(:ref) != dependency_source_details.fetch(:ref)
    updated_version =
      latest_resolvable_version_details_with_updated_git_source&.
      fetch(:version)&.
      to_s
    RequirementsUpdater.new(
      requirements: dependency.requirements,
      update_strategy: requirements_update_strategy,
      updated_source: updated_source,
      latest_version: updated_version,
      latest_resolvable_version: updated_version
    ).updated_requirements
  else
    RequirementsUpdater.new(
      requirements: dependency.requirements,
      update_strategy: requirements_update_strategy,
      updated_source: updated_source,
      latest_version: latest_version_details&.fetch(:version)&.to_s,
      latest_resolvable_version:
        latest_resolvable_version_details&.fetch(:version)&.to_s
    ).updated_requirements
  end
end