class Geckodriver::Helper

Constants

VERSION

Public Instance Methods

binary_path() click to toggle source
# File lib/geckodriver/helper.rb, line 54
def binary_path
  if platform == 'win'
    File.join platform_install_dir, 'geckodriver.exe'
  else
    File.join platform_install_dir, 'geckodriver'
  end
end
download(hit_network=false, version='0.23.0') click to toggle source
# File lib/geckodriver/helper.rb, line 18
def download(hit_network=false, version='0.23.0')
  return if File.exists?(binary_path) && !hit_network
  url = download_url(version)
  filename = File.basename url
  Dir.chdir platform_install_dir do
    FileUtils.rm_f filename
    File.open(filename, 'wb') do |saved_file|
      URI.parse(url).open('rb', :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) do |read_file|
        saved_file.write(read_file.read)
      end
    end
    raise "Could not download #{url}" unless File.exists? filename
    unpack_archive(filename)
  end

  raise "Could not unarchive #{filename} to get #{binary_path}" unless File.exists? binary_path
  FileUtils.chmod 'ugo+rx', binary_path
end
download_url(version) click to toggle source
# File lib/geckodriver/helper.rb, line 50
def download_url(version)
  GeckoReleasePageParser.new(platform).download_url(version)
end
install_dir() click to toggle source
# File lib/geckodriver/helper.rb, line 68
def install_dir
  dir = File.expand_path File.join(ENV['HOME'], '.geckodriver-helper')
  FileUtils.mkdir_p dir
  dir
end
platform() click to toggle source
# File lib/geckodriver/helper.rb, line 74
def platform
  cfg = RbConfig::CONFIG
  case cfg['host_os']
    when /linux/ then
      cfg['host_cpu'] =~ /x86_64|amd64/ ? 'linux64' : 'linux32'
    when /darwin/ then
      'mac'
    else
      'win'
  end
end
platform_install_dir() click to toggle source
# File lib/geckodriver/helper.rb, line 62
def platform_install_dir
  dir = File.join install_dir, platform
  FileUtils.mkdir_p dir
  dir
end
run(*args) click to toggle source
# File lib/geckodriver/helper.rb, line 13
def run *args
  download
  exec binary_path, *args
end
unpack_archive(file) click to toggle source
# File lib/geckodriver/helper.rb, line 37
def unpack_archive(file)
  if platform == 'win'
    unzip(file)
  else
    io = ungzip(file)
    untar(io)
  end
end
update(version='0.23.0') click to toggle source
# File lib/geckodriver/helper.rb, line 46
def update(version='0.23.0')
  download(true, version)
end

Private Instance Methods

ungzip(tarfile) click to toggle source
# File lib/geckodriver/helper.rb, line 92
def ungzip(tarfile)
  z = Zlib::GzipReader.open(tarfile)
  unzipped = StringIO.new(z.read)
  z.close
  unzipped
end
untar(io) click to toggle source
# File lib/geckodriver/helper.rb, line 99
def untar(io)
  Gem::Package::TarReader.new io do |tar|
    tar.each do |tarfile|
      destination_file = tarfile.full_name
      File.open destination_file, 'wb' do |f|
        f.print tarfile.read
      end
    end
  end
end
unzip(zipfile) click to toggle source
# File lib/geckodriver/helper.rb, line 88
def unzip(zipfile)
  Archive::Zip.extract(zipfile, '.', :overwrite => :all)
end