class Phantomjs::Platform

Public Class Methods

architecture() click to toggle source
# File lib/phantomjs/platform.rb, line 8
def architecture
  RbConfig::CONFIG['host_cpu']
end
ensure_installed!() click to toggle source
# File lib/phantomjs/platform.rb, line 93
def ensure_installed!
  install! unless installed?
end
host_os() click to toggle source
# File lib/phantomjs/platform.rb, line 4
def host_os
  RbConfig::CONFIG['host_os']
end
install!() click to toggle source

TODO: Clean this up, it looks like a pile of…

# File lib/phantomjs/platform.rb, line 43
def install!
  STDERR.puts "Phantomjs does not appear to be installed in #{phantomjs_path}, installing!"
  FileUtils.mkdir_p Phantomjs.base_dir

  # Purge temporary directory if it is still hanging around from previous installs,
  # then re-create it.
  temp_dir = File.join(temp_path, 'phantomjs_install')
  FileUtils.rm_rf temp_dir
  FileUtils.mkdir_p temp_dir

  Dir.chdir temp_dir do
    unless system "curl -L -O #{package_url} #{curl_proxy_options}" or system "wget #{package_url} #{wget_proxy_options}"
      raise "\n\nFailed to load phantomjs! :(\nYou need to have cURL or wget installed on your system.\nIf you have, the source of phantomjs might be unavailable: #{package_url}\n\n"
    end

    case package_url.split('.').last
      when 'bz2'
        system "bunzip2 #{File.basename(package_url)}"
        system "tar xf #{File.basename(package_url).sub(/\.bz2$/, '')}"
      when 'zip'
        system "unzip #{File.basename(package_url)}"
      else
        raise "Unknown compression format for #{File.basename(package_url)}"
    end

    # Find the phantomjs build we just extracted
    extracted_dir = Dir['phantomjs*'].find { |path| File.directory?(path) }

    if extracted_dir.nil?
      # Move the executable file
      FileUtils.mkdir_p File.join(Phantomjs.base_dir, platform, 'bin')
      if FileUtils.mv 'phantomjs', File.join(Phantomjs.base_dir, platform, 'bin')
        STDOUT.puts "\nSuccessfully installed phantomjs. Yay!"
      end
    else
      # Move the extracted phantomjs build to $HOME/.phantomjs/version/platform
      if FileUtils.mv extracted_dir, File.join(Phantomjs.base_dir, platform)
        STDOUT.puts "\nSuccessfully installed phantomjs. Yay!"
      end
    end

    # Clean up remaining files in tmp
    if FileUtils.rm_rf temp_dir
      STDOUT.puts 'Removed temporarily downloaded files.'
    end
  end

  raise 'Failed to install phantomjs. Sorry :(' unless File.exist?(phantomjs_path)
end
installed?() click to toggle source
# File lib/phantomjs/platform.rb, line 38
def installed?
  File.exist?(phantomjs_path) || system_phantomjs_installed?
end
phantomjs_path() click to toggle source
# File lib/phantomjs/platform.rb, line 16
def phantomjs_path
  if system_phantomjs_installed?
    system_phantomjs_path
  else
    File.expand_path File.join(Phantomjs.base_dir, platform, 'bin/phantomjs')
  end
end
system_phantomjs_installed?() click to toggle source
# File lib/phantomjs/platform.rb, line 34
def system_phantomjs_installed?
  system_phantomjs_version == Phantomjs.version
end
system_phantomjs_path() click to toggle source
# File lib/phantomjs/platform.rb, line 24
def system_phantomjs_path
  `which phantomjs`.delete("\n")
rescue
end
system_phantomjs_version() click to toggle source
# File lib/phantomjs/platform.rb, line 29
def system_phantomjs_version
  `phantomjs --version`.delete("\n") if system_phantomjs_path.length > 4.2
rescue
end
temp_path() click to toggle source
# File lib/phantomjs/platform.rb, line 12
def temp_path
  ENV['TMPDIR'] || ENV['TEMP'] || '/tmp'
end

Private Class Methods

curl_proxy_options() click to toggle source
# File lib/phantomjs/platform.rb, line 99
def curl_proxy_options
  return '' if Phantomjs.proxy_host.nil? && Phantomjs.proxy_port.nil?
  "-x #{Phantomjs.proxy_host}:#{Phantomjs.proxy_port}"
end
wget_proxy_options() click to toggle source
# File lib/phantomjs/platform.rb, line 104
def wget_proxy_options
  return '' if Phantomjs.proxy_host.nil? && Phantomjs.proxy_port.nil?
  "-e use_proxy=yes -e http_proxy=#{Phantomjs.proxy_host}:#{Phantomjs.proxy_port}"
end