class Geordi::ChromedriverUpdater
Public Instance Methods
run(options)
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 8 def run(options) chrome_version = determine_chrome_version chromedriver_version = determine_chromedriver_version if skip_update?(chrome_version, chromedriver_version) Interaction.success "No update required: both Chrome and chromedriver are on v#{chrome_version}!" unless options[:quiet_if_matching] else chromedriver_zip = download_chromedriver(chrome_version) unzip(chromedriver_zip, File.expand_path('~/bin')) chromedriver_zip.unlink # We need to determine the version again, as it could be nil in case no chromedriver was installed before Interaction.success "Chromedriver updated to v#{determine_chromedriver_version}." end end
Private Instance Methods
determine_chrome_version()
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 27 def determine_chrome_version stdout_str, _error_str, status = Open3.capture3('google-chrome', '--version') chrome_version = unless stdout_str.nil? stdout_str[/\AGoogle Chrome (\d+)/, 1] end if !status.success? || chrome_version.nil? Interaction.fail('Could not determine the version of Google Chrome.') else chrome_version.to_i end end
determine_chromedriver_version()
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 40 def determine_chromedriver_version return unless Open3.capture2('which chromedriver')[1].success? stdout_str, _error_str, status = Open3.capture3('chromedriver', '-v') chromedriver_version = unless stdout_str.nil? stdout_str[/\AChromeDriver (\d+)/, 1] end if !status.success? || chromedriver_version.nil? Interaction.fail('Could not determine the version of chromedriver.') else chromedriver_version.to_i end end
download_chromedriver(chrome_version)
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 59 def download_chromedriver(chrome_version) latest_version = latest_version(chrome_version) uri = URI("https://chromedriver.storage.googleapis.com/#{latest_version}/chromedriver_linux64.zip") response = Net::HTTP.get_response(uri) if response.is_a?(Net::HTTPSuccess) file = Tempfile.new(['chromedriver', '.zip']) file.write(response.body) file else Interaction.fail("Could not download chromedriver v#{latest_version}.") end end
latest_version(chrome_version)
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 75 def latest_version(chrome_version) uri = URI("https://chromedriver.storage.googleapis.com/LATEST_RELEASE_#{chrome_version}") response = Net::HTTP.get_response(uri) if response.is_a?(Net::HTTPSuccess) response.body.to_s else Interaction.fail("Could not download the chromedriver v#{chrome_version}.") end end
skip_update?(chrome_version, chromedriver_version)
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 55 def skip_update?(chrome_version, chromedriver_version) chrome_version == chromedriver_version end
unzip(zip, output_dir)
click to toggle source
# File lib/geordi/chromedriver_updater.rb, line 86 def unzip(zip, output_dir) _stdout_str, _error_str, status = Open3.capture3('unzip', '-d', output_dir, '-o', zip.path) unless status.success? Interaction.fail("Could not unzip #{zip.path}.") end end