gnawrnip 0.0.1 → 0.0.2

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.
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in gnawrnip.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'poltergeist'
8
+ gem 'sinatra'
9
+ end
data/gnawrnip.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency 'capybara', "~> 2.1"
22
- spec.add_dependency 'turnip_formatter'
22
+ spec.add_dependency 'turnip_formatter', '~> 0.1.2'
23
+ spec.add_dependency 'rmagick'
23
24
  spec.add_development_dependency "bundler", "~> 1.3"
24
25
  spec.add_development_dependency "rake"
25
26
  spec.add_development_dependency 'rspec'
@@ -0,0 +1,37 @@
1
+ require 'gnawrnip/screenshot'
2
+ require 'RMagick'
3
+ require 'base64'
4
+
5
+ module Gnawrnip
6
+ class Animation
7
+ class << self
8
+ def reset!
9
+ frames.clear
10
+ end
11
+
12
+ def frames
13
+ @frames ||= []
14
+ end
15
+
16
+ def add_frame
17
+ image = Screenshot.take
18
+ frames << image
19
+ end
20
+
21
+ def generate
22
+ gif = Tempfile.new(['gnawrnip_animation', '.gif'])
23
+ image.write(gif.path)
24
+ Base64.encode64(gif.read)
25
+ end
26
+
27
+ private
28
+
29
+ def image
30
+ paths = frames.map(&:path)
31
+ images = Magick::ImageList.new(*paths)
32
+ images.delay = 50
33
+ images
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ require 'capybara/session'
2
+
3
+ module Capybara
4
+ class Session
5
+ SAVE_SCREENSHOT_METHODS = [
6
+ :attach_file, :check, :choose, :click_link_or_button, :click_button,
7
+ :click_link, :fill_in, :select, :uncheck, :unselect, :click_on,
8
+ :evaluate_script, :visit
9
+ ]
10
+
11
+ SAVE_SCREENSHOT_METHODS.each do |method|
12
+ alias_method "after_hook_#{method}".to_sym, method
13
+
14
+ define_method method do |*args, &block|
15
+ send("after_hook_#{method}", *args, &block)
16
+ Gnawrnip::Animation.add_frame
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,13 +3,17 @@ require 'tempfile'
3
3
  require 'base64'
4
4
 
5
5
  RSpec.configure do |config|
6
- config.after do
6
+ config.before(:each, turnip: true) do
7
+ Gnawrnip::Animation.reset!
8
+ end
9
+
10
+ config.after(:each, turnip: true) do
7
11
  if example.exception
8
- temp = Tempfile.new(['gnawrnip', '.png'])
9
- save_screenshot(temp.path)
10
- example.metadata[:turnip] ||= {}
11
- example.metadata[:turnip][:screenshot] = Base64.encode64(File.read(temp.path))
12
- temp.close!
12
+ example.metadata[:gnawrnip] = {}
13
+
14
+ # example.metadata[:gnawrnip][:screenshot] = Gnawrnip::Animation.generate
15
+ image = Gnawrnip::Screenshot.take
16
+ example.metadata[:gnawrnip][:screenshot] = Base64.encode64(image.read)
13
17
  end
14
18
  end
15
19
  end
@@ -0,0 +1,29 @@
1
+ require 'tempfile'
2
+ require 'capybara'
3
+
4
+ module Gnawrnip
5
+ class Screenshot
6
+ class << self
7
+
8
+ #
9
+ # Screenshot of current capybara session
10
+ #
11
+ # @example
12
+ # image = Gnawrnip::Screenshot.take
13
+ #
14
+ # @return [Tempfile] Image of screenshot
15
+ #
16
+ def take
17
+ tempfile = Tempfile.new(['gnawrnip', '.gif'])
18
+ session.save_screenshot(tempfile.path)
19
+ tempfile
20
+ end
21
+
22
+ private
23
+
24
+ def session
25
+ Capybara.current_session
26
+ end
27
+ end
28
+ end
29
+ end
@@ -3,11 +3,11 @@ require 'turnip_formatter/step/failure'
3
3
  module Gnawrnip
4
4
  module StepScreenshot
5
5
  #
6
- # @param [String] png_file base64 encoded
6
+ # @param [String] gif_file base64 encoded
7
7
  #
8
- def self.build(png_file)
9
- img = '<img src="data:image/png;base64,'
10
- img += png_file
8
+ def self.build(gif_base64)
9
+ img = '<img src="data:image/gif;base64,'
10
+ img += gif_base64
11
11
  img += '" style="width: 90%; border: 2px solid black;" />'
12
12
  img
13
13
  end
@@ -15,5 +15,5 @@ module Gnawrnip
15
15
  end
16
16
 
17
17
  TurnipFormatter::Step::Failure.add_template :screenshot, Gnawrnip::StepScreenshot do
18
- example.metadata[:turnip][:screenshot]
18
+ example.metadata[:gnawrnip][:screenshot]
19
19
  end
@@ -1,3 +1,3 @@
1
1
  module Gnawrnip
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/gnawrnip.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require "gnawrnip/version"
2
2
 
3
3
  module Gnawrnip
4
+ require 'gnawrnip/ext/capybara/session'
5
+ require 'gnawrnip/animation'
6
+ require 'gnawrnip/screenshot'
4
7
  require 'gnawrnip/step_screenshot'
5
8
  require 'gnawrnip/rspec'
6
9
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'gnawrnip/animation'
3
+
4
+ module Gnawrnip
5
+ describe Animation do
6
+ before do
7
+ Animation.reset!
8
+ Animation.add_frame
9
+ Animation.add_frame
10
+ end
11
+
12
+ describe '.add_frame' do
13
+ subject { Animation.frames }
14
+ it { should have(2).elements }
15
+ end
16
+
17
+ describe '.reset!' do
18
+ before { Animation.reset! }
19
+ subject { Animation.frames }
20
+ it { should be_empty }
21
+ end
22
+
23
+ describe '.generate' do
24
+ before do
25
+ ::Magick::ImageList.any_instance.stub(:initialize) do |*filenames|
26
+ @file_length = filenames.length
27
+ end
28
+ ::Magick::ImageList.any_instance.stub(:delay=)
29
+ ::Magick::ImageList.any_instance.stub(:write) do |path|
30
+ File.write(path, @file_length.to_s)
31
+ end
32
+ end
33
+
34
+ subject { Animation.generate }
35
+ it 'should be base64 encoded string for each files.' do
36
+ should == "Mg==\n"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -4,7 +4,6 @@ require 'gnawrnip/rspec'
4
4
  module Gnawrnip
5
5
  describe 'Rspec' do
6
6
  let(:example) do
7
- group = ::RSpec::Core::ExampleGroup.describe('Feature')
8
7
  example = group.example('example', {}) { expect(true).to be_false }
9
8
  group.run(
10
9
  Class.new do
@@ -16,8 +15,24 @@ module Gnawrnip
16
15
  example
17
16
  end
18
17
 
19
- it 'should save screen shot at error' do
20
- expect(example.metadata[:turnip][:screenshot]).to eq "c2NyZWVuc2hvdA==\n"
18
+ context '"turnip" spec group' do
19
+ let(:group) do
20
+ ::RSpec::Core::ExampleGroup.describe('Feature', turnip: true)
21
+ end
22
+
23
+ it 'should save screen shot at error' do
24
+ expect(example.metadata[:gnawrnip][:screenshot]).to eq "c2NyZWVuc2hvdA==\n"
25
+ end
26
+ end
27
+
28
+ context 'Not "turnip" spec group' do
29
+ let(:group) do
30
+ ::RSpec::Core::ExampleGroup.describe('Feature')
31
+ end
32
+
33
+ it 'should not save screen shot' do
34
+ expect(example.metadata).not_to include(:gnawrnip)
35
+ end
21
36
  end
22
37
  end
23
38
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ require 'gnawrnip/screenshot'
3
+
4
+ module Gnawrnip
5
+ describe Screenshot do
6
+ describe '.take' do
7
+ subject { Screenshot.take.read }
8
+
9
+ # see GnawrnipTestSession::save_screenshot
10
+ it { should == 'screenshot' }
11
+ end
12
+ end
13
+ end
@@ -13,7 +13,7 @@ module Gnawrnip
13
13
 
14
14
  describe '.build' do
15
15
  subject { template.build('aiueo') }
16
- it { should match %r{<img src="data:image/png;base64,aiueo"} }
16
+ it { should match %r{<img src="data:image/gif;base64,aiueo"} }
17
17
  end
18
18
  end
19
19
  end
data/spec/spec_helper.rb CHANGED
@@ -2,16 +2,22 @@ require 'coveralls'
2
2
  Coveralls.wear!
3
3
 
4
4
  require 'gnawrnip'
5
+ require 'capybara'
5
6
 
6
- RSpec.configure do |config|
7
- config.include(
8
- Module.new do
9
- # stub Capybara::Session.save_screenshot
10
- def save_screenshot(file_path)
11
- File.open(file_path, 'w') do |fp|
12
- fp.print 'screenshot'
13
- end
14
- end
7
+ class GnawrnipTestSession
8
+ def save_screenshot(file_path)
9
+ File.open(file_path, 'w') do |fp|
10
+ fp.print 'screenshot'
15
11
  end
16
- )
12
+ end
13
+
14
+ def method_missing(name, *args, &block)
15
+ # nooooooop
16
+ end
17
+ end
18
+
19
+ module Capybara
20
+ def self.current_session
21
+ GnawrnipTestSession.new
22
+ end
17
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnawrnip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-01 00:00:00.000000000 Z
12
+ date: 2013-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capybara
@@ -29,6 +29,22 @@ dependencies:
29
29
  version: '2.1'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: turnip_formatter
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.1.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.1.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rmagick
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements:
@@ -122,7 +138,6 @@ files:
122
138
  - README.md
123
139
  - Rakefile
124
140
  - example/.rspec
125
- - example/Gemfile
126
141
  - example/README.md
127
142
  - example/spec/features/hello.feature
128
143
  - example/spec/spec_helper.rb
@@ -130,10 +145,15 @@ files:
130
145
  - example/web.rb
131
146
  - gnawrnip.gemspec
132
147
  - lib/gnawrnip.rb
148
+ - lib/gnawrnip/animation.rb
149
+ - lib/gnawrnip/ext/capybara/session.rb
133
150
  - lib/gnawrnip/rspec.rb
151
+ - lib/gnawrnip/screenshot.rb
134
152
  - lib/gnawrnip/step_screenshot.rb
135
153
  - lib/gnawrnip/version.rb
154
+ - spec/gnawrnip/animation_spec.rb
136
155
  - spec/gnawrnip/rspec_spec.rb
156
+ - spec/gnawrnip/screenshot_spec.rb
137
157
  - spec/gnawrnip/step_screenshot_spec.rb
138
158
  - spec/spec_helper.rb
139
159
  homepage: https://github.com/gongo/gnawrnip
@@ -149,18 +169,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
169
  - - ! '>='
150
170
  - !ruby/object:Gem::Version
151
171
  version: '0'
152
- segments:
153
- - 0
154
- hash: -4385151438016363353
155
172
  required_rubygems_version: !ruby/object:Gem::Requirement
156
173
  none: false
157
174
  requirements:
158
175
  - - ! '>='
159
176
  - !ruby/object:Gem::Version
160
177
  version: '0'
161
- segments:
162
- - 0
163
- hash: -4385151438016363353
164
178
  requirements: []
165
179
  rubyforge_project:
166
180
  rubygems_version: 1.8.23
@@ -168,6 +182,8 @@ signing_key:
168
182
  specification_version: 3
169
183
  summary: Add-on for TurnipFormatter with Capybara
170
184
  test_files:
185
+ - spec/gnawrnip/animation_spec.rb
171
186
  - spec/gnawrnip/rspec_spec.rb
187
+ - spec/gnawrnip/screenshot_spec.rb
172
188
  - spec/gnawrnip/step_screenshot_spec.rb
173
189
  - spec/spec_helper.rb
data/example/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'sinatra'
4
- gem 'capybara', '~> 2.1.0'
5
- gem 'rspec'
6
- gem 'turnip'
7
- gem 'turnip_formatter'
8
- gem 'gnawrnip'
9
- gem 'poltergeist'