captureful_formatter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 30f3679548cc23945e25fe8752233c60bd2af5fe
4
+ data.tar.gz: 9a7369666c42c652ca0311d87bbf10d5430af47c
5
+ SHA512:
6
+ metadata.gz: e4cf41d025eacb2900a37fd594f70448195d77ad672234307f69b24cc7094d6f2f90f927b77490f8eca32db7f76b1cb3c8faa5389b889c733c60828bb498ec38
7
+ data.tar.gz: 5e2d0bf8c276f76f634c8c31f6e53bd262559203f968856141f44a82bbea4023c94fcd4854e775fc1437d361f2dfadba4e2f8f160868350c15c664f3db5742ef
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in captureful_formatter.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Atsushi Yasuda
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # CapturefulFormatter
2
+
3
+ Yet another custom formatter for [Turnip](https://github.com/jnicklas/turnip). Saving screenshots and pages each steps.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'captureful_formatter'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install captureful_formatter
20
+
21
+ Now edit the .rspec file in your project directory (create it if doesn't exist), and add the following line:
22
+
23
+ -r captureful_formatter
24
+ -f CapturefulFormatter::Formatter
25
+
26
+ ## Usage
27
+
28
+ Run this command.
29
+
30
+ $ rspec
31
+
32
+ ## Configuration
33
+
34
+ ```ruby
35
+ CapturefulFormatter.configure do |config|
36
+ c.output_directory = "./.captureful_formatter" # The path to where the test report is saved.
37
+ c.template_path = "path/to/template" # your custom template file path.
38
+ end
39
+ ```
40
+
41
+ now, captureful_formatter support erb template only.
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it ( https://github.com/ayasuda/captureful_formatter/fork )
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'captureful_formatter/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "captureful_formatter"
8
+ spec.version = CapturefulFormatter::VERSION
9
+ spec.authors = ["Atsushi Yasuda"]
10
+ spec.email = ["atsushi.yasuda.jp@gmail.com"]
11
+ spec.summary = %q(Yet another RSpec custom formatter for Turnip)
12
+ spec.description = %q(Yet another RSpec custom formatter for Turnip. Take screenshots step by step.)
13
+ spec.homepage = "https://github.com/crowdworks/captureful_formatter"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'capybara', "~> 2.2"
22
+ spec.add_dependency 'rspec', '>=3.0.0'
23
+ spec.add_dependency 'turnip', '~> 1.2.2'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.7"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ end
@@ -0,0 +1,54 @@
1
+ require 'captureful_formatter/formatter'
2
+ require 'captureful_formatter/notifications'
3
+ require 'captureful_formatter/printer'
4
+ require 'captureful_formatter/version'
5
+ require 'logger'
6
+
7
+ module CapturefulFormatter
8
+ @@configuration = nil
9
+ class << self
10
+
11
+ def configure
12
+ yield configuration if block_given?
13
+
14
+ configuration
15
+ end
16
+
17
+ def configuration
18
+ @@configuration ||= Configuration.new
19
+ end
20
+ end
21
+
22
+ class Configuration
23
+ attr_accessor :output_directory
24
+
25
+ # what types to take screenshot
26
+ #
27
+ # @see http://rubydoc.info/gems/rspec-core/RSpec/Core/Metadata
28
+ attr_accessor :target_type
29
+
30
+ attr_accessor :template_path
31
+
32
+ def logger
33
+ @logger ||= default_logger
34
+ end
35
+
36
+ private
37
+
38
+ def default_logger
39
+ log = Logger.new($stderr)
40
+ log.level = Logger::INFO
41
+
42
+ log
43
+ end
44
+ end
45
+ end
46
+
47
+ CapturefulFormatter.configure do |c|
48
+ c.output_directory = "./.captureful_formatter"
49
+ c.target_type = [:feature]
50
+ c.template_path = File.join(File.dirname(__FILE__), "/../templates/test_report.html.erb")
51
+ end
52
+
53
+ require 'captureful_formatter/rspec_ext/rspec_core_reporter'
54
+ require 'captureful_formatter/turnip_ext/turnip_rspec_execute'
@@ -0,0 +1,92 @@
1
+ require 'capybara'
2
+ require 'digest/md5'
3
+ require 'fileutils'
4
+ require 'rspec/core'
5
+ require "rspec/core/formatters/base_formatter"
6
+
7
+ module CapturefulFormatter
8
+ class Formatter < ::RSpec::Core::Formatters::BaseFormatter
9
+ ::RSpec::Core::Formatters.register self, :start, :example_group_started, :example_group_finished,
10
+ :example_started, :step_started, :example_passed, :example_pending, :example_failed, :stop
11
+
12
+ Example = Struct.new("Example", :groups, :steps, :status, :fail_info)
13
+ FailInfo = Struct.new("FailInfo", :exception, :backtraces)
14
+
15
+ def start notification
16
+ @should_capture = false
17
+ @examples = {}
18
+ @group_level = 0
19
+ @group_examples = []
20
+ end
21
+
22
+ def example_group_started notification
23
+ @should_capture = CapturefulFormatter.configuration.target_type.include? notification.group.metadata[:type]
24
+ @group_level += 1
25
+ @group_examples.push notification.group.description
26
+ end
27
+
28
+ def example_group_finished(notification)
29
+ @should_capture = false
30
+ @group_level -= 1
31
+ @group_examples.pop
32
+ end
33
+
34
+ def example_started notification
35
+ return unless @should_capture
36
+ @current_example_hash = Digest::MD5.hexdigest(@group_examples.join())
37
+ @examples[@current_example_hash] = Example.new(@group_examples.dup, [] , nil, nil)
38
+ end
39
+
40
+ def step_started notification
41
+ save_step_sessions notification.description
42
+ end
43
+
44
+ def example_passed notification
45
+ return unless @should_capture
46
+ @examples[@current_example_hash].status = :passed
47
+ end
48
+
49
+ def example_pending notification
50
+ return unless @should_capture
51
+ @examples[@current_example_hash].status = :pending
52
+ end
53
+
54
+ def example_failed notification
55
+ return unless @should_capture
56
+ @examples[@current_example_hash].status = :failed
57
+ @examples[@current_example_hash].fail_info = FailInfo.new(notification.exception.to_s, notification.formatted_backtrace.dup)
58
+ end
59
+
60
+ def stop notification
61
+ publish_reports
62
+ rescue => e
63
+ CapturefulFormatter.configuration.logger.error e.to_s
64
+ ensure
65
+ cleanup_reports
66
+ end
67
+
68
+ private
69
+
70
+ def report_save_dir
71
+ @dir ||= Pathname.new(Dir.mktmpdir ["d", self.object_id.to_s ])
72
+ end
73
+
74
+ def save_step_sessions step_description
75
+ return unless @should_capture
76
+ current_count = @examples[@current_example_hash].steps.size
77
+ @examples[@current_example_hash].steps << step_description
78
+ filename_base = report_save_dir.join("#{@current_example_hash}-#{current_count.to_s}")
79
+ Capybara.current_session.save_page filename_base.sub_ext(".html")
80
+ Capybara.current_session.save_screenshot filename_base.sub_ext(".png")
81
+ end
82
+
83
+ def publish_reports
84
+ FileUtils.copy_entry report_save_dir, CapturefulFormatter.configuration.output_directory
85
+ CapturefulFormatter::Printer.print @examples
86
+ end
87
+
88
+ def cleanup_reports
89
+ FileUtils.remove_entry_secure report_save_dir
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,12 @@
1
+ module CapturefulFormatter
2
+ module Notifications
3
+ StepNotification = Struct.new(:description, :keyword, :extra_args) do
4
+ private_class_method :new
5
+
6
+ # @api
7
+ def self.from_step_object(data)
8
+ new data.description, data.keyword, data.extra_args
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,46 @@
1
+ require 'erb'
2
+ require 'ostruct'
3
+
4
+ module CapturefulFormatter
5
+ module Printer
6
+ class TemplateMissingError < StandardError; end
7
+
8
+ class Template < OpenStruct
9
+ def render(template)
10
+ ERB.new(template).result(binding)
11
+ end
12
+
13
+ def background_by_status(status)
14
+ case status
15
+ when :passed then "bg-success"
16
+ when :pending then "bg-warning"
17
+ when :failed then "bg-danger"
18
+ else "bg-info"
19
+ end
20
+ end
21
+ end
22
+
23
+ class << self
24
+ attr_accessor :title
25
+
26
+ def print examples
27
+ path = template_path
28
+ params = {
29
+ title: "test report",
30
+ examples: examples
31
+ }
32
+ template = Template.new(params)
33
+ filename = File.join(CapturefulFormatter.configuration.output_directory, "/index.html")
34
+ File.write(filename ,template.render(File.read(path)))
35
+ end
36
+
37
+ def template_path
38
+ path = CapturefulFormatter.configuration.template_path
39
+ path = File.absolute_path(path)
40
+ raise TemplateMissingError, path unless File.exists? path
41
+
42
+ path
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,22 @@
1
+ require 'rspec/core/reporter'
2
+
3
+ module CapturefulFormatter
4
+ module RSpec
5
+ module Core
6
+ module Reporter
7
+ def step_started(step)
8
+ CapturefulFormatter::Notifications::StepNotification.from_step_object(step)
9
+ notify :step_started, CapturefulFormatter::Notifications::StepNotification.from_step_object(step)
10
+ rescue => e
11
+ puts e
12
+ end
13
+
14
+ def step_finished(step)
15
+ notify :step_finished, CapturefulFormatter::Notifications::StepNotification.from_step_object(step)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ ::RSpec::Core::Reporter.prepend(CapturefulFormatter::RSpec::Core::Reporter)
@@ -0,0 +1,18 @@
1
+ require 'turnip/rspec'
2
+
3
+ module CapturefulFormatter
4
+ module Turnip
5
+ module RSpec
6
+ module Execute
7
+ def run_step(feature_file, step)
8
+ reporter = ::RSpec.configuration.reporter
9
+ reporter.step_started(step)
10
+ super(feature_file, step)
11
+ reporter.step_finished(step)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ ::Turnip::RSpec::Execute.prepend(CapturefulFormatter::Turnip::RSpec::Execute)
@@ -0,0 +1,3 @@
1
+ module CapturefulFormatter
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+ require 'stringio'
3
+
4
+ describe CapturefulFormatter::Formatter do
5
+ let(:capybara_session) { double("current_session") }
6
+ let(:formatter) { CapturefulFormatter::Formatter.new(output) }
7
+ let(:output) { StringIO.new }
8
+
9
+ let(:example) { RSpec::Core::ExampleGroup.describe.example }
10
+ let(:example_group) { RSpec::Core::ExampleGroup }
11
+
12
+ let(:step_defenition) { Turnip::Builder::Step.new }
13
+
14
+ let(:example_notification) { RSpec::Core::Notifications::ExampleNotification.for(example) }
15
+ let(:group_notification) { RSpec::Core::Notifications::GroupNotification.new(example_group) }
16
+ let(:start_notification) { RSpec::Core::Notifications::StartNotification.new }
17
+ let(:step_notification) { CapturefulFormatter::Notifications::StepNotification.from_step_object(step_defenition) }
18
+
19
+ before do
20
+ example
21
+ allow(Capybara).to receive(:current_session).and_return(capybara_session)
22
+ formatter.start start_notification
23
+ end
24
+
25
+ subject { formatter }
26
+ it { is_expected.to be_a(CapturefulFormatter::Formatter) }
27
+
28
+ context "example group is not :feature" do
29
+ before do
30
+ allow(RSpec::Core::ExampleGroup).to receive(:metadata).and_return({type: :model})
31
+ formatter.example_group_started group_notification
32
+ end
33
+
34
+ describe "at step by steps" do
35
+ it "do nothing" do
36
+ expect(capybara_session).not_to receive(:save_screenshot)
37
+ expect(capybara_session).not_to receive(:save_page)
38
+ formatter.step_started step_notification
39
+ end
40
+ end
41
+ end
42
+
43
+ context "example group is :feature" do
44
+ before do
45
+ allow(RSpec::Core::ExampleGroup).to receive(:metadata).and_return({type: :feature})
46
+ formatter.example_group_started group_notification
47
+ end
48
+
49
+ describe "at step by steps" do
50
+ before { formatter.example_started example_notification }
51
+ after { formatter.example_passed example_notification }
52
+
53
+ it "save page and screen shot" do
54
+ expect(capybara_session).to receive(:save_screenshot)
55
+ expect(capybara_session).to receive(:save_page)
56
+ formatter.step_started step_notification
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe CapturefulFormatter::Printer do
4
+ shared_examples "a safety file path" do
5
+ it "is existed" do
6
+ expect(File.exists? subject).to be_truthy
7
+ end
8
+
9
+ it "is full path" do
10
+ expect(subject).to start_with("/")
11
+ end
12
+ end
13
+
14
+ describe "#template_file" do
15
+ subject { CapturefulFormatter::Printer.template_path }
16
+
17
+ it "returns default template" do
18
+ expect(subject).to eq File.absolute_path(File.join(File.dirname(__FILE__) + "../../../templates/test_report.html.erb"))
19
+ end
20
+
21
+ describe "on seted up template path at configure" do
22
+ before do
23
+ CapturefulFormatter.configure do |config|
24
+ config.template_path = template
25
+ end
26
+ end
27
+
28
+ context "setup a absolute path" do
29
+ let(:template) { File.join(File.dirname(__FILE__), "/../example/test_template.erb.html") }
30
+ it_behaves_like "a safety file path"
31
+ end
32
+
33
+ context "setup a relative path" do
34
+ let(:template) { "./spec/example/test_template.erb.html" }
35
+ it_behaves_like "a safety file path"
36
+ end
37
+
38
+ context "setup no exists file" do
39
+ let(:template) { "/path/to/missing" }
40
+ specify { expect{ subject }.to raise_error(CapturefulFormatter::Printer::TemplateMissingError) }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'securerandom'
3
+
4
+ describe CapturefulFormatter do
5
+ describe "VERSION" do
6
+ subject { CapturefulFormatter::VERSION }
7
+ it { is_expected.to eq "0.0.1" }
8
+ end
9
+
10
+ describe ".configuration" do
11
+ subject { CapturefulFormatter.configuration }
12
+ it { is_expected.to have_attributes(:output_directory => "./.captureful_formatter")}
13
+ it { is_expected.to have_attributes(:target_type => [:feature])}
14
+ it { is_expected.to have_attributes(:template_path => a_string_starting_with("/"))}
15
+ end
16
+
17
+ describe ".configure" do
18
+ let(:configuration) { CapturefulFormatter.configuration }
19
+ let(:new_attribute) { SecureRandom.base64(10) }
20
+ subject do
21
+ lambda do
22
+ CapturefulFormatter.configure do |c|
23
+ c.output_directory = new_attribute
24
+ end
25
+ end
26
+ end
27
+ it { is_expected.to change { configuration.output_directory }.to(new_attribute) }
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ja">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title><%= title %></title>
6
+ </head>
7
+ <body>
8
+ <ul>
9
+ <% examples.each do |example_hash, example| %>
10
+ <li><%= example.groups.join(" - ") %></li>
11
+ <% end %>
12
+ </ul>
13
+ </body>
14
+ </html>
@@ -0,0 +1,6 @@
1
+ require 'captureful_formatter'
2
+
3
+ Dir.glob(File.dirname(__FILE__) + '/support/**/*.rb') { |f| require(f) }
4
+
5
+ RSpec.configure do |config|
6
+ end
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ja">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title><%= title %></title>
6
+ <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
7
+ </head>
8
+ <body>
9
+ <nav class="navbar navbar-inverse navbar-static-top">
10
+ <div class="container">
11
+ <a class="navbar-brand" href="#" title="<%= title %>">
12
+ <span class="navbar-brand-left-color"><%= title %></span>
13
+ </a>
14
+ </div>
15
+ </nav>
16
+
17
+ <div class="container">
18
+ <div class="row">
19
+ <h2 id="index">index</h2>
20
+ <ul>
21
+ <% examples.each do |example_hash, example| %>
22
+ <li class="<%= background_by_status example.status %>"><a href="#<%= example_hash %>"><%= example.groups.join(" - ") %></a></li>
23
+ <% end %>
24
+ </ul>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="container">
29
+ <div class="row">
30
+ <h2>examples</h2>
31
+ <% examples.each do |example_hash, example| %>
32
+ <h3 id=<%= example_hash %>><%= example.groups.join(" - ") %></h3>
33
+ <% example.steps.each_with_index do |step, index| %>
34
+ <div class="row <%= (example.steps.size - 1 == index)? background_by_status(example.status) : "" %>">
35
+ <div class="col-md-5">
36
+ <a href="./<%= example_hash %>-<%= index %>.png">
37
+ <img class="img-rounded" height="256" wedth="320" src="./<%= example_hash %>-<%= index %>.png">
38
+ </a>
39
+ </div>
40
+ <div class="col-md-6">
41
+ <p><%= step %><p>
42
+ <% if example.steps.size - 1 == index %>
43
+ <% unless example.fail_info.nil? %>
44
+ <p><%= example.fail_info.exception %></p>
45
+ <ul>
46
+ <% example.fail_info.backtraces.each do |backtrace| %>
47
+ <li><%= backtrace %></li>
48
+ <% end %>
49
+ </ul>
50
+ <% end %>
51
+ <% end %>
52
+ </div>
53
+ </div><!-- row -->
54
+ <% end %>
55
+ <hr />
56
+ <% end %>
57
+ </div>
58
+ </div>
59
+
60
+
61
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
62
+ <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
63
+ </body>
64
+ </html>
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: captureful_formatter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Atsushi Yasuda
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capybara
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: turnip
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.2.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ description: Yet another RSpec custom formatter for Turnip. Take screenshots step
84
+ by step.
85
+ email:
86
+ - atsushi.yasuda.jp@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - captureful_formatter.gemspec
98
+ - lib/captureful_formatter.rb
99
+ - lib/captureful_formatter/formatter.rb
100
+ - lib/captureful_formatter/notifications.rb
101
+ - lib/captureful_formatter/printer.rb
102
+ - lib/captureful_formatter/rspec_ext/rspec_core_reporter.rb
103
+ - lib/captureful_formatter/turnip_ext/turnip_rspec_execute.rb
104
+ - lib/captureful_formatter/version.rb
105
+ - spec/captureful_formatter/formatter_spec.rb
106
+ - spec/captureful_formatter/printer_spec.rb
107
+ - spec/captureful_formatter_spec.rb
108
+ - spec/example/test_template.erb.html
109
+ - spec/spec_helper.rb
110
+ - templates/test_report.html.erb
111
+ homepage: https://github.com/crowdworks/captureful_formatter
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.2.2
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Yet another RSpec custom formatter for Turnip
135
+ test_files:
136
+ - spec/captureful_formatter/formatter_spec.rb
137
+ - spec/captureful_formatter/printer_spec.rb
138
+ - spec/captureful_formatter_spec.rb
139
+ - spec/example/test_template.erb.html
140
+ - spec/spec_helper.rb