poltergeist 1.12.0 → 1.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62a6d774d0e6cf68f19667891d54f61c810e89f1
4
- data.tar.gz: 19861cdfb3615834316772b64ee067be4efca384
3
+ metadata.gz: eac1d67cd0c1e7872a042e4d0dfa10740b132858
4
+ data.tar.gz: e52276ce486bb4bda8e17416da7492cdae0af9aa
5
5
  SHA512:
6
- metadata.gz: 3caef6797f238771788a78b0db80019e0f5559c2aef822e3bd102682ecd88a12160e39f6cf6c8a6dd58a4771cb501911fb99ac06d6464f1b8f0370b5dabae9cf
7
- data.tar.gz: ad4321b2d883e7e2236ca800d401371a863027abe9b9a2c6807ae93c16898c77c9284844366504bec5b9f66d93c3d9c55a546af3ae1a79552b3ebe907dd6cb0b
6
+ metadata.gz: aa4a1e4fa49103bb1989d16a46c1135ebffaec9df3fb0a86f1fdf5841389fffd9c6ebaa59ffc8f57abf150a981ce419d38c5c9516d1b0281e73e96f3c78cc517
7
+ data.tar.gz: a7088f6835bf5ef8eb42e724e99dc3271e37deb56c47cce57d68bdd54493ed0e4ed795717dc10d91a56196c55df59fed3c8bdf2c437c9d387d58cc5e7f0d4cbf
@@ -120,12 +120,12 @@ module Capybara::Poltergeist
120
120
  command 'click_coordinates', x, y
121
121
  end
122
122
 
123
- def evaluate(script)
124
- command 'evaluate', script
123
+ def evaluate(script, *args)
124
+ command 'evaluate', script, *args
125
125
  end
126
126
 
127
- def execute(script)
128
- command 'execute', script
127
+ def execute(script, *args)
128
+ command 'execute', script, *args
129
129
  end
130
130
 
131
131
  def within_frame(handle, &block)
@@ -429,19 +429,49 @@ module Capybara::Poltergeist
429
429
  end
430
430
  end
431
431
 
432
+ KEY_ALIASES = {
433
+ command: :Meta,
434
+ equals: :Equal,
435
+ Control: :Ctrl,
436
+ control: :Ctrl,
437
+ mulitply: 'numpad*',
438
+ add: 'numpad+',
439
+ divide: 'numpad/',
440
+ subtract: 'numpad-',
441
+ decimal: 'numpad.'
442
+ }
443
+
432
444
  def normalize_keys(keys)
433
445
  keys.map do |key|
434
446
  case key
435
447
  when Array
436
448
  # [:Shift, "s"] => { modifier: "shift", key: "S" }
449
+ # [:Shift, "string"] => { modifier: "shift", key: "STRING" }
437
450
  # [:Ctrl, :Left] => { modifier: "ctrl", key: :Left }
438
451
  # [:Ctrl, :Shift, :Left] => { modifier: "ctrl,shift", key: :Left }
439
- letter = key.last
440
- symbol = key[0...-1].map { |k| k.to_s.downcase }.join(',')
441
-
442
- { modifier: symbol.to_s.downcase, key: letter.capitalize }
452
+ # [:Ctrl, :Left, :Left] => { modifier: "ctrl", key: [:Left, :Left] }
453
+ _keys = key.chunk {|k| k.is_a?(Symbol) && %w(shift ctrl control alt meta command).include?(k.to_s.downcase) }
454
+ modifiers = if _keys.peek[0]
455
+ _keys.next[1].map do |k|
456
+ k = k.to_s.downcase
457
+ k = 'ctrl' if k == 'control'
458
+ k = 'meta' if k == 'command'
459
+ k
460
+ end.join(',')
461
+ else
462
+ ''
463
+ end
464
+ letter = normalize_keys(_keys.next[1].map {|k| k.is_a?(String) ? k.upcase : k })
465
+ { modifier: modifiers, key: letter }
443
466
  when Symbol
444
- { key: key.capitalize } # Return a known sequence for PhantomJS
467
+ # Return a known sequence for PhantomJS
468
+ key = KEY_ALIASES.fetch(key, key)
469
+ if match = key.to_s.match(/numpad(.)/)
470
+ res = { key: match[1], modifier: 'keypad' }
471
+ elsif key !~ /^[A-Z]/
472
+ key = key.to_s.split('_').map{|e| e.capitalize}.join
473
+ end
474
+ res || { key: key }
445
475
  when String
446
476
  key # Plain string, nothing to do
447
477
  end
@@ -55,7 +55,7 @@ class PoltergeistAgent
55
55
  this.get(id).removeAttribute('_poltergeist_selected')
56
56
 
57
57
  clearLocalStorage: ->
58
- localStorage.clear()
58
+ localStorage?.clear()
59
59
 
60
60
  class PoltergeistAgent.ObsoleteNode
61
61
  toString: -> "PoltergeistAgent.ObsoleteNode"
@@ -266,7 +266,12 @@ class PoltergeistAgent.Node
266
266
  rect.right <= window.innerWidth
267
267
 
268
268
  isDisabled: ->
269
- @element.disabled || @element.tagName == 'OPTION' && @element.parentNode.disabled
269
+ xpath = 'parent::optgroup[@disabled] | \
270
+ ancestor::select[@disabled] | \
271
+ parent::fieldset[@disabled] | \
272
+ ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]'
273
+
274
+ @element.disabled || document.evaluate(xpath, @element, null, XPathResult.BOOLEAN_TYPE, null).booleanValue
270
275
 
271
276
  path: ->
272
277
  elements = @parentIds().reverse().map((id) => @agent.get(id))
@@ -199,11 +199,15 @@ class Poltergeist.Browser
199
199
  path: (page_id, id) ->
200
200
  @current_command.sendResponse this.node(page_id, id).path()
201
201
 
202
- evaluate: (script) ->
203
- @current_command.sendResponse @currentPage.evaluate("function() { return #{script} }")
204
-
205
- execute: (script) ->
206
- @currentPage.execute("function() { #{script} }")
202
+ evaluate: (script, args...) ->
203
+ for arg in args when @_isElementArgument(arg)
204
+ throw new Poltergeist.ObsoleteNode if arg["ELEMENT"]["page_id"] != @currentPage.id
205
+ @current_command.sendResponse @currentPage.evaluate("function() { return #{script} }", args...)
206
+
207
+ execute: (script, args...) ->
208
+ for arg in args when @_isElementArgument(arg)
209
+ throw new Poltergeist.ObsoleteNode if arg["ELEMENT"]["page_id"] != @currentPage.id
210
+ @currentPage.execute("function() { #{script} }", args...)
207
211
  @current_command.sendResponse(true)
208
212
 
209
213
  frameUrl: (frame_name) ->
@@ -345,21 +349,24 @@ class Poltergeist.Browser
345
349
  if !target.containsSelection()
346
350
  target.mouseEvent('click')
347
351
 
352
+ @_send_keys_with_modifiers(keys)
353
+ @current_command.sendResponse(true)
354
+
355
+ _send_keys_with_modifiers: (keys, current_modifier_code = 0) ->
348
356
  for sequence in keys
349
357
  key = if sequence.key?
350
358
  @currentPage.keyCode(sequence.key) || sequence.key
351
359
  else
352
360
  sequence
361
+
353
362
  if sequence.modifier?
354
363
  modifier_keys = @currentPage.keyModifierKeys(sequence.modifier)
355
- modifier_code = @currentPage.keyModifierCode(sequence.modifier)
364
+ modifier_code = @currentPage.keyModifierCode(sequence.modifier) | current_modifier_code
356
365
  @currentPage.sendEvent('keydown', modifier_key) for modifier_key in modifier_keys
357
- @currentPage.sendEvent('keypress', key, null, null, modifier_code)
366
+ @_send_keys_with_modifiers([].concat(key), modifier_code)
358
367
  @currentPage.sendEvent('keyup', modifier_key) for modifier_key in modifier_keys
359
368
  else
360
- @currentPage.sendEvent('keypress', key)
361
-
362
- @current_command.sendResponse(true)
369
+ @currentPage.sendEvent('keypress', key, null, null, current_modifier_code)
363
370
 
364
371
  render_base64: (format, { full = false, selector = null } = {})->
365
372
  window_scroll_position = @currentPage.native().evaluate("function(){ return [window.pageXOffset, window.pageYOffset] }")
@@ -535,3 +542,5 @@ class Poltergeist.Browser
535
542
  wildcard = wildcard.replace(/\?/g, ".")
536
543
  new RegExp(wildcard, "i")
537
544
 
545
+ _isElementArgument: (arg)->
546
+ typeof(arg) == "object" and typeof(arg['ELEMENT']) == "object"
@@ -97,7 +97,7 @@ PoltergeistAgent = (function() {
97
97
  };
98
98
 
99
99
  PoltergeistAgent.prototype.clearLocalStorage = function() {
100
- return localStorage.clear();
100
+ return typeof localStorage !== "undefined" && localStorage !== null ? localStorage.clear() : void 0;
101
101
  };
102
102
 
103
103
  return PoltergeistAgent;
@@ -389,7 +389,9 @@ PoltergeistAgent.Node = (function() {
389
389
  };
390
390
 
391
391
  Node.prototype.isDisabled = function() {
392
- return this.element.disabled || this.element.tagName === 'OPTION' && this.element.parentNode.disabled;
392
+ var xpath;
393
+ xpath = 'parent::optgroup[@disabled] | ancestor::select[@disabled] | parent::fieldset[@disabled] | ancestor::*[not(self::legend) or preceding-sibling::legend][parent::fieldset[@disabled]]';
394
+ return this.element.disabled || document.evaluate(xpath, this.element, null, XPathResult.BOOLEAN_TYPE, null).booleanValue;
393
395
  };
394
396
 
395
397
  Node.prototype.path = function() {
@@ -1,5 +1,5 @@
1
- var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
2
- slice = [].slice;
1
+ var slice = [].slice,
2
+ indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
3
3
 
4
4
  Poltergeist.Browser = (function() {
5
5
  function Browser(width, height) {
@@ -249,12 +249,32 @@ Poltergeist.Browser = (function() {
249
249
  return this.current_command.sendResponse(this.node(page_id, id).path());
250
250
  };
251
251
 
252
- Browser.prototype.evaluate = function(script) {
253
- return this.current_command.sendResponse(this.currentPage.evaluate("function() { return " + script + " }"));
252
+ Browser.prototype.evaluate = function() {
253
+ var arg, args, i, len, ref, script;
254
+ script = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
255
+ for (i = 0, len = args.length; i < len; i++) {
256
+ arg = args[i];
257
+ if (this._isElementArgument(arg)) {
258
+ if (arg["ELEMENT"]["page_id"] !== this.currentPage.id) {
259
+ throw new Poltergeist.ObsoleteNode;
260
+ }
261
+ }
262
+ }
263
+ return this.current_command.sendResponse((ref = this.currentPage).evaluate.apply(ref, ["function() { return " + script + " }"].concat(slice.call(args))));
254
264
  };
255
265
 
256
- Browser.prototype.execute = function(script) {
257
- this.currentPage.execute("function() { " + script + " }");
266
+ Browser.prototype.execute = function() {
267
+ var arg, args, i, len, ref, script;
268
+ script = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
269
+ for (i = 0, len = args.length; i < len; i++) {
270
+ arg = args[i];
271
+ if (this._isElementArgument(arg)) {
272
+ if (arg["ELEMENT"]["page_id"] !== this.currentPage.id) {
273
+ throw new Poltergeist.ObsoleteNode;
274
+ }
275
+ }
276
+ }
277
+ (ref = this.currentPage).execute.apply(ref, ["function() { " + script + " }"].concat(slice.call(args)));
258
278
  return this.current_command.sendResponse(true);
259
279
  };
260
280
 
@@ -450,36 +470,51 @@ Poltergeist.Browser = (function() {
450
470
  };
451
471
 
452
472
  Browser.prototype.send_keys = function(page_id, id, keys) {
453
- var i, j, k, key, len, len1, len2, modifier_code, modifier_key, modifier_keys, sequence, target;
473
+ var target;
454
474
  target = this.node(page_id, id);
455
475
  if (!target.containsSelection()) {
456
476
  target.mouseEvent('click');
457
477
  }
478
+ this._send_keys_with_modifiers(keys);
479
+ return this.current_command.sendResponse(true);
480
+ };
481
+
482
+ Browser.prototype._send_keys_with_modifiers = function(keys, current_modifier_code) {
483
+ var i, j, key, len, len1, modifier_code, modifier_key, modifier_keys, results, sequence;
484
+ if (current_modifier_code == null) {
485
+ current_modifier_code = 0;
486
+ }
487
+ results = [];
458
488
  for (i = 0, len = keys.length; i < len; i++) {
459
489
  sequence = keys[i];
460
490
  key = sequence.key != null ? this.currentPage.keyCode(sequence.key) || sequence.key : sequence;
461
491
  if (sequence.modifier != null) {
462
492
  modifier_keys = this.currentPage.keyModifierKeys(sequence.modifier);
463
- modifier_code = this.currentPage.keyModifierCode(sequence.modifier);
493
+ modifier_code = this.currentPage.keyModifierCode(sequence.modifier) | current_modifier_code;
464
494
  for (j = 0, len1 = modifier_keys.length; j < len1; j++) {
465
495
  modifier_key = modifier_keys[j];
466
496
  this.currentPage.sendEvent('keydown', modifier_key);
467
497
  }
468
- this.currentPage.sendEvent('keypress', key, null, null, modifier_code);
469
- for (k = 0, len2 = modifier_keys.length; k < len2; k++) {
470
- modifier_key = modifier_keys[k];
471
- this.currentPage.sendEvent('keyup', modifier_key);
472
- }
498
+ this._send_keys_with_modifiers([].concat(key), modifier_code);
499
+ results.push((function() {
500
+ var k, len2, results1;
501
+ results1 = [];
502
+ for (k = 0, len2 = modifier_keys.length; k < len2; k++) {
503
+ modifier_key = modifier_keys[k];
504
+ results1.push(this.currentPage.sendEvent('keyup', modifier_key));
505
+ }
506
+ return results1;
507
+ }).call(this));
473
508
  } else {
474
- this.currentPage.sendEvent('keypress', key);
509
+ results.push(this.currentPage.sendEvent('keypress', key, null, null, current_modifier_code));
475
510
  }
476
511
  }
477
- return this.current_command.sendResponse(true);
512
+ return results;
478
513
  };
479
514
 
480
- Browser.prototype.render_base64 = function(format, arg) {
515
+ Browser.prototype.render_base64 = function(format, arg1) {
481
516
  var dimensions, encoded_image, full, ref, ref1, ref2, ref3, selector, window_scroll_position;
482
- ref = arg != null ? arg : {}, full = (ref1 = ref.full) != null ? ref1 : false, selector = (ref2 = ref.selector) != null ? ref2 : null;
517
+ ref = arg1 != null ? arg1 : {}, full = (ref1 = ref.full) != null ? ref1 : false, selector = (ref2 = ref.selector) != null ? ref2 : null;
483
518
  window_scroll_position = this.currentPage["native"]().evaluate("function(){ return [window.pageXOffset, window.pageYOffset] }");
484
519
  dimensions = this.set_clip_rect(full, selector);
485
520
  encoded_image = this.currentPage.renderBase64(format);
@@ -491,9 +526,9 @@ Poltergeist.Browser = (function() {
491
526
  return this.current_command.sendResponse(encoded_image);
492
527
  };
493
528
 
494
- Browser.prototype.render = function(path, arg) {
529
+ Browser.prototype.render = function(path, arg1) {
495
530
  var dimensions, format, full, options, quality, ref, ref1, ref2, ref3, ref4, ref5, selector, window_scroll_position;
496
- ref = arg != null ? arg : {}, full = (ref1 = ref.full) != null ? ref1 : false, selector = (ref2 = ref.selector) != null ? ref2 : null, format = (ref3 = ref.format) != null ? ref3 : null, quality = (ref4 = ref.quality) != null ? ref4 : null;
531
+ ref = arg1 != null ? arg1 : {}, full = (ref1 = ref.full) != null ? ref1 : false, selector = (ref2 = ref.selector) != null ? ref2 : null, format = (ref3 = ref.format) != null ? ref3 : null, quality = (ref4 = ref.quality) != null ? ref4 : null;
497
532
  window_scroll_position = this.currentPage["native"]().evaluate("function(){ return [window.pageXOffset, window.pageYOffset] }");
498
533
  dimensions = this.set_clip_rect(full, selector);
499
534
  options = {};
@@ -733,6 +768,10 @@ Poltergeist.Browser = (function() {
733
768
  return new RegExp(wildcard, "i");
734
769
  };
735
770
 
771
+ Browser.prototype._isElementArgument = function(arg) {
772
+ return typeof arg === "object" && typeof arg['ELEMENT'] === "object";
773
+ };
774
+
736
775
  return Browser;
737
776
 
738
777
  })();
@@ -216,24 +216,35 @@ Poltergeist.WebPage = (function() {
216
216
  };
217
217
 
218
218
  WebPage.prototype.keyCode = function(name) {
219
+ if (name === "Ctrl") {
220
+ name = "Control";
221
+ }
219
222
  return this["native"]().event.key[name];
220
223
  };
221
224
 
222
225
  WebPage.prototype.keyModifierCode = function(names) {
223
226
  var modifiers;
224
227
  modifiers = this["native"]().event.modifier;
225
- names = names.split(',').map((function(name) {
228
+ return names.split(',').map(function(name) {
226
229
  return modifiers[name];
227
- }));
228
- return names[0] | names[1];
230
+ }).reduce(function(n1, n2) {
231
+ return n1 | n2;
232
+ });
229
233
  };
230
234
 
231
235
  WebPage.prototype.keyModifierKeys = function(names) {
232
- return names.split(',').map((function(_this) {
233
- return function(name) {
234
- return _this.keyCode(name.charAt(0).toUpperCase() + name.substring(1));
235
- };
236
- })(this));
236
+ var k, len2, name, ref2, results;
237
+ ref2 = names.split(',');
238
+ results = [];
239
+ for (k = 0, len2 = ref2.length; k < len2; k++) {
240
+ name = ref2[k];
241
+ if (!(name !== 'keypad')) {
242
+ continue;
243
+ }
244
+ name = name.charAt(0).toUpperCase() + name.substring(1);
245
+ results.push(this.keyCode(name));
246
+ }
247
+ return results;
237
248
  };
238
249
 
239
250
  WebPage.prototype._waitState_until = function(state, callback, timeout, timeout_callback) {
@@ -505,13 +516,13 @@ Poltergeist.WebPage = (function() {
505
516
  var args, fn, ref2;
506
517
  fn = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
507
518
  this.injectAgent();
508
- return (ref2 = this["native"]()).evaluate.apply(ref2, ["function() { var _result = " + (this.stringifyCall(fn)) + "; return (_result == null) ? undefined : _result; }"].concat(slice.call(args)));
519
+ return (ref2 = this["native"]()).evaluate.apply(ref2, ["function() { for(var i=0; i < arguments.length; i++){ if ((typeof(arguments[i]) == 'object') && (typeof(arguments[i]['ELEMENT']) == 'object')){ arguments[i] = window.__poltergeist.get(arguments[i]['ELEMENT']['id']).element; } } var _result = " + (this.stringifyCall(fn)) + "; return (_result == null) ? undefined : _result; }"].concat(slice.call(args)));
509
520
  };
510
521
 
511
522
  WebPage.prototype.execute = function() {
512
523
  var args, fn, ref2;
513
524
  fn = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
514
- return (ref2 = this["native"]()).evaluate.apply(ref2, ["function() { " + (this.stringifyCall(fn)) + " }"].concat(slice.call(args)));
525
+ return (ref2 = this["native"]()).evaluate.apply(ref2, ["function() { for(var i=0; i < arguments.length; i++){ if ((typeof(arguments[i]) == 'object') && (typeof(arguments[i]['ELEMENT']) == 'object')){ arguments[i] = window.__poltergeist.get(arguments[i]['ELEMENT']['id']).element; } } " + (this.stringifyCall(fn)) + " }"].concat(slice.call(args)));
515
526
  };
516
527
 
517
528
  WebPage.prototype.stringifyCall = function(fn) {
@@ -160,16 +160,17 @@ class Poltergeist.WebPage
160
160
  this.native().windowName
161
161
 
162
162
  keyCode: (name) ->
163
+ name = "Control" if name == "Ctrl"
163
164
  this.native().event.key[name]
164
165
 
165
166
  keyModifierCode: (names) ->
166
167
  modifiers = this.native().event.modifier
167
- names = names.split(',').map ((name) -> modifiers[name])
168
- names[0] | names[1] # return codes for 1 or 2 modifiers
168
+ names.split(',').map((name) -> modifiers[name]).reduce((n1,n2) -> n1 | n2)
169
169
 
170
170
  keyModifierKeys: (names) ->
171
- names.split(',').map (name) =>
172
- this.keyCode(name.charAt(0).toUpperCase() + name.substring(1))
171
+ for name in names.split(',') when name isnt 'keypad'
172
+ name = name.charAt(0).toUpperCase() + name.substring(1)
173
+ this.keyCode(name)
173
174
 
174
175
  _waitState_until: (state, callback, timeout, timeout_callback) ->
175
176
  if (@state == state)
@@ -345,11 +346,23 @@ class Poltergeist.WebPage
345
346
 
346
347
  evaluate: (fn, args...) ->
347
348
  this.injectAgent()
348
- this.native().evaluate("function() { var _result = #{this.stringifyCall(fn)};
349
+ this.native().evaluate("function() {
350
+ for(var i=0; i < arguments.length; i++){
351
+ if ((typeof(arguments[i]) == 'object') && (typeof(arguments[i]['ELEMENT']) == 'object')){
352
+ arguments[i] = window.__poltergeist.get(arguments[i]['ELEMENT']['id']).element;
353
+ }
354
+ }
355
+ var _result = #{this.stringifyCall(fn)};
349
356
  return (_result == null) ? undefined : _result; }", args...)
350
357
 
351
358
  execute: (fn, args...) ->
352
- this.native().evaluate("function() { #{this.stringifyCall(fn)} }", args...)
359
+ this.native().evaluate("function() {
360
+ for(var i=0; i < arguments.length; i++){
361
+ if ((typeof(arguments[i]) == 'object') && (typeof(arguments[i]['ELEMENT']) == 'object')){
362
+ arguments[i] = window.__poltergeist.get(arguments[i]['ELEMENT']['id']).element;
363
+ }
364
+ }
365
+ #{this.stringifyCall(fn)} }", args...)
353
366
 
354
367
  stringifyCall: (fn) ->
355
368
  "(#{fn.toString()}).apply(this, arguments)"
@@ -134,12 +134,12 @@ module Capybara::Poltergeist
134
134
  browser.click_coordinates(x, y)
135
135
  end
136
136
 
137
- def evaluate_script(script)
138
- browser.evaluate(script)
137
+ def evaluate_script(script, *args)
138
+ browser.evaluate(script, *args.map { |arg| arg.is_a?(Capybara::Poltergeist::Node) ? arg.native : arg})
139
139
  end
140
140
 
141
- def execute_script(script)
142
- browser.execute(script)
141
+ def execute_script(script, *args)
142
+ browser.execute(script, *args.map { |arg| arg.is_a?(Capybara::Poltergeist::Node) ? arg.native : arg})
143
143
  nil
144
144
  end
145
145
 
@@ -168,6 +168,16 @@ module Capybara::Poltergeist
168
168
  command :path
169
169
  end
170
170
 
171
+ # @api private
172
+ def to_json(*)
173
+ JSON.generate as_json
174
+ end
175
+
176
+ # @api private
177
+ def as_json(*)
178
+ { ELEMENT: {page_id: @page_id, id: @id} }
179
+ end
180
+
171
181
  private
172
182
 
173
183
  def filter_text(text)
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Poltergeist
3
- VERSION = "1.12.0"
3
+ VERSION = "1.13.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poltergeist
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Leighton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-06 00:00:00.000000000 Z
11
+ date: 2017-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -176,14 +176,14 @@ dependencies:
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: 1.11.1
179
+ version: 1.12.2
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: 1.11.1
186
+ version: 1.12.2
187
187
  - !ruby/object:Gem::Dependency
188
188
  name: listen
189
189
  requirement: !ruby/object:Gem::Requirement