Class: Phantomjs::Platform

Inherits:
Object
  • Object
show all
Defined in:
lib/phantomjs/platform.rb

Direct Known Subclasses

Linux32, Linux64, OsX, Win32

Defined Under Namespace

Classes: Linux32, Linux64, OsX, Win32

Class Method Summary collapse

Class Method Details

.architectureObject


8
9
10
# File 'lib/phantomjs/platform.rb', line 8

def architecture
  RbConfig::CONFIG['host_cpu']
end

.ensure_installed!Object


85
86
87
# File 'lib/phantomjs/platform.rb', line 85

def ensure_installed!
  install! unless installed?
end

.host_osObject


4
5
6
# File 'lib/phantomjs/platform.rb', line 4

def host_os
  RbConfig::CONFIG['host_os']
end

.install!Object

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


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 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 -O #{package_url}" or system "wget #{package_url}"
      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) }

    # 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

    # 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?Boolean

Returns:

  • (Boolean)

38
39
40
# File 'lib/phantomjs/platform.rb', line 38

def installed?
  File.exist?(phantomjs_path) || system_phantomjs_installed?
end

.phantomjs_pathObject


16
17
18
19
20
21
22
# 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?Boolean

Returns:

  • (Boolean)

34
35
36
# File 'lib/phantomjs/platform.rb', line 34

def system_phantomjs_installed?
  system_phantomjs_version == Phantomjs.version
end

.system_phantomjs_pathObject


24
25
26
27
# File 'lib/phantomjs/platform.rb', line 24

def system_phantomjs_path
  `which phantomjs`.delete("\n")
rescue
end

.system_phantomjs_versionObject


29
30
31
32
# 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_pathObject


12
13
14
# File 'lib/phantomjs/platform.rb', line 12

def temp_path
  ENV['TMPDIR'] || ENV['TEMP'] || '/tmp'
end