poltergeist 0.7.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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