1
0
Fork 0
mirror of https://github.com/teampoltergeist/poltergeist.git synced 2022-11-09 12:05:00 -05:00
teampoltergeist--poltergeist/lib/capybara/poltergeist/client.rb

76 lines
1.6 KiB
Ruby
Raw Normal View History

2011-10-27 23:34:14 +01:00
module Capybara::Poltergeist
class Client
PHANTOMJS_SCRIPT = File.expand_path('../client/compiled/main.js', __FILE__)
2012-10-05 00:36:53 +01:00
PHANTOMJS_VERSION = '1.7.0'
PHANTOMJS_NAME = 'phantomjs'
def self.start(*args)
client = new(*args)
client.start
client
end
2011-10-27 23:34:14 +01:00
attr_reader :pid, :port, :path, :window_size, :phantomjs_options
2012-07-11 20:05:10 +01:00
2012-07-11 20:25:17 +01:00
def initialize(port, options = {})
2012-07-11 20:05:10 +01:00
@port = port
2012-07-11 20:25:17 +01:00
@path = options[:path] || PHANTOMJS_NAME
@window_size = options[:window_size] || [1024, 768]
@phantomjs_options = options[:phantomjs_options] || []
pid = Process.pid
at_exit { stop if Process.pid == pid }
2011-10-27 23:34:14 +01:00
end
def start
check_phantomjs_version
@pid = Spawn.spawn(*command)
2011-10-27 23:34:14 +01:00
end
def stop
2012-02-29 13:51:11 +00:00
if pid
begin
Process.kill('TERM', pid)
Process.wait(pid)
rescue Errno::ESRCH, Errno::ECHILD
# Zed's dead, baby
end
2012-02-29 13:51:11 +00:00
@pid = nil
end
2011-10-27 23:34:14 +01:00
end
def restart
stop
start
end
2012-02-25 12:47:18 +00:00
def command
@command ||= begin
parts = [path]
parts.concat phantomjs_options
2012-02-25 12:47:18 +00:00
parts << PHANTOMJS_SCRIPT
parts << port
2012-07-11 20:05:10 +01:00
parts.concat window_size
parts
2012-02-25 12:47:18 +00:00
end
end
private
def check_phantomjs_version
return if @phantomjs_version_checked
version = `#{path} --version`.chomp
if $? != 0
raise PhantomJSFailed.new($?)
elsif version < PHANTOMJS_VERSION
raise PhantomJSTooOld.new(version)
end
@phantomjs_version_checked = true
end
2011-10-27 23:34:14 +01:00
end
end