poltergeist 0.7.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,35 @@
1
+ module Capybara::Poltergeist
2
+ class Cookie
3
+ def initialize(attributes)
4
+ @attributes = attributes
5
+ end
6
+
7
+ def name
8
+ @attributes['name']
9
+ end
10
+
11
+ def value
12
+ @attributes['value']
13
+ end
14
+
15
+ def domain
16
+ @attributes['domain']
17
+ end
18
+
19
+ def path
20
+ @attributes['path']
21
+ end
22
+
23
+ def secure?
24
+ @attributes['secure']
25
+ end
26
+
27
+ def httponly?
28
+ @attributes['httponly']
29
+ end
30
+
31
+ def expires
32
+ Time.parse @attributes['expires']
33
+ end
34
+ end
35
+ end
@@ -1,9 +1,11 @@
1
+ require 'uri'
2
+
1
3
  module Capybara::Poltergeist
2
4
  class Driver < Capybara::Driver::Base
3
5
  DEFAULT_TIMEOUT = 30
6
+ DEFAULT_PORT = 44678 # 'GHOST' on a keypad :)
4
7
 
5
8
  attr_reader :app, :app_server, :server, :client, :browser, :options
6
- attr_accessor :headers
7
9
 
8
10
  def initialize(app, options = {})
9
11
  @app = app
@@ -12,7 +14,6 @@ module Capybara::Poltergeist
12
14
  @inspector = nil
13
15
  @server = nil
14
16
  @client = nil
15
- @headers = {}
16
17
 
17
18
  @app_server = Capybara::Server.new(app)
18
19
  @app_server.boot if Capybara.run_server
@@ -27,7 +28,10 @@ module Capybara::Poltergeist
27
28
  end
28
29
 
29
30
  def server
30
- @server ||= Server.new(options.fetch(:timeout, DEFAULT_TIMEOUT))
31
+ @server ||= Server.new(
32
+ options.fetch(:port, DEFAULT_PORT),
33
+ options.fetch(:timeout, DEFAULT_TIMEOUT)
34
+ )
31
35
  end
32
36
 
33
37
  def client
@@ -75,7 +79,7 @@ module Capybara::Poltergeist
75
79
  end
76
80
 
77
81
  def visit(path)
78
- browser.visit app_server.url(path), @headers
82
+ browser.visit app_server.url(path)
79
83
  end
80
84
 
81
85
  def current_url
@@ -107,13 +111,16 @@ module Capybara::Poltergeist
107
111
  nil
108
112
  end
109
113
 
110
- def within_frame(id, &block)
111
- browser.within_frame(id, &block)
114
+ def within_frame(name, &block)
115
+ browser.within_frame(name, &block)
116
+ end
117
+
118
+ def within_window(name, &block)
119
+ browser.within_window(name, &block)
112
120
  end
113
121
 
114
122
  def reset!
115
123
  browser.reset
116
- @headers = {}
117
124
  end
118
125
 
119
126
  def render(path, options = {})
@@ -123,11 +130,36 @@ module Capybara::Poltergeist
123
130
  def resize(width, height)
124
131
  browser.resize(width, height)
125
132
  end
133
+ alias_method :resize_window, :resize
126
134
 
127
135
  def network_traffic
128
136
  browser.network_traffic
129
137
  end
130
138
 
139
+ def headers=(headers)
140
+ browser.set_headers(headers)
141
+ end
142
+
143
+ def response_headers
144
+ browser.response_headers
145
+ end
146
+
147
+ def cookies
148
+ browser.cookies
149
+ end
150
+
151
+ def set_cookie(name, value, options = {})
152
+ browser.set_cookie({
153
+ :name => name,
154
+ :value => value,
155
+ :domain => URI.parse(app_server.url('')).host
156
+ }.merge(options))
157
+ end
158
+
159
+ def remove_cookie(name)
160
+ browser.remove_cookie(name)
161
+ end
162
+
131
163
  def debug
132
164
  if @options[:inspector]
133
165
  inspector.open
@@ -1,23 +1,23 @@
1
1
  module Capybara::Poltergeist
2
2
  class Inspector
3
- BROWSERS = %w(chromium chromium-browser google-chrome safari)
3
+ BROWSERS = %w(chromium chromium-browser google-chrome open)
4
+ DEFAULT_PORT = 9664
4
5
 
5
6
  def self.detect_browser
6
- @browser ||= BROWSERS.find { |name| system("which #{name} &>/dev/null") }
7
+ @browser ||= BROWSERS.find { |name| browser_binary_exists?(name) }
7
8
  end
8
9
 
9
- def initialize(browser = nil)
10
+ attr_reader :port
11
+
12
+ def initialize(browser = nil, port = DEFAULT_PORT)
10
13
  @browser = browser.respond_to?(:to_str) ? browser : nil
14
+ @port = port
11
15
  end
12
16
 
13
17
  def browser
14
18
  @browser ||= self.class.detect_browser
15
19
  end
16
20
 
17
- def port
18
- @port ||= Util.find_available_port
19
- end
20
-
21
21
  def url
22
22
  "http://localhost:#{port}/"
23
23
  end
@@ -31,5 +31,16 @@ module Capybara::Poltergeist
31
31
  "as a configuration option for Poltergeist."
32
32
  end
33
33
  end
34
+
35
+ def self.browser_binary_exists?(browser)
36
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
37
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
38
+ exts.each { |ext|
39
+ exe = "#{path}#{File::SEPARATOR}#{browser}#{ext}"
40
+ return exe if File.executable? exe
41
+ }
42
+ end
43
+ return nil
44
+ end
34
45
  end
35
46
  end
@@ -2,8 +2,8 @@ module Capybara::Poltergeist
2
2
  class Server
3
3
  attr_reader :port, :socket, :timeout
4
4
 
5
- def initialize(timeout = nil)
6
- @port = Util.find_available_port
5
+ def initialize(port, timeout = nil)
6
+ @port = port
7
7
  @timeout = timeout
8
8
  start
9
9
  end
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Poltergeist
3
- VERSION = "0.7.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poltergeist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-10-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capybara
@@ -193,6 +193,22 @@ dependencies:
193
193
  - - ~>
194
194
  - !ruby/object:Gem::Version
195
195
  version: 1.0.0
196
+ - !ruby/object:Gem::Dependency
197
+ name: rspec-rerun
198
+ requirement: !ruby/object:Gem::Requirement
199
+ none: false
200
+ requirements:
201
+ - - ~>
202
+ - !ruby/object:Gem::Version
203
+ version: '0.1'
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ none: false
208
+ requirements:
209
+ - - ~>
210
+ - !ruby/object:Gem::Version
211
+ version: '0.1'
196
212
  description: PhantomJS driver for Capybara
197
213
  email:
198
214
  - j@jonathanleighton.com
@@ -206,7 +222,6 @@ files:
206
222
  - lib/capybara/poltergeist/browser.rb
207
223
  - lib/capybara/poltergeist/inspector.rb
208
224
  - lib/capybara/poltergeist/errors.rb
209
- - lib/capybara/poltergeist/util.rb
210
225
  - lib/capybara/poltergeist/web_socket_server.rb
211
226
  - lib/capybara/poltergeist/json.rb
212
227
  - lib/capybara/poltergeist/network_traffic/request.rb
@@ -227,6 +242,7 @@ files:
227
242
  - lib/capybara/poltergeist/client/browser.coffee
228
243
  - lib/capybara/poltergeist/client/agent.coffee
229
244
  - lib/capybara/poltergeist/node.rb
245
+ - lib/capybara/poltergeist/cookie.rb
230
246
  - lib/capybara/poltergeist/network_traffic.rb
231
247
  - LICENSE
232
248
  - README.md
@@ -244,7 +260,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
244
260
  version: '0'
245
261
  segments:
246
262
  - 0
247
- hash: 557027964753938347
263
+ hash: -4328509354684293409
248
264
  required_rubygems_version: !ruby/object:Gem::Requirement
249
265
  none: false
250
266
  requirements:
@@ -253,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
269
  version: '0'
254
270
  segments:
255
271
  - 0
256
- hash: 557027964753938347
272
+ hash: -4328509354684293409
257
273
  requirements: []
258
274
  rubyforge_project:
259
275
  rubygems_version: 1.8.24
@@ -1,12 +0,0 @@
1
- require 'socket'
2
-
3
- module Capybara::Poltergeist
4
- module Util
5
- def self.find_available_port
6
- server = TCPServer.new('127.0.0.1', 0)
7
- server.addr[1]
8
- ensure
9
- server.close if server
10
- end
11
- end
12
- end