closer 0.1.6 → 0.2.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: a7f2fd9b39f7bae359dc8706696eafbbd64d4b80
4
- data.tar.gz: fe643a88933b0ba11063b1e174ff77eac468f405
3
+ metadata.gz: 62426b90fd66e70685392766ccc2729ff35fe0f9
4
+ data.tar.gz: 6009df630e527185163fe5cab93fcc5fad4ce2d0
5
5
  SHA512:
6
- metadata.gz: 5831d7fa8aabe71ef68e972f463e4e0e5fc6106e643672b296c95257ab2a8bb8e7ace400705c6a43954ccdb1be1d9d6785b07a2fe29cbb08e3a3eaf378af48cb
7
- data.tar.gz: 41a3f047321d9a1f57a9d28360c6f8a6b75cc81e2dd1fd7f16bc71f5dbce738551ed7ff1f61fa85354d39e2a343703128aae0e49ca5bc49f09fc827961eccf22
6
+ metadata.gz: 3b3bc50815bc539a9eb99c3f7ce35d9c3774402b4da26cb424b25cba2e306c30719e74c2bab0829d68911622a7270900c4a33a779c2e02101872fc4f2c8cb711
7
+ data.tar.gz: 3d84bb737b67caf73722e04d2513330fddd1f20e145a6ff8fe6f035057ff97331b0f439e04bd6da46bc7268052bcd65d00b633b2eaaa13a4ad81e9b970c2f0c0
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.required_ruby_version = '~> 2.0'
21
21
 
22
- spec.add_runtime_dependency 'cucumber', '~> 1.3'
22
+ spec.add_runtime_dependency 'cucumber', '~> 2.0'
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
@@ -7,9 +7,11 @@
7
7
  font-weight: bold;
8
8
  }
9
9
 
10
- .cucumber ol li.step, td ol li.step, th ol li.step {
11
- padding: 3px 3px 3px 10px;
12
- margin: 5px 0px 5px 1.2em;
10
+ .cucumber .step.passed table td.skipped {
11
+ border-left: 1px solid gray;
12
+ border-bottom: 1px solid gray;
13
+ background: #FFFFFF;
14
+ color: #000000;
13
15
  }
14
16
 
15
17
  .cucumber ol li.passed,
@@ -33,15 +35,6 @@ th ol li.passed,
33
35
  background: #F0F8FF;
34
36
  }
35
37
 
36
- .cucumber ol li.message, td ol li.message, th ol li.message {
37
- border-left: 5px solid #999999;
38
- border-bottom: 1px solid #999999;
39
- background: #F0F8FF;
40
- color: #001111;
41
- margin: 5px 0px 5px 1.2em;
42
- padding: 3px 15px 3px 10px;
43
- }
44
-
45
38
  .feature_dir {
46
39
  font-size: 1.2em;
47
40
  font-weight: bold;
@@ -78,9 +71,8 @@ div.contents {
78
71
  }
79
72
 
80
73
  div.feature .narrative {
81
- margin: 1.2em;
74
+ margin: 10px 21px;
82
75
  line-height: 1.5em;
83
- font-size: 1.2em;
84
76
  }
85
77
 
86
78
  div.feature .narrative > div {
@@ -167,8 +159,6 @@ del.differ {
167
159
  background: #ffffff;
168
160
  width: 48%;
169
161
  height: 48%;
170
- max-width: 98%;
171
- max-height: 98%;
172
162
  cursor: pointer;
173
163
  }
174
164
 
@@ -11,6 +11,10 @@ module Closer
11
11
  @_ruby_version_dir
12
12
  end
13
13
 
14
+ def gem_dir
15
+ File.join(Gem.dir, 'gems')
16
+ end
17
+
14
18
  def feature_id
15
19
  @feature.file.gsub(/(\/|\.|\\)/, '_')
16
20
  end
@@ -151,7 +151,7 @@ body {
151
151
  padding: 0px;
152
152
  }
153
153
  .cucumber ol li.step, td ol li.step, th ol li.step {
154
- padding: 3px 3px 3px 18px;
154
+ padding: 3px 3px 3px 13px;
155
155
  margin: 5px 0px 5px 5px;
156
156
  }
157
157
  .cucumber ol li, td ol li, th ol li {
@@ -166,6 +166,7 @@ body {
166
166
  border-bottom: 1px solid #c20000;
167
167
  background: #fffbd3;
168
168
  color: #c20000;
169
+ padding: 3px 3px 3px 8px;
169
170
  }
170
171
  .cucumber ol li.passed, td ol li.passed, th ol li.passed {
171
172
  border-left: 5px solid #65c400;
@@ -192,11 +193,12 @@ body {
192
193
  color: #131313;
193
194
  }
194
195
  .cucumber ol li.message, td ol li.message, th ol li.message {
195
- border-left: 5px solid aqua;
196
- border-bottom: 1px solid aqua;
197
- background: #e0ffff;
196
+ border-left: 5px solid #999999;
197
+ border-bottom: 1px solid #999999;
198
+ background: #F0F8FF;
198
199
  color: #001111;
199
- margin-left: 10px;
200
+ margin: 5px 0px 18px 18px;
201
+ padding: 3px 10px 3px 10px;
200
202
  }
201
203
  .cucumber #summary, td #summary, th #summary {
202
204
  margin: 0px;
@@ -282,4 +284,4 @@ body {
282
284
  padding: 0.1em 1em 0.2em 0;
283
285
  color: black;
284
286
  background: #fffbd3;
285
- }
287
+ }
@@ -1,12 +1,21 @@
1
1
  require 'erb'
2
- require 'cucumber/formatter/ordered_xml_markup'
2
+ require 'builder'
3
3
  require 'cucumber/formatter/duration'
4
4
  require 'cucumber/formatter/io'
5
+ require 'pathname'
5
6
  require_relative 'closer_html'
6
7
 
7
8
  module Closer
8
9
  module Formatter
9
10
  class Html
11
+
12
+ # TODO: remove coupling to types
13
+ AST_CLASSES = {
14
+ Cucumber::Core::Ast::Scenario => 'scenario',
15
+ Cucumber::Core::Ast::ScenarioOutline => 'scenario outline'
16
+ }
17
+ AST_DATA_TABLE = ::Cucumber::Formatter::LegacyApi::Ast::MultilineArg::DataTable
18
+
10
19
  include ERB::Util # for the #h method
11
20
  include ::Cucumber::Formatter::Duration
12
21
  include ::Cucumber::Formatter::Io
@@ -24,35 +33,55 @@ module Closer
24
33
  @header_red = nil
25
34
  @delayed_messages = []
26
35
  @img_id = 0
36
+ @text_id = 0
27
37
  @inside_outline = false
38
+ @previous_step_keyword = nil
28
39
  end
29
40
 
30
41
  def embed(src, mime_type, label)
31
42
  case(mime_type)
32
43
  when /^image\/(png|gif|jpg|jpeg)/
44
+ unless File.file?(src) or src =~ /^data:image\/(png|gif|jpg|jpeg);base64,/
45
+ type = mime_type =~ /;base[0-9]+$/ ? mime_type : mime_type + ";base64"
46
+ src = "data:" + type + "," + src
47
+ end
33
48
  embed_image(src, label)
49
+ when /^text\/plain/
50
+ embed_text(src, label)
34
51
  end
35
52
  end
36
53
 
37
54
  def embed_image(src, label)
38
55
  id = "img_#{@img_id}"
39
56
  @img_id += 1
57
+ if @io.respond_to?(:path) and File.file?(src)
58
+ out_dir = Pathname.new(File.dirname(File.absolute_path(@io.path)))
59
+ src = Pathname.new(File.absolute_path(src)).relative_path_from(out_dir)
60
+ end
40
61
  @builder.span(:class => 'embed') do |pre|
41
62
  pre << %{<a href="" onclick="img=document.getElementById('#{id}'); img.style.display = (img.style.display == 'none' ? 'block' : 'none');return false">#{label}</a><br>&nbsp;
42
63
  <img id="#{id}" style="display: none" src="#{src}"/>}
43
64
  end
44
65
  end
45
66
 
67
+ def embed_text(src, label)
68
+ id = "text_#{@text_id}"
69
+ @text_id += 1
70
+ @builder.span(:class => 'embed') do |pre|
71
+ pre << %{<a id="#{id}" href="#{src}" title="#{label}">#{label}</a>}
72
+ end
73
+ end
74
+
46
75
 
47
76
  def before_features(features)
48
- @step_count = features.step_count
77
+ @step_count = features && features.step_count || 0 #TODO: Make this work with core!
49
78
 
50
79
  @builder.declare!(:DOCTYPE, :html)
51
80
 
52
81
  @builder << '<html>'
53
82
  @builder.head do
54
83
  @builder.meta('http-equiv' => 'Content-Type', :content => 'text/html;charset=utf-8')
55
- @builder.title 'Cucumber Features'
84
+ @builder.title 'Cucumber'
56
85
  inline_css
57
86
  inline_js
58
87
  end
@@ -67,8 +96,8 @@ module Closer
67
96
  @builder.p('',:id => 'totals')
68
97
  @builder.p('',:id => 'duration')
69
98
  @builder.div(:id => 'expand-collapse') do
70
- @builder.p('すべて開く', :id => 'expander')
71
- @builder.p('すべて閉じる', :id => 'collapser')
99
+ @builder.p('Expand All', :id => 'expander')
100
+ @builder.p('Collapse All', :id => 'collapser')
72
101
  end
73
102
  end
74
103
  end
@@ -156,7 +185,7 @@ module Closer
156
185
 
157
186
  def background_name(keyword, name, file_colon_line, source_indent)
158
187
  @listing_background = true
159
- @builder.h3 do |h3|
188
+ @builder.h3(:id => "background_#{@scenario_number}") do |h3|
160
189
  @builder.span(keyword, :class => 'keyword')
161
190
  @builder.text!(' ')
162
191
  @builder.span(name, :class => 'val')
@@ -166,16 +195,18 @@ module Closer
166
195
  def before_feature_element(feature_element)
167
196
  @scenario_number+=1
168
197
  @scenario_red = false
169
- css_class = {
170
- ::Cucumber::Ast::Scenario => 'scenario',
171
- ::Cucumber::Ast::ScenarioOutline => 'scenario outline'
172
- }[feature_element.class]
198
+ css_class = AST_CLASSES[feature_element.class]
173
199
  @builder << "<div class='#{css_class}'>"
200
+ @in_scenario_outline = feature_element.class == Cucumber::Core::Ast::ScenarioOutline
174
201
  end
175
202
 
176
203
  def after_feature_element(feature_element)
204
+ unless @in_scenario_outline
205
+ print_messages
206
+ @builder << '</ol>'
207
+ end
177
208
  @builder << '</div>'
178
- @open_step_list = true
209
+ @in_scenario_outline = nil
179
210
  end
180
211
 
181
212
  def scenario_name(keyword, name, file_colon_line, source_indent)
@@ -183,14 +214,20 @@ module Closer
183
214
  @builder << file_colon_line
184
215
  end
185
216
  @listing_background = false
217
+ scenario_id = "scenario_#{@scenario_number}"
218
+ if @inside_outline
219
+ @outline_row += 1
220
+ scenario_id += "_#{@outline_row}"
221
+ @scenario_red = false
222
+ end
186
223
 
187
224
  lines = name.split("\n")
188
- @builder.h3 do
225
+ @builder.h3(:id => scenario_id) do
189
226
  @builder.span(lines[0], :class => 'val')
190
227
  end
191
-
228
+
192
229
  if lines.size > 1
193
- @builder.div(:class => 'narrative', :style => 'display: none;') do
230
+ @builder.pre(:class => 'narrative', :style => 'display: none;') do
194
231
  @builder << lines[1..-1].join("\n")
195
232
  end
196
233
  end
@@ -209,7 +246,7 @@ module Closer
209
246
  end
210
247
 
211
248
  def before_examples(examples)
212
- @builder << '<div class="examples">'
249
+ @builder << '<div class="examples">'
213
250
  end
214
251
 
215
252
  def after_examples(examples)
@@ -229,10 +266,12 @@ module Closer
229
266
  end
230
267
 
231
268
  def after_steps(steps)
232
- @builder << '</ol>'
269
+ print_messages
270
+ @builder << '</ol>' if @in_background or @in_scenario_outline
233
271
  end
234
272
 
235
273
  def before_step(step)
274
+ print_messages
236
275
  @step_id = step.dom_id
237
276
  @step_number += 1
238
277
  @step = step
@@ -261,20 +300,24 @@ module Closer
261
300
  set_scenario_color(status)
262
301
 
263
302
  if ! @delayed_messages.empty? and status == :passed
264
- @builder << "<li class='step #{status} expand'>"
303
+ @builder << "<li id='#{@step_id}' class='step #{status} expand'>"
265
304
  else
266
- @builder << "<li class='step #{status}'>"
305
+ @builder << "<li id='#{@step_id}' class='step #{status}'>"
267
306
  end
268
307
  end
269
308
 
270
309
  def after_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
271
310
  return if @hide_this_step
272
311
  # print snippet for undefined steps
312
+ unless outline_step?(@step)
313
+ keyword = @step.actual_keyword(@previous_step_keyword)
314
+ @previous_step_keyword = keyword
315
+ end
273
316
  if status == :undefined
274
- keyword = @step.actual_keyword if @step.respond_to?(:actual_keyword)
275
- step_multiline_class = @step.multiline_arg ? @step.multiline_arg.class : nil
276
317
  @builder.pre do |pre|
277
- pre << @runtime.snippet_text(keyword,step_match.instance_variable_get("@name") || '',step_multiline_class)
318
+ # TODO: snippet text should be an event sent to the formatter so we don't
319
+ # have this couping to the runtime.
320
+ pre << @runtime.snippet_text(keyword,step_match.instance_variable_get("@name") || '', @step.multiline_arg)
278
321
  end
279
322
  end
280
323
  @builder << '</li>'
@@ -286,7 +329,8 @@ module Closer
286
329
  line_index = $2.to_i - 1
287
330
 
288
331
  file = $1.force_encoding('UTF-8')
289
- File.readlines(File.expand_path(file))[line_index..-1].each do |line|
332
+ file = File.join(gem_dir, file) unless File.exist?(file)
333
+ File.readlines(file)[line_index..-1].each do |line|
290
334
  step_contents << line
291
335
  break if line.chop == 'end' or line.chop.start_with?('end ')
292
336
  end
@@ -309,6 +353,7 @@ module Closer
309
353
 
310
354
  def exception(exception, status)
311
355
  return if @hide_this_step
356
+ print_messages
312
357
  build_exception_detail(exception)
313
358
  end
314
359
 
@@ -319,14 +364,14 @@ module Closer
319
364
 
320
365
  def before_multiline_arg(multiline_arg)
321
366
  return if @hide_this_step || @skip_step
322
- if ::Cucumber::Ast::Table === multiline_arg
367
+ if AST_DATA_TABLE === multiline_arg
323
368
  @builder << '<table>'
324
369
  end
325
370
  end
326
371
 
327
372
  def after_multiline_arg(multiline_arg)
328
373
  return if @hide_this_step || @skip_step
329
- if ::Cucumber::Ast::Table === multiline_arg
374
+ if AST_DATA_TABLE === multiline_arg
330
375
  @builder << '</table>'
331
376
  end
332
377
  end
@@ -338,7 +383,6 @@ module Closer
338
383
  end
339
384
  end
340
385
 
341
-
342
386
  def before_table_row(table_row)
343
387
  @row_id = table_row.dom_id
344
388
  @col_index = 0
@@ -401,12 +445,24 @@ module Closer
401
445
  end
402
446
 
403
447
  def print_table_row_messages
448
+ return if @delayed_messages.empty?
449
+
450
+ @builder.td(:class => 'message') do
451
+ @builder << @delayed_messages.join(", ")
452
+ end
453
+ empty_messages
404
454
  end
405
455
 
406
456
  def empty_messages
407
457
  @delayed_messages = []
408
458
  end
409
459
 
460
+ def after_test_case(test_case, result)
461
+ if result.failed? and not @scenario_red
462
+ set_scenario_color_failed
463
+ end
464
+ end
465
+
410
466
  protected
411
467
 
412
468
  def build_exception_detail(exception)
@@ -449,26 +505,23 @@ module Closer
449
505
  end
450
506
 
451
507
  def set_scenario_color_failed
452
- id = current_time_string
453
- style = 'display: none; margin: 0; padding: 0;'
454
- @builder << "<div id=\"#{id}\" style=\"#{style}\"></div>"
455
-
456
508
  @builder.script do
457
509
  @builder.text!("makeRed('cucumber-header');") unless @header_red
458
510
  @header_red = true
459
- @builder.text!("$(function() { $('##{id}').closest('.scenario').addClass('faild'); });") unless @scenario_red
511
+ scenario_or_background = @in_background ? "background" : "scenario"
512
+ @builder.text!("makeRed('#{scenario_or_background}_#{@scenario_number}');") unless @scenario_red
460
513
  @scenario_red = true
514
+ if @options[:expand] and @inside_outline
515
+ @builder.text!("makeRed('#{scenario_or_background}_#{@scenario_number}_#{@outline_row}');")
516
+ end
461
517
  end
462
518
  end
463
519
 
464
520
  def set_scenario_color_pending
465
- id = current_time_string
466
- style = 'display: none; margin: 0; padding: 0;'
467
- @builder << "<div id=\"#{id}\" style=\"#{style}\"></div>"
468
-
469
521
  @builder.script do
470
522
  @builder.text!("makeYellow('cucumber-header');") unless @header_red
471
- @builder.text!("$(function() { $('##{id}').closest('.scenario').addClass('pending'); });") unless @scenario_red
523
+ scenario_or_background = @in_background ? "background" : "scenario"
524
+ @builder.text!("makeYellow('#{scenario_or_background}_#{@scenario_number}');") unless @scenario_red
472
525
  end
473
526
  end
474
527
 
@@ -491,14 +544,14 @@ module Closer
491
544
  end
492
545
  end
493
546
 
494
- step_file = step_match.file_colon_line.force_encoding('UTF-8')
547
+ step_file = step_match.file_colon_line
495
548
  step_file.gsub(/^([^:]*\.rb):(\d*)/) do
496
549
  step_file = "<span style=\"cursor: pointer;\" onclick=\"toggle_step_file(this); return false;\">#{step_file}</span>"
497
- end
498
550
 
499
- @builder.div(:class => 'step_file') do |div|
500
- @builder.span do
501
- @builder << step_file
551
+ @builder.div(:class => 'step_file') do |div|
552
+ @builder.span do
553
+ @builder << step_file
554
+ end
502
555
  end
503
556
  end
504
557
  end
@@ -549,7 +602,7 @@ module Closer
549
602
  def inline_js_content
550
603
  <<-EOF
551
604
 
552
- SCENARIOS = "div.scenario h3";
605
+ SCENARIOS = "h3[id^='scenario_'],h3[id^=background_]";
553
606
 
554
607
  $(document).ready(function() {
555
608
  $(SCENARIOS).css('cursor', 'pointer');
@@ -566,7 +619,6 @@ module Closer
566
619
  $("#expander").css('cursor', 'pointer');
567
620
  $("#expander").click(function() {
568
621
  $(SCENARIOS).siblings().show();
569
- $('li.message').show();
570
622
  });
571
623
  })
572
624
 
@@ -586,7 +638,7 @@ module Closer
586
638
  end
587
639
 
588
640
  def move_progress
589
- @builder << " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
641
+ #@builder << " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
590
642
  end
591
643
 
592
644
  def percent_done
@@ -602,7 +654,7 @@ module Closer
602
654
  end
603
655
 
604
656
  def backtrace_line(line)
605
- line.gsub(/\A([^:]*\.(?:rb|feature|haml)):(\d*).*\z/) do
657
+ line.gsub(/^([^:]*\.(?:rb|feature|haml)):(\d*).*$/) do
606
658
  if ENV['TM_PROJECT_DIRECTORY']
607
659
  "<a href=\"txmt://open?url=file://#{File.expand_path($1)}&line=#{$2}\">#{$1}:#{$2}</a> "
608
660
  else
@@ -640,7 +692,11 @@ module Closer
640
692
  end
641
693
 
642
694
  def create_builder(io)
643
- ::Cucumber::Formatter::OrderedXmlMarkup.new(:target => io, :indent => 0)
695
+ Builder::XmlMarkup.new(:target => io, :indent => 0)
696
+ end
697
+
698
+ def outline_step?(step)
699
+ not @step.step.respond_to?(:actual_keyword)
644
700
  end
645
701
 
646
702
  class SnippetExtractor #:nodoc:
@@ -666,8 +722,12 @@ module Closer
666
722
 
667
723
  def lines_around(file, line)
668
724
  if File.file?(file)
725
+ begin
669
726
  lines = File.open(file).read.split("\n")
670
- min = [0, line-3].max
727
+ rescue ArgumentError
728
+ return "# Couldn't get snippet for #{file}"
729
+ end
730
+ min = [0, line-3].max
671
731
  max = [line+1, lines.length-1].min
672
732
  selected_lines = []
673
733
  selected_lines.join("\n")
@@ -0,0 +1,3 @@
1
+ Dir::glob(File.dirname(__FILE__) + '/helpers/*.rb').each do |file|
2
+ require file
3
+ end
@@ -0,0 +1,70 @@
1
+ module Closer
2
+ module Helpers
3
+ module Capture
4
+ feature_dir = 'features'
5
+ ARGV.each_with_index do |arg, i|
6
+ if %w{ -r --require }.include?(arg)
7
+ feature_dir = ARGV[i + 1]
8
+ break
9
+ end
10
+ end
11
+ IMAGE_DIR = File.join(feature_dir, 'reports', 'images')
12
+ FileUtils.mkdir_p(File.basename(IMAGE_DIR))
13
+
14
+ @@_screen_count = 0
15
+ @@_images = []
16
+
17
+ def capture(options = {})
18
+ options ||= {}
19
+ options = {:title => options} if options.is_a?(String)
20
+ return if ENV['FORMAT'] == 'junit'
21
+
22
+ url = Rack::Utils.unescape(current_url)
23
+
24
+ @@_screen_count += 1
25
+
26
+ image = File.join(IMAGE_DIR, "#{@@_screen_count}.png")
27
+ page.driver.save_screenshot(image, :full => true)
28
+
29
+ attrs = {
30
+ :class => 'screenshot',
31
+ :src => "#{File.basename(IMAGE_DIR)}/#{File.basename(image)}",
32
+ :title => options[:title],
33
+ :alt => url
34
+ }
35
+ image_tag = "<img #{attrs.map{|k, v| "#{k}=\"#{v}\"" }.join(' ')} />"
36
+
37
+ if options[:flash]
38
+ puts image_tag
39
+ else
40
+ @@_images << image_tag
41
+ end
42
+ end
43
+
44
+ def resize_window(width, height)
45
+ case Capybara.current_driver
46
+ when :poltergeist
47
+ Capybara.current_session.driver.resize(width, height)
48
+ when :selenium
49
+ Capybara.current_session.driver.browser.manage.window.resize_to(width, height)
50
+ when :webkit
51
+ # TODO
52
+ end
53
+ end
54
+
55
+ def flash_image_tags
56
+ if @@_images.size > 0
57
+ puts @@_images.join("\n")
58
+ @@_images.clear
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+
66
+ World(Closer::Helpers::Capture)
67
+
68
+ AfterStep do |step|
69
+ flash_image_tags
70
+ end
@@ -1,3 +1,3 @@
1
1
  module Closer
2
- VERSION = '0.1.6'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -40,8 +40,7 @@ task :close => dependencies do |t, args|
40
40
  end
41
41
 
42
42
  args = [
43
- "-r #{feature_dir}",
44
- feature_dir == 'features' ? '' : '--exclude features/step_definitions',
43
+ "--require #{feature_dir}",
45
44
  '--guess',
46
45
  '--quiet',
47
46
  '--no-multiline',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: closer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ichy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-31 00:00:00.000000000 Z
11
+ date: 2015-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +74,8 @@ files:
74
74
  - lib/closer/formatter/html.rb
75
75
  - lib/closer/formatter/jquery-min.js
76
76
  - lib/closer/formatter/screenshot.js
77
+ - lib/closer/helpers.rb
78
+ - lib/closer/helpers/capture.rb
77
79
  - lib/closer/rails/engine.rb
78
80
  - lib/closer/rails/railtie.rb
79
81
  - lib/closer/tasks.rb