capybara-animate 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0674a67083e92fe9c446bb1696c31f21fa0e9ed
4
+ data.tar.gz: 5b71c852f577c86c60eeaa3795943017bbb118aa
5
+ SHA512:
6
+ metadata.gz: 7399daad2edf984af8e0ec624e9546304fa0571a03c6378df79be0137d7af0c7759c0edb69f8816c53337a98c951a8bdd323f52e6ebe087d7cb270c33595c40f
7
+ data.tar.gz: 85264de1b6dff17abd232399c221be519e93da31e48228ec193a7d8789cb504966601f767c6aaa0a5ad41d3f145758bc16d61f7cdcbc7d33aac79f32147d5553
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ SimpleCov.start do
2
+ add_filter "/spec/"
3
+ end
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in capybara-animate.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Caleb Buxton
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.
@@ -0,0 +1,41 @@
1
+ Capybara::Animate
2
+ =
3
+
4
+ Take a peak at your headless browser acceptance tests. Capybara::Animate captures screenshots after Capybara driven user actions in order to compose an animation of your scenario.
5
+
6
+ ## Installation
7
+
8
+ Capybara::Animate depends on ImageMagick, on OS X installation is simple: ```brew install imagemagick```
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'capybara-animate', group: :test
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install capybara-animate
21
+
22
+ ## Usage
23
+
24
+ Capybara::Animate automatically hooks in to Cucumber Scenarios tagged with ```@javascript```. It depends on a driver that implements ```#save_screenshot```
25
+
26
+ ## Credit
27
+
28
+ This is entirely based off of the work of [Shimpei Makimoto's RubyConf 2013 Lightning Talk](https://github.com/makimoto/feature_spec_with_animation/). Simply: my contributions are to make it a gem that plugs into Cucumber scenarios automatically.
29
+
30
+ ## Contributing
31
+
32
+ In development, Capybara::Animate depends on capybara-webkit. Capybara-webkit depends on the X window system and Qt, see [capybara-webkit's README for instructions on how to setup its dependencies](https://github.com/thoughtbot/capybara-webkit/)
33
+
34
+ 1. Fork it
35
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
36
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
37
+ * Include test coverage.
38
+ * Do not break existing tests.
39
+ * Add documentation for new features.
40
+ 4. Push to the branch (`git push origin my-new-feature`)
41
+ 5. Create new Pull Request
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "cucumber/rake/task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.rspec_opts = %w{--format progress}
7
+ end
8
+
9
+ Cucumber::Rake::Task.new(:feat) do |t|
10
+ t.cucumber_opts = %w{--format progress}
11
+ end
12
+
13
+ task :default => [:spec,:feat]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "capybara-animate"
7
+ spec.version = File.read("VERSION")
8
+ spec.authors = ["Caleb Buxton"]
9
+ spec.email = ["me@cpb.ca"]
10
+ spec.description = %q{Composes Gif Animations from screenshots taken after capybara specified user actions.}
11
+ spec.summary = %q{Gif Animations of your Headless Browser tests.}
12
+ spec.homepage = "https://github.com/cpb/capybara-animate"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "capybara", ">= 2.0.2", "< 2.2.0"
21
+ spec.add_dependency "gifanime", "~> 0.1"
22
+ spec.add_development_dependency "aruba"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "pry"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec", "~> 3.0.0.beta2"
27
+ spec.add_development_dependency "simplecov"
28
+ end
@@ -0,0 +1,59 @@
1
+ @disable-bundler
2
+ Feature: README.md statements of public interface
3
+ In order to see whats going on in headless browser interaction scenarios
4
+ As a developer
5
+ I expect scenarios tagged with @javascript or @record to be captured as gif animations
6
+
7
+ Background:
8
+ Given a file named "Gemfile" with:
9
+ """
10
+ gem "cucumber"
11
+ gem "capybara-webkit"
12
+ gem "rspec-expectations"
13
+ gem "capybara-animate", path: "../../"
14
+ """
15
+ And a file named "features/support/env.rb" with:
16
+ """
17
+ require 'capybara/cucumber'
18
+ require 'capybara/webkit'
19
+ require 'capybara/animate'
20
+ require 'rspec/expectations'
21
+ Capybara.javascript_driver = :webkit
22
+ """
23
+ And I run `bundle install`
24
+
25
+ Scenario: Running a scenario tagged with @javascript
26
+ Given a file named "features/capybara-webkit-javascript.feature" with:
27
+ """
28
+ Feature: Search for Ruby gems with !rubygems
29
+ As a Ruby developer
30
+ In order to quickly find fancy gems
31
+ The '!rubygems <gemname>` query should take me directly to fancy gems
32
+
33
+ @javascript
34
+ Scenario: Finding the Capybara gem
35
+ Given I am on the DDG homepage
36
+ When I search for "!rubygems capybara"
37
+ Then I should see an exact match on the Ruby Gems search page
38
+ """
39
+ And a file named "features/step_definitions/capybara-webkit-javascript_steps.rb" with:
40
+ """
41
+ Given /^I am on the DDG homepage$/ do
42
+ visit 'http://duckduckgo.com'
43
+ end
44
+
45
+ When /^I search for "([^"]*)"$/ do |query|
46
+ @query = query
47
+ fill_in 'q', :with => query
48
+ click_button "search_button_homepage"
49
+ end
50
+
51
+ Then /^I should see an exact match on the Ruby Gems search page$/ do
52
+ gem_name = @query.split(' ').last
53
+ page.should have_selector("a[href='/gems/#{gem_name}']")
54
+ end
55
+ """
56
+ When I successfully run `bundle exec cucumber` for up to 48 seconds
57
+ Then the output should contain "1 scenario (1 passed)"
58
+ And a file named "html-report/Finding the Capybara gem.gif" should exist
59
+ And the animated gif "html-report/Finding the Capybara gem.gif" should have 4 frames
@@ -0,0 +1,11 @@
1
+ require 'rmagick'
2
+
3
+ THE_ANIMATED_GIF = Transform(/the animated gif "(.*?)"/) do |filename|
4
+ in_current_dir do
5
+ Magick::ImageList.new(filename)
6
+ end
7
+ end
8
+
9
+ Then(/^(#{THE_ANIMATED_GIF}) should have (\d+) frames$/) do |animated_gif, expected_frames|
10
+ expect(animated_gif.length).to eql(expected_frames.to_i)
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'pry'
2
+ require 'aruba/cucumber'
@@ -0,0 +1,48 @@
1
+ require 'capybara/animate/empty_recorder'
2
+
3
+ module Capybara
4
+ module Animate
5
+ VERSION = File.read(File.join(File.dirname(__FILE__),"..","..","VERSION")).freeze
6
+
7
+ def self.included(base)
8
+ base.send(:prepend,UserActions)
9
+ end
10
+
11
+ def recorder
12
+ @recorder ||= EmptyRecorder.new
13
+ end
14
+
15
+ def recorder=(other)
16
+ @recorder = other
17
+ end
18
+
19
+ USER_ACTIONS = [
20
+ :attach_file,
21
+ :check,
22
+ :choose,
23
+ :click_button,
24
+ :click_link,
25
+ :click_link_or_button,
26
+ :click_on,
27
+ :evaluate_script,
28
+ :execute_script,
29
+ :fill_in,
30
+ :go_back,
31
+ :go_forward,
32
+ :unselect,
33
+ :visit,
34
+ ].freeze
35
+
36
+ module UserActions
37
+ USER_ACTIONS.each do |action_method|
38
+ define_method action_method do |*args, &block|
39
+ super(*args, &block)
40
+ self.recorder.add(self)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ require 'capybara/animate/gif_recorder'
48
+ require 'capybara/animate/hooks/cucumber' if defined?(Cucumber)
@@ -0,0 +1,14 @@
1
+ module Capybara
2
+ module Animate
3
+ class EmptyRecorder
4
+
5
+ def add(page)
6
+
7
+ end
8
+
9
+ def generate!
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,37 @@
1
+ require 'gifanime'
2
+
3
+ module Capybara
4
+ module Animate
5
+ class GifRecorder
6
+ attr_reader :output_file
7
+
8
+ def initialize(output_name)
9
+ @output_file = "#{output_name}.gif"
10
+ make_path_unless_exists(output_file)
11
+ @gif_anime = Gifanime.new(output_file, delay: 40)
12
+ @tmpdir = Dir.mktmpdir
13
+ end
14
+
15
+ def add(page)
16
+ file = "#{tmpdir}/#{current_frame}.png"
17
+ page.save_screenshot(file, width: 320, height: 480)
18
+ gif_anime.add(file)
19
+ end
20
+
21
+ def generate!
22
+ gif_anime.generate!
23
+ end
24
+
25
+ private
26
+ attr_reader :tmpdir, :gif_anime
27
+
28
+ def current_frame
29
+ gif_anime.frames.length
30
+ end
31
+
32
+ def make_path_unless_exists(file)
33
+ FileUtils.mkdir_p(File.dirname(file)) unless File.exists?(File.dirname(file))
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ if defined?(Capybara::Session)
2
+ Capybara::Session.send(:include, Capybara::Animate)
3
+ Before("@javascript") do |scenario|
4
+ page.recorder = Capybara::Animate::GifRecorder.new("html-report/"+scenario.name)
5
+ end
6
+
7
+ After do |scenario|
8
+ page.recorder.add(page)
9
+ page.recorder.generate!
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ require 'capybara/animate/empty_recorder'
4
+
5
+ describe Capybara::Animate::EmptyRecorder, type: :recorder do
6
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ require 'capybara/animate/gif_recorder'
4
+
5
+ describe Capybara::Animate::GifRecorder, type: :recorder do
6
+ let(:gif_anime) { double(add: true, frames: [], generate!: true) }
7
+ before do
8
+ allow(Gifanime).to receive(:new).and_return(gif_anime)
9
+ end
10
+
11
+ let(:tmpdir) { FileUtils.mkdir_p(Dir.pwd+"/tmp").first }
12
+ before do
13
+ allow(Dir).to receive(:mktmpdir).and_return(tmpdir)
14
+ end
15
+
16
+ let(:output_name) { "the file name" }
17
+
18
+ let(:recorder) { described_class.new(output_name) }
19
+
20
+ subject { recorder }
21
+
22
+ it "should create the output path if it does not yet exist" do
23
+ unique_path = Dir.pwd+"/tmp/#{SecureRandom::uuid}/foobar"
24
+ expect do
25
+ described_class.new(unique_path)
26
+ end.to change { File.exists?(File.dirname(unique_path))}
27
+ end
28
+
29
+ it "sets the output_file based on initialization values" do
30
+ expect(subject.output_file).to eql("#{output_name}.gif")
31
+ end
32
+
33
+ describe "#add" do
34
+ let(:page) { double(save_screenshot: true) }
35
+
36
+ let(:adding) { proc { recorder.add(page) } }
37
+ subject { adding.call }
38
+
39
+ it "should save a screenshot from the page to a file in a temp directory" do
40
+ expect(page).to receive(:save_screenshot).with("#{tmpdir}/0.png", hash_including(:width, :height))
41
+ subject
42
+ end
43
+
44
+ it "should add the saved screenshot to the Gifanime" do
45
+ expect(gif_anime).to receive(:add).with("#{tmpdir}/0.png")
46
+ subject
47
+ end
48
+ end
49
+
50
+ describe "#generate!" do
51
+ let(:generating) { proc { recorder.generate! } }
52
+ subject { generating.call }
53
+
54
+ it "should generate with the Gifanime" do
55
+ expect(gif_anime).to receive(:generate!)
56
+ subject
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Animate do
4
+ ExpectedUserActions = [
5
+ :attach_file,
6
+ :check,
7
+ :choose,
8
+ :click_button,
9
+ :click_link,
10
+ :click_link_or_button,
11
+ :click_on,
12
+ :evaluate_script,
13
+ :execute_script,
14
+ :fill_in,
15
+ :go_back,
16
+ :go_forward,
17
+ :unselect,
18
+ :visit,
19
+ ]
20
+ class Dummy
21
+ ExpectedUserActions.each do |lazy|
22
+ define_method lazy do |*args, &block|
23
+ instance_variable_set("@#{lazy}", true)
24
+ end
25
+
26
+ define_method "#{lazy}?" do |*args, &block|
27
+ !!instance_variable_get("@#{lazy}")
28
+ end
29
+ end
30
+ end
31
+
32
+ it 'should have a version number' do
33
+ expect(Capybara::Animate::VERSION).to_not be_nil
34
+ end
35
+
36
+ context "included into a class" do
37
+ let(:described_class) { Dummy.send(:include, Capybara::Animate) }
38
+
39
+ context "the instance" do
40
+ subject { described_class.new }
41
+
42
+ it "should have an EmptyRecorder set to recorder" do
43
+ expect(subject.recorder).to be_a(Capybara::Animate::EmptyRecorder)
44
+ end
45
+
46
+ it "should be able to set a recorder" do
47
+ expect do
48
+ subject.recorder = :foo
49
+ end.to change { subject.recorder }
50
+ end
51
+
52
+ context "should add itself to the recorder" do
53
+ ExpectedUserActions.each do |attribute|
54
+ it "for #{attribute}" do
55
+ expect(subject.recorder).to receive(:add).with(subject)
56
+ subject.send(attribute)
57
+ end
58
+
59
+ it "and still call the original #{attribute}" do
60
+ expect do
61
+ subject.send(attribute)
62
+ end.to change { subject.send"#{attribute}?" }
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'pry'
4
+ require 'simplecov'
5
+
6
+ require 'capybara/animate'
7
+
8
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| puts f; require f }
@@ -0,0 +1,13 @@
1
+ shared_examples_for type: :recorder do
2
+ it { should respond_to(:add) }
3
+
4
+ it { should respond_to(:generate!) }
5
+
6
+ describe "#add" do
7
+ it "should accept an argument" do
8
+ expect do
9
+ subject.add(double(save_screenshot: true))
10
+ end.to_not raise_error
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capybara-animate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Caleb Buxton
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-27 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.0.2
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: 2.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.2
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: gifanime
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '0.1'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '0.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: aruba
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: '1.3'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: '1.3'
75
+ - !ruby/object:Gem::Dependency
76
+ name: pry
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rake
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 3.0.0.beta2
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: 3.0.0.beta2
117
+ - !ruby/object:Gem::Dependency
118
+ name: simplecov
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ description: Composes Gif Animations from screenshots taken after capybara specified
132
+ user actions.
133
+ email:
134
+ - me@cpb.ca
135
+ executables: []
136
+ extensions: []
137
+ extra_rdoc_files: []
138
+ files:
139
+ - .gitignore
140
+ - .rspec
141
+ - .simplecov
142
+ - .travis.yml
143
+ - Gemfile
144
+ - LICENSE.txt
145
+ - README.md
146
+ - Rakefile
147
+ - VERSION
148
+ - capybara-animate.gemspec
149
+ - features/README.md.feature
150
+ - features/step_definitions/README.md_steps.rb
151
+ - features/support/env.rb
152
+ - lib/capybara/animate.rb
153
+ - lib/capybara/animate/empty_recorder.rb
154
+ - lib/capybara/animate/gif_recorder.rb
155
+ - lib/capybara/animate/hooks/cucumber.rb
156
+ - spec/capybara/animate/empty_recorder_spec.rb
157
+ - spec/capybara/animate/gif_recorder_spec.rb
158
+ - spec/capybara/animate_spec.rb
159
+ - spec/spec_helper.rb
160
+ - spec/support/shared_examples/a_recorder.rb
161
+ homepage: https://github.com/cpb/capybara-animate
162
+ licenses:
163
+ - MIT
164
+ metadata: {}
165
+ post_install_message:
166
+ rdoc_options: []
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 2.0.3
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: Gif Animations of your Headless Browser tests.
185
+ test_files:
186
+ - features/README.md.feature
187
+ - features/step_definitions/README.md_steps.rb
188
+ - features/support/env.rb
189
+ - spec/capybara/animate/empty_recorder_spec.rb
190
+ - spec/capybara/animate/gif_recorder_spec.rb
191
+ - spec/capybara/animate_spec.rb
192
+ - spec/spec_helper.rb
193
+ - spec/support/shared_examples/a_recorder.rb