scoutui 2.0.3.42.pre → 2.0.3.43.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/scoutui/base/assertions.rb +15 -2
- data/lib/scoutui/base/q_browser.rb +135 -3
- data/lib/scoutui/base/visual_test_framework.rb +1 -1
- data/lib/scoutui/commands/click_object.rb +65 -5
- data/lib/scoutui/commands/type.rb +42 -17
- data/lib/scoutui/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cf3942661d1fe07e101908d524e05f1c388897b
|
4
|
+
data.tar.gz: d774623387644c2afdced96ed5d0ebaa920f1d6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f39521a4b9e5ea566ada4a894a4258ed0fc762e77f090f69afe1fca3d350e1d6f8c284720f2cfe8fc0562133df844e2075109e0ac1476d71cbe1e88160fd758
|
7
|
+
data.tar.gz: 026c38f168d7826c1afd94f2f6d239b1daeff6d989e75a9cf73e81615d5c78c5acaf4d176f122a20f2d61a42b8967d88423319f45fb896c4f7778d506ef1fae9
|
@@ -316,6 +316,7 @@ module Scoutui::Base
|
|
316
316
|
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " invalid assertion cmd: #{_execute_when}"
|
317
317
|
end
|
318
318
|
|
319
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " _obj : #{_obj}"
|
319
320
|
|
320
321
|
if _obj.is_a?(Selenium::WebDriver::Element) && _t.has_key?('cmd') && !_t['cmd'].empty? && _t['cmd'].match(/[!]*isSelected/i)
|
321
322
|
|
@@ -333,12 +334,24 @@ module Scoutui::Base
|
|
333
334
|
# Object must exist and be enabled to 'pass' assertion.
|
334
335
|
elsif _t.has_key?('cmd') && !_t['cmd'].empty? && _t['cmd'].match(/[!]*isEnabled/i)
|
335
336
|
|
336
|
-
|
337
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " process isEnabled(#{_obj})"
|
338
|
+
|
339
|
+
if !(_obj.is_a?(Selenium::WebDriver::Element))
|
337
340
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " #{_execute_when} => element not found"
|
338
341
|
return false
|
342
|
+
else
|
343
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " check if Enabled"
|
339
344
|
end
|
340
345
|
|
341
|
-
|
346
|
+
# puts __FILE__ + (__LINE__).to_s + " disabled: #{_obj.attribute("disabled")}"
|
347
|
+
# puts __FILE__ + (__LINE__).to_s + " readonly: #{_obj.attribute("readonly")}"
|
348
|
+
# puts __FILE__ + (__LINE__).to_s + " foo: #{_obj.attribute("foo")} isNil?: #{_obj.attribute("foo").nil?}"
|
349
|
+
# puts __FILE__ + (__LINE__).to_s + " enabled: #{_obj.enabled?}"
|
350
|
+
|
351
|
+
# _enabled = _obj.enabled? && !(_obj.attribute("disabled") || _obj.attribute("readonly") )
|
352
|
+
# _enabled=false if _enabled.nil?
|
353
|
+
|
354
|
+
_enabled = Scoutui::Base::QBrowser.isEnabled?(_obj, my_driver, _locator)
|
342
355
|
|
343
356
|
puts __FILE__ + (__LINE__).to_s + " _obj.enabled? => #{_enabled}"
|
344
357
|
|
@@ -256,24 +256,156 @@ module Scoutui::Base
|
|
256
256
|
end
|
257
257
|
|
258
258
|
def self.isStale?(_obj)
|
259
|
-
|
259
|
+
_noSuch=false
|
260
|
+
_isStale=false
|
261
|
+
|
262
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " isStale?(#{_obj})"
|
260
263
|
|
261
264
|
begin
|
262
265
|
|
263
266
|
if _obj.is_a?(Selenium::WebDriver::Element)
|
264
267
|
_obj.enabled?
|
268
|
+
_obj.tag_name
|
269
|
+
_obj.attribute('type')
|
270
|
+
else
|
271
|
+
puts __FILE__ + (__LINE__).to_s + " | isStale? => nil"
|
272
|
+
return nil
|
265
273
|
end
|
266
274
|
|
267
275
|
rescue Selenium::WebDriver::Error::NoSuchElementError
|
268
|
-
|
276
|
+
_noSuch=true
|
269
277
|
|
270
278
|
rescue Selenium::WebDriver::Error::StaleElementReferenceError
|
271
|
-
|
279
|
+
_isStale=true
|
280
|
+
|
281
|
+
rescue => ex
|
282
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " #{ex}"
|
283
|
+
puts ex.backtrace
|
272
284
|
end
|
273
285
|
|
286
|
+
puts __FILE__ + (__LINE__).to_s + " | isStale?(#{_obj}) : nosuch=#{_noSuch}, stale=#{_isStale}"
|
287
|
+
return (_noSuch || _isStale)
|
288
|
+
end
|
289
|
+
|
290
|
+
|
291
|
+
def self.isEnabled?(_obj, my_driver=nil, _locator=nil)
|
292
|
+
rc=false
|
293
|
+
|
294
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " isEnabled?(#{_obj})"
|
295
|
+
|
296
|
+
begin
|
297
|
+
if _obj.is_a?(Selenium::WebDriver::Element)
|
298
|
+
|
299
|
+
(0..2).each do |i|
|
300
|
+
|
301
|
+
_isStale = Scoutui::Base::QBrowser.isStale?(_obj)
|
302
|
+
|
303
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " #{i} => isStale?(#{_obj}, #{_locator}), isStale: #{_isStale}"
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
if _isStale && !_locator.nil?
|
308
|
+
|
309
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout)
|
310
|
+
isDisplayed = wait.until {
|
311
|
+
if Scoutui::Base::QBrowser.isStale?(_obj)
|
312
|
+
puts __FILE__ + (__LINE__).to_s + " ** refetch #{_locator} **"
|
313
|
+
_obj=Scoutui::Base::QBrowser.findElement(my_driver, Scoutui::Base::UserVars.instance.normalize(_locator), Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
314
|
+
end
|
315
|
+
true if _obj.enabled?
|
316
|
+
}
|
317
|
+
|
318
|
+
end
|
319
|
+
|
320
|
+
puts __FILE__ + (__LINE__).to_s + " enabled => #{_obj.enabled?}"
|
321
|
+
|
322
|
+
if _obj.enabled?
|
323
|
+
_disabled=_obj.attribute("disabled")
|
324
|
+
_rdonly = _obj.attribute("readonly")
|
325
|
+
|
326
|
+
puts __FILE__ + (__LINE__).to_s + " disabled: #{_disabled} nil: #{_disabled.nil?}"
|
327
|
+
puts __FILE__ + (__LINE__).to_s + " readonly: #{_rdonly} nil: #{_rdonly.nil?}"
|
328
|
+
puts __FILE__ + (__LINE__).to_s + " enabled: #{_obj.enabled?}"
|
329
|
+
|
330
|
+
rc = _obj.enabled? && !(_obj.attribute("disabled") || _obj.attribute("readonly") )
|
331
|
+
|
332
|
+
rc = _obj.enabled? && (_disabled.nil? || !_disabled)
|
333
|
+
rc=false if rc.nil?
|
334
|
+
next
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
else
|
339
|
+
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " isEnabled?(not Element)"
|
340
|
+
end
|
341
|
+
|
342
|
+
rescue => ex
|
343
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " #{ex}"
|
344
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + ex.backtrace
|
345
|
+
end
|
346
|
+
|
347
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " isEnabled?(#{_obj}) : #{rc}"
|
274
348
|
rc
|
275
349
|
end
|
276
350
|
|
351
|
+
def self.getElement(drv, _locator, _frames, _timeout=nil)
|
352
|
+
|
353
|
+
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " getElement(#{_locator})"
|
354
|
+
_isntStale=true
|
355
|
+
obj = Scoutui::Base::QBrowser.findElement(drv,
|
356
|
+
_locator,
|
357
|
+
_frames,
|
358
|
+
_timeout)
|
359
|
+
|
360
|
+
puts __FILE__ + (__LINE__).to_s + " | locator: #{_locator}"
|
361
|
+
puts __FILE__ + (__LINE__).to_s + " | obj : #{obj}"
|
362
|
+
puts __FILE__ + (__LINE__).to_s + " | stale : " + Scoutui::Base::QBrowser.isStale?(obj).to_s
|
363
|
+
|
364
|
+
cnt=0
|
365
|
+
if obj.is_a?(Selenium::WebDriver::Element) && Scoutui::Base::QBrowser.isStale?(obj) && !_locator.nil?
|
366
|
+
|
367
|
+
_isntStale=false
|
368
|
+
|
369
|
+
(0..7).each do |i|
|
370
|
+
|
371
|
+
cnt+=1
|
372
|
+
begin
|
373
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout)
|
374
|
+
_isntStale = wait.until {
|
375
|
+
_rc=Scoutui::Base::QBrowser.isStale?(obj)
|
376
|
+
puts __FILE__ + (__LINE__).to_s + " stale(#{_locator}) : #{_rc}"
|
377
|
+
if _rc
|
378
|
+
obj = Scoutui::Base::QBrowser.findElement(drv, _locator,
|
379
|
+
_frames,
|
380
|
+
_timeout)
|
381
|
+
end
|
382
|
+
!_rc
|
383
|
+
}
|
384
|
+
rescue Selenium::WebDriver::Error::TimeOutError
|
385
|
+
;
|
386
|
+
end
|
387
|
+
|
388
|
+
|
389
|
+
puts __FILE__ + (__LINE__).to_s + " #{i} ==> stale(#{_locator}) : #{_isntStale}"
|
390
|
+
|
391
|
+
if !_isntStale
|
392
|
+
puts __FILE__ + (__LINE__).to_s + " #{i} => obj is STALE : #{_locator}"
|
393
|
+
obj = Scoutui::Base::QBrowser.findElement(drv, _locator,
|
394
|
+
_frames,
|
395
|
+
_timeout)
|
396
|
+
else
|
397
|
+
break
|
398
|
+
end
|
399
|
+
|
400
|
+
end
|
401
|
+
|
402
|
+
|
403
|
+
end
|
404
|
+
|
405
|
+
puts __FILE__ + (__LINE__).to_s + " getElement(#{_locator}) : #{obj}, cnt:#{cnt}, isntStale:#{_isntStale}"
|
406
|
+
obj
|
407
|
+
end
|
408
|
+
|
277
409
|
def self.findElement(drv, _locator, _frames, _timeout=nil)
|
278
410
|
|
279
411
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " findElement(#{_locator}, #{Scoutui::Commands::Utils.instance.getFrameSearch})"
|
@@ -951,7 +951,7 @@ module Scoutui::Base
|
|
951
951
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " isEnabled #{_a} : failed"
|
952
952
|
_executeIt=false
|
953
953
|
else
|
954
|
-
puts __FILE__ + (__LINE__).to_s + " IS_ENABLED : #{_a}";
|
954
|
+
puts __FILE__ + (__LINE__).to_s + " IS_ENABLED : #{_a}";
|
955
955
|
end
|
956
956
|
|
957
957
|
|
@@ -4,6 +4,31 @@ module Scoutui::Commands
|
|
4
4
|
|
5
5
|
class ClickObject < Command
|
6
6
|
|
7
|
+
def _then(pageElt)
|
8
|
+
return if pageElt.nil?
|
9
|
+
|
10
|
+
if !pageElt.nil? && pageElt['page'].has_key?('then')
|
11
|
+
pageElt['page']['then'].each do |_subcmd|
|
12
|
+
if _subcmd.is_a?(String)
|
13
|
+
|
14
|
+
|
15
|
+
puts __FILE__ + (__LINE__).to_s + " | then => #{_subcmd}"
|
16
|
+
|
17
|
+
if _subcmd.match(/^\s*press\(__TAB__\)$/)
|
18
|
+
@drv.action.send_keys(:tab).perform
|
19
|
+
elsif _subcmd.match(/^\s*press\(__DOWN__\)$/)
|
20
|
+
@drv.action.send_keys(:arrow_down).perform
|
21
|
+
elsif _subcmd.match(/^\s*press\(__UP__\)$/)
|
22
|
+
@drv.action.send_keys(:arrow_up).perform
|
23
|
+
elsif _subcmd.match(/^\s*press\(__ENTER__\)\s*$/)
|
24
|
+
@drv.action.send_keys(:enter).perform
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
7
32
|
def _whenClicked(page_elt)
|
8
33
|
|
9
34
|
return if page_elt.nil?
|
@@ -62,7 +87,25 @@ module Scoutui::Commands
|
|
62
87
|
|
63
88
|
begin
|
64
89
|
|
65
|
-
obj = Scoutui::Base::QBrowser.
|
90
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
91
|
+
|
92
|
+
if false
|
93
|
+
obj = Scoutui::Base::QBrowser.findElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
94
|
+
|
95
|
+
if Scoutui::Base::QBrowser.isStale?(obj) && !_locator.nil?
|
96
|
+
|
97
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout)
|
98
|
+
isDisplayed = wait.until {
|
99
|
+
if Scoutui::Base::QBrowser.isStale?(obj)
|
100
|
+
obj = Scoutui::Base::QBrowser.findElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
101
|
+
end
|
102
|
+
true if obj.enabled?
|
103
|
+
}
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
66
109
|
|
67
110
|
if obj
|
68
111
|
|
@@ -96,12 +139,27 @@ module Scoutui::Commands
|
|
96
139
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " highlight then click : #{obj}"
|
97
140
|
end
|
98
141
|
|
99
|
-
|
142
|
+
(0..5).each do |_i|
|
143
|
+
_retry = true
|
144
|
+
puts __FILE__ + (__LINE__).to_s + " #{_i} => click(#{obj})"
|
145
|
+
begin
|
146
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _locator, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
147
|
+
@drv.action.move_to(obj).perform
|
148
|
+
bm=Benchmark.measure { obj.click }
|
149
|
+
setBenchmark(bm)
|
150
|
+
_retry = false
|
151
|
+
_clicked=true
|
152
|
+
|
153
|
+
rescue Selenium::WebDriver::Error::UnknownError
|
154
|
+
puts __FILE__ + (__LINE__).to_s + " Selenium::WebDriver::Error::UnknownError"
|
155
|
+
_retry=true
|
156
|
+
end
|
157
|
+
|
158
|
+
break if !_retry
|
159
|
+
end
|
160
|
+
|
100
161
|
|
101
|
-
bm=Benchmark.measure { obj.click }
|
102
|
-
setBenchmark(bm)
|
103
162
|
|
104
|
-
_clicked=true
|
105
163
|
|
106
164
|
page_elt = Scoutui::Utils::TestUtils.instance.getPageElement(_locator)
|
107
165
|
|
@@ -114,6 +172,8 @@ module Scoutui::Commands
|
|
114
172
|
end
|
115
173
|
|
116
174
|
_whenClicked(page_elt)
|
175
|
+
_then(page_elt)
|
176
|
+
|
117
177
|
else
|
118
178
|
Scoutui::Logger::LogMgr.instance.warn __FILE__ + (__LINE__).to_s + " Unable to click object that is not displayed."
|
119
179
|
end
|
@@ -69,8 +69,6 @@ module Scoutui::Commands
|
|
69
69
|
_rc=true
|
70
70
|
_isKb=true
|
71
71
|
else
|
72
|
-
# _xpath = @cmd.match(/^\s*type[\!]*\(([^,]*),\s*/)[1].to_s
|
73
|
-
# _val = @cmd.match(/^\s*type[\!]*\([^,]*,\s*(.*)\)/)[1].to_s
|
74
72
|
|
75
73
|
if @cmd.match(/^\s*type[\!]*\((.*),\s*'(.*)\s*'\)\s*$/)
|
76
74
|
_xpath = @cmd.match(/^\s*type[\!]*\((.*),\s*'(.*)\s*'\)\s*$/)[1]
|
@@ -82,22 +80,17 @@ module Scoutui::Commands
|
|
82
80
|
|
83
81
|
Scoutui::Logger::LogMgr.instance.commands.debug __FILE__ + (__LINE__).to_s + "Process TYPE #{_val} into #{_xpath}"
|
84
82
|
|
85
|
-
obj = Scoutui::Base::QBrowser.
|
86
|
-
|
87
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => Scoutui::Commands::Utils.instance.getTimeout)
|
88
|
-
isDisplayed = wait.until {
|
89
|
-
if Scoutui::Base::QBrowser.isStale?(obj)
|
90
|
-
obj = Scoutui::Base::QBrowser.findElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
91
|
-
end
|
92
|
-
true if obj.displayed?
|
93
|
-
}
|
83
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
94
84
|
|
95
85
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " type(#{_val})"
|
96
86
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " tag : #{obj.tag_name}" if obj.is_a?(Selenium::WebDriver::Element)
|
97
87
|
|
98
|
-
|
99
|
-
|
100
|
-
|
88
|
+
typeInto = !obj.nil? &&
|
89
|
+
(obj.tag_name.downcase=='body' ||
|
90
|
+
!obj.attribute('type').downcase.match(/(file|input|text|textarea|password|email)/).nil? )
|
91
|
+
|
92
|
+
|
93
|
+
if typeInto
|
101
94
|
|
102
95
|
isDisplayed=false
|
103
96
|
|
@@ -119,6 +112,15 @@ module Scoutui::Commands
|
|
119
112
|
|
120
113
|
if @cmd.match(/^\s*type\!/i)
|
121
114
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " clear()"
|
115
|
+
|
116
|
+
(0..3).each do |j|
|
117
|
+
if Scoutui::Base::QBrowser.isStale?(obj)
|
118
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
119
|
+
else
|
120
|
+
break
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
122
124
|
obj.clear if isDisplayed
|
123
125
|
end
|
124
126
|
|
@@ -165,11 +167,34 @@ module Scoutui::Commands
|
|
165
167
|
_text_to_type = Scoutui::Commands::Utils.instance.expandMacro(_text_to_type)
|
166
168
|
Scoutui::Logger::LogMgr.instance.debug __FILE__ + (__LINE__).to_s + " Text to type : #{_text_to_type}"
|
167
169
|
|
168
|
-
if
|
169
|
-
|
170
|
+
if true
|
171
|
+
_stale=true
|
172
|
+
_inRow=0
|
173
|
+
_cnt=0
|
174
|
+
(0..7).each do |i|
|
175
|
+
_cnt+=1
|
176
|
+
_stale=Scoutui::Base::QBrowser.isStale?(obj)
|
177
|
+
if _stale
|
178
|
+
_inRow=0
|
179
|
+
sleep 0.5
|
180
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
181
|
+
else
|
182
|
+
_inRow+=1
|
183
|
+
|
184
|
+
break if _inRow >= 3
|
185
|
+
|
186
|
+
obj = Scoutui::Base::QBrowser.getElement(@drv, _xpath, Scoutui::Commands::Utils.instance.getFrameSearch(), Scoutui::Commands::Utils.instance.getTimeout)
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
puts __FILE__ + (__LINE__).to_s + " Stale: #{_stale}, i: #{_cnt}, _inRow:#{_inRow}"
|
170
194
|
end
|
171
195
|
|
172
|
-
|
196
|
+
obj.send_keys(_text_to_type)
|
197
|
+
|
173
198
|
|
174
199
|
if !pageElt.nil? && pageElt['page'].has_key?('then')
|
175
200
|
pageElt['page']['then'].each do |_subcmd|
|
data/lib/scoutui/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scoutui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.3.
|
4
|
+
version: 2.0.3.43.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Kim
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|