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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.simplecov +3 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +41 -0
- data/Rakefile +13 -0
- data/VERSION +1 -0
- data/capybara-animate.gemspec +28 -0
- data/features/README.md.feature +59 -0
- data/features/step_definitions/README.md_steps.rb +11 -0
- data/features/support/env.rb +2 -0
- data/lib/capybara/animate.rb +48 -0
- data/lib/capybara/animate/empty_recorder.rb +14 -0
- data/lib/capybara/animate/gif_recorder.rb +37 -0
- data/lib/capybara/animate/hooks/cucumber.rb +11 -0
- data/spec/capybara/animate/empty_recorder_spec.rb +6 -0
- data/spec/capybara/animate/gif_recorder_spec.rb +59 -0
- data/spec/capybara/animate_spec.rb +68 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/shared_examples/a_recorder.rb +13 -0
- metadata +193 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.simplecov
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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
|
data/Rakefile
ADDED
@@ -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,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,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,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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|