Module: Gem::UpdateSuggestion

Included in:
Commands::InstallCommand
Defined in:
lib/rubygems/update_suggestion.rb

Overview

Mixin methods for Gem::Command to promote available RubyGems update

Constant Summary collapse

ONE_WEEK =
7 * 24 * 60 * 60

Instance Method Summary collapse

Instance Method Details

#eligible_for_update?Boolean

Determines if current environment is eligible for update suggestion.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rubygems/update_suggestion.rb', line 24

def eligible_for_update?
  # explicit opt-out
  return false if Gem.configuration[:prevent_update_suggestion]
  return false if ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"]

  # focus only on human usage of final RubyGems releases
  return false unless Gem.ui.tty?
  return false if Gem.rubygems_version.prerelease?
  return false if Gem.disable_system_update_message
  return false if Gem::CIDetector.ci?

  # check makes sense only when we can store timestamp of last try
  # otherwise we will not be able to prevent "annoying" update message
  # on each command call
  return unless Gem.configuration.state_file_writable?

  # load time of last check, ensure the difference is enough to repeat the suggestion
  check_time = Time.now.to_i
  last_update_check = Gem.configuration.last_update_check
  return false if (check_time - last_update_check) < ONE_WEEK

  # compare current and latest version, this is the part where
  # latest rubygems spec is fetched from remote
  (Gem.rubygems_version < Gem.latest_rubygems_version).tap do |eligible|
    # store the time of last successful check into state file
    Gem.configuration.last_update_check = check_time

    return eligible
  end
rescue StandardError # don't block install command on any problem
  false
end

#update_suggestionObject

Message to promote available RubyGems update with related gem update command.



12
13
14
15
16
17
18
19
# File 'lib/rubygems/update_suggestion.rb', line 12

def update_suggestion
  <<-MESSAGE

A new release of RubyGems is available: #{Gem.rubygems_version}#{Gem.latest_rubygems_version}!
Run `gem update --system #{Gem.latest_rubygems_version}` to update your installation.

  MESSAGE
end