Class: FastlaneCore::UpdateChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/fastlane_core/update_checker.rb

Overview

Verifies, the user runs the latest version of this gem

Constant Summary collapse

UPDATE_URL =

This web service is fully open source: github.com/fastlane/refresher

"https://fastlane-refresher.herokuapp.com/"

Class Method Summary collapse

Class Method Details

.fetch_latest(gem_name) ⇒ Object



57
58
59
60
61
# File 'lib/fastlane_core/update_checker.rb', line 57

def self.fetch_latest(gem_name)
  url = UPDATE_URL + gem_name
  url += "?ci=1" if Helper.is_ci?
  JSON.parse(Excon.post(url).body).fetch("version", nil)
end

.finished_running(gem_name) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/fastlane_core/update_checker.rb', line 63

def self.finished_running(gem_name)
  time = (Time.now - @start_time).to_i

  url = UPDATE_URL + "time/#{gem_name}"
  url += "?time=#{time}"
  url += "&ci=1" if Helper.is_ci?
  Excon.post(url)
end

.server_resultsObject



23
24
25
# File 'lib/fastlane_core/update_checker.rb', line 23

def self.server_results
  @@results ||= {}
end

.show_update_message(gem_name, current_version) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/fastlane_core/update_checker.rb', line 46

def self.show_update_message(gem_name, current_version)
  available = server_results[gem_name]
  puts ""
  puts '#######################################################################'.green
  puts "# #{gem_name} #{available} is available. You are on #{current_version}.".green
  puts "# It is recommended to use the latest version.".green
  puts "# Update using 'sudo gem update #{gem_name.downcase}'.".green
  puts "# To see what's new, open https://github.com/KrauseFx/#{gem_name}/releases.".green
  puts '#######################################################################'.green
end

.show_update_status(gem_name, current_version) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/fastlane_core/update_checker.rb', line 32

def self.show_update_status(gem_name, current_version)
  fork do
    begin
      finished_running(gem_name)
    rescue
       # we don't want to show a stack trace if something goes wrong
    end
  end

  if update_available?(gem_name, current_version)
    show_update_message(gem_name, current_version)
  end
end

.start_looking_for_update(gem_name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/fastlane_core/update_checker.rb', line 9

def self.start_looking_for_update(gem_name)
  return if Helper.is_test?
  return if ENV["FASTLANE_SKIP_UPDATE_CHECK"]

  @start_time = Time.now
  
  Thread.new do
    begin
      server_results[gem_name] = fetch_latest(gem_name)
    rescue
    end
  end
end

.update_available?(gem_name, current_version) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
# File 'lib/fastlane_core/update_checker.rb', line 27

def self.update_available?(gem_name, current_version)
  latest = server_results[gem_name]
  return (latest and Gem::Version.new(latest) > Gem::Version.new(current_version))
end