class Geckodriver::Bin

Constants

DRIVER_VERSION
VERSION

Public Instance Methods

binary_path() click to toggle source
# File lib/geckodriver/bin.rb, line 60
def binary_path
  exe = if platform.include?('win')
          'geckodriver.exe'
        else
          'geckodriver'
        end

  File.join platform_install_dir, exe
end
download(hit_network=false) click to toggle source
# File lib/geckodriver/bin.rb, line 20
def download hit_network=false
  return if File.exists?(binary_path) && !hit_network
  url = download_url
  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') 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() click to toggle source
# File lib/geckodriver/bin.rb, line 55
def download_url
  extension = platform.include?('win') ? 'zip' : 'tar.gz'
  "https://github.com/mozilla/geckodriver/releases/download/#{DRIVER_VERSION}/geckodriver-#{DRIVER_VERSION}-#{platform}.#{extension}"
end
install_dir() click to toggle source
# File lib/geckodriver/bin.rb, line 76
def install_dir
  dir = File.expand_path File.join(ENV['HOME'], '.geckodriver-bin')
  FileUtils.mkdir_p dir
  dir
end
platform() click to toggle source
# File lib/geckodriver/bin.rb, line 82
def platform
  @platform ||= begin
    cfg = RbConfig::CONFIG
    case cfg['host_os']
    when /linux/
      append_64_or_32('linux', cfg)
    when /darwin/
      'macos'
    else
      append_64_or_32('win', cfg)
    end
  end
end
platform_install_dir() click to toggle source
# File lib/geckodriver/bin.rb, line 70
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/bin.rb, line 15
def run *args
  download
  exec binary_path, *args
end
unpack_archive(file) click to toggle source
# File lib/geckodriver/bin.rb, line 39
def unpack_archive(file)
  case file
  when /\.zip$/
    unzip(file)
  when /\.tar\.gz$/
    io = ungzip(file)
    untar(io)
  else
    raise "Don't know how to unpack #{file}"
  end
end
update() click to toggle source
# File lib/geckodriver/bin.rb, line 51
def update
  download true
end

Private Instance Methods

append_64_or_32(platform, cfg) click to toggle source
# File lib/geckodriver/bin.rb, line 98
def append_64_or_32(platform, cfg)
  cfg['host_cpu'] =~ /x86_64|amd64/ ? "#{platform}64" : "#{platform}32"
end
ungzip(tarfile) click to toggle source
# File lib/geckodriver/bin.rb, line 106
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/bin.rb, line 113
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/bin.rb, line 102
def unzip(zipfile)
  Archive::Zip.extract(zipfile, '.', :overwrite => :all)
end