poltergeist 1.12.0 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
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