Class: U3dCore::UpdateChecker
- Inherits:
-
Object
- Object
- U3dCore::UpdateChecker
- Defined in:
- lib/u3d_core/update_checker/update_checker.rb
Overview
Verifies the user runs the latest version of this gem
Class Attribute Summary collapse
-
.start_time ⇒ Object
readonly
Returns the value of attribute start_time.
Class Method Summary collapse
-
.ensure_rubygems_source ⇒ Object
Check if RubyGems is set as a gem source on some machines that might not be the case and then users can’t find the update when running the specified command.
- .fetch_latest(gem_name) ⇒ Object
- .generate_fetch_url(gem_name) ⇒ Object
- .server_results ⇒ Object
-
.show_update_message(gem_name, current_version) ⇒ Object
Show a message to the user to update to a new version of u3d Use this method, as this will detect the current Ruby environment and show an appropriate message to the user.
- .show_update_status(gem_name, current_version) ⇒ Object
- .start_looking_for_update(gem_name) ⇒ Object
- .update_available?(gem_name, current_version) ⇒ Boolean
-
.update_command(gem_name) ⇒ Object
The command that the user should use to update the gem.
-
.wait_for_results ⇒ Object
wait a abit for results when commands run real quick.
Class Attribute Details
.start_time ⇒ Object (readonly)
Returns the value of attribute start_time.
51 52 53 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 51 def start_time @start_time end |
Class Method Details
.ensure_rubygems_source ⇒ Object
Check if RubyGems is set as a gem source on some machines that might not be the case and then users can’t find the update when running the specified command
111 112 113 114 115 116 117 118 119 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 111 def self.ensure_rubygems_source return if `gem sources`.include?("https://rubygems.org") puts("") UI.error("RubyGems is not listed as your Gem source") UI.error("You can run `gem sources` to see all your sources") UI.error("Please run the following command to fix this:") UI.command("gem sources --add https://rubygems.org") end |
.fetch_latest(gem_name) ⇒ Object
121 122 123 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 121 def self.fetch_latest(gem_name) JSON.parse(U3d::Utils.page_content(generate_fetch_url(gem_name)))["version"] end |
.generate_fetch_url(gem_name) ⇒ Object
125 126 127 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 125 def self.generate_fetch_url(gem_name) "https://rubygems.org/api/v1/gems/#{gem_name}.json" end |
.server_results ⇒ Object
46 47 48 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 46 def self.server_results @server_results ||= {} end |
.show_update_message(gem_name, current_version) ⇒ Object
Show a message to the user to update to a new version of u3d Use this method, as this will detect the current Ruby environment and show an appropriate message to the user
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 72 def self.(gem_name, current_version) available = server_results[gem_name] puts("") puts('#######################################################################') if available puts("# #{gem_name} #{available} is available. You are on #{current_version}.") else puts("# An update for #{gem_name} is available. You are on #{current_version}.") end puts("# You should use the latest version.") puts("# Please update using `#{update_command(gem_name: gem_name)}`.") # this could be fetched from the gem puts("# To see what's new, open https://github.com/DragonBox/#{gem_name}/releases.") if U3dCore::Env.truthy?("U3D_HIDE_CHANGELOG") if !Helper.bundler? && Random.rand(5) == 1 # We want to show this message from time to time, if the user doesn't use bundler puts('#######################################################################') puts("# Run `sudo gem cleanup` from time to time to speed up u3d") end puts('#######################################################################') Changelog.show_changes(gem_name, current_version, update_gem_command: UpdateChecker.update_command(gem_name)) unless U3dCore::Env.truthy?("U3D_HIDE_CHANGELOG") ensure_rubygems_source end |
.show_update_status(gem_name, current_version) ⇒ Object
64 65 66 67 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 64 def self.show_update_status(gem_name, current_version) wait_for_results unless update_available?(gem_name, current_version) (gem_name, current_version) if update_available?(gem_name, current_version) end |
.start_looking_for_update(gem_name) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 33 def self.start_looking_for_update(gem_name) return if Helper.test? return if U3dCore::Env.truthy?("U3D_SKIP_UPDATE_CHECK") @start_time = Time.now Thread.new do server_results[gem_name] = fetch_latest(gem_name) rescue StandardError # we don't want to show a stack trace if something goes wrong end end |
.update_available?(gem_name, current_version) ⇒ Boolean
54 55 56 57 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 54 def self.update_available?(gem_name, current_version) latest = server_results[gem_name] return (latest && (Gem::Version.new(latest) > Gem::Version.new(current_version))) end |
.update_command(gem_name) ⇒ Object
The command that the user should use to update the gem
99 100 101 102 103 104 105 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 99 def self.update_command(gem_name) if Helper.bundler? "bundle update #{gem_name.downcase}" else "sudo gem install #{gem_name.downcase}" end end |
.wait_for_results ⇒ Object
wait a abit for results when commands run real quick
60 61 62 |
# File 'lib/u3d_core/update_checker/update_checker.rb', line 60 def self.wait_for_results sleep([0, 0.4 - (Time.now - @start_time)].max) if @start_time end |