cucumber-cinema 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -17,24 +17,14 @@ And bundle bundle install
17
17
  Install wkhtmltoimage (https://github.com/csquared/IMGKit)
18
18
 
19
19
  Add this to features/support/cucumber_screenhot.rb
20
+ CucumberCinema::ViewSelectStrategy::new_movie
20
21
  After do
21
- embed_screenshot(scenario, :prefix=>"my-refix") if defined?(CucumberCinema)
22
+ screenshot_emails
22
23
  end
23
24
 
24
25
  Run your cucumber suite and screenshots will be generated in directory tmp/capybara
25
26
 
26
- If running spork, add this to the env.rb file
27
- Spork.each_run do
28
- CucumberCinema::new_movie
29
- end
30
-
31
-
32
- Spork.prefork do
33
- World(CucumberCinema)
34
- end
35
-
36
- If you want to take a screenhot of a scenario regardless of what cinema decides, tag it with @action
37
-
27
+ Doesn't workwith spork yet
38
28
  == Contributing to cucumber-cinema
39
29
 
40
30
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cucumber-cinema}
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Ilya Katz}]
12
- s.date = %q{2011-08-04}
12
+ s.date = %q{2011-08-11}
13
13
  s.description = %q{Take a series of screenshots while running your cucumber test suite}
14
14
  s.email = %q{ilyakatz@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
27
27
  "cucumber-cinema.gemspec",
28
28
  "lib/cucumber-cinema.rb",
29
29
  "lib/cucumber_cinema/camera.rb",
30
- "lib/cucumber_cinema/path_strategy.rb",
30
+ "lib/cucumber_cinema/view_strategy.rb",
31
31
  "public/galleria/LICENSE",
32
32
  "public/galleria/galleria-1.2.5.js",
33
33
  "public/galleria/galleria-1.2.5.min.js",
@@ -1,45 +1,33 @@
1
1
  require 'capybara/util/save_and_open_page'
2
2
  require 'cucumber_cinema/camera'
3
- require 'cucumber_cinema/path_strategy'
3
+ require 'cucumber_cinema/view_strategy'
4
4
  module CucumberCinema
5
5
 
6
- BODY_HASHES=[]
7
- SCREENSHOT_DIR_NAME=["#{Time.new.strftime("%Y%m%d%H%M%S")}"]
8
- EMAILS={}
9
-
10
- def embed_screenshot(scenario=nil, options={})
11
-
12
- if take_screenshot?(scenario, :url=>current_url)
13
- BODY_HASHES<<path
14
- CucumberCinema::Camera.new(options).take_screenshot(body)
6
+ def screenshot_emails(options)
7
+ current_emails = ActionMailer::Base.deliveries.uniq { |x| x.subject }
8
+ new_emails = current_emails.select { |k, v| !$cucumber_cinema_emails.key?(k.subject) }
9
+ new_emails.each { |k, v| $cucumber_cinema_emails[k.subject]=v }
10
+ new_emails.each_with_index do |e, i|
11
+ CucumberCinema::Camera.new(options).take_screenshot("<h1>#{e.subject}</h1><pre>#{e}</pre><hr />")
15
12
  end
16
-
17
- collect_emails(options)
18
-
19
- end
20
-
21
- def self.new_movie
22
- BODY_HASHES.clear
23
- SCREENSHOT_DIR_NAME.clear
24
- SCREENSHOT_DIR_NAME<<"#{Time.new.strftime("%Y%m%d%H%M%S")}"
25
- EMAILS.clear
26
13
  end
27
14
 
28
- protected
15
+ end
29
16
 
17
+ #DOESN' WORK WITH Spork Yet
18
+ module ActionView
19
+ module Rendering
30
20
 
31
- #determines whether or not to take a screenshot
32
- def take_screenshot?(scenario, options)
33
- CucumberCinema::PathStrategy.new.take_screenshot?(scenario, options)
34
- end
21
+ alias_method :render_old, :render
35
22
 
36
- def collect_emails(options)
37
- current_emails = ActionMailer::Base.deliveries.uniq{|x|x.subject}
38
- new_emails = current_emails.select { |k, v| !EMAILS.key?(k.subject) }
39
- new_emails.each { |k, v| EMAILS[k.subject]=v }
40
- new_emails.each_with_index do |e, i|
41
- CucumberCinema::Camera.new(options).take_screenshot("<h1>#{e.subject}</h1><pre>#{e}</pre><hr />")
23
+ def render(options = {}, locals = {}, &block)
24
+ if CucumberCinema::ViewSelectStrategy.take_screenshot?(request)
25
+ body = render_old(options, locals, &block)
26
+ ::CucumberCinema::Camera.new.take_screenshot(body)
27
+ end
28
+ render_old(options, locals, &block)
42
29
  end
43
30
  end
44
-
45
31
  end
32
+
33
+ World(CucumberCinema)
@@ -1,23 +1,11 @@
1
1
  module CucumberCinema
2
2
  class Camera
3
3
 
4
- def initialize(options={})
5
- if options[:location]
6
- @location=options[:location]
7
- else
8
- @location="#{Rails.root}/tmp/screenshots/"
9
- end
10
-
11
- @prefix = options[:prefix].present? ? options[:prefix] : "take-"
12
- @pictures=[]
13
- end
14
-
15
4
  def take_screenshot(body)
16
- screenshot_dir_name = SCREENSHOT_DIR_NAME.first
17
- create_directory(screenshot_dir_name)
18
- filename="#{screenshot_dir_name}/#{@prefix}-#{rand(10**10)}"
19
- Capybara.save_page(body, "#{filename}.html")
20
- `wkhtmltoimage #{Capybara.save_and_open_page_path}/#{filename}.html #{@location}/#{filename}.png`
5
+ create_directory($cucumber_cinema_dir_name)
6
+ filename="#{$cucumber_cinema_dir_name}/#{$cucumber_cinema_prefix}-#{rand(10**10)}"
7
+ Capybara.save_page(body.to_str, "#{filename}.html")
8
+ `wkhtmltoimage #{Capybara.save_and_open_page_path}/#{filename}.html #{$cucumber_cinema_location}/#{filename}.png`
21
9
  end
22
10
 
23
11
  protected
@@ -27,17 +15,11 @@ module CucumberCinema
27
15
  if !Dir.exist?("#{Capybara.save_and_open_page_path}/#{screenshot_dir_name}")
28
16
  Dir.mkdir("#{Capybara.save_and_open_page_path}/#{screenshot_dir_name}")
29
17
  end
30
- Dir.mkdir("#{@location}") if !Dir.exist?(@location)
31
- Dir.mkdir("#{@location}/#{screenshot_dir_name}") if !Dir.exist?("#{@location}/#{screenshot_dir_name}")
18
+ Dir.mkdir("#{$cucumber_cinema_location}") if !Dir.exist?($cucumber_cinema_location)
19
+ if !Dir.exist?("#{$cucumber_cinema_location}/#{screenshot_dir_name}")
20
+ Dir.mkdir("#{$cucumber_cinema_location}/#{screenshot_dir_name}")
21
+ end
32
22
  end
33
- #
34
- # def create_theater
35
- # @files=@pictures
36
- # html_path="#{File.dirname(__FILE__)}/../../public/index.html.erb"
37
- # html=ERB.new(File.read(html_path)).result
38
- # File.open("#{@location}/index.html", 'w') { |f| f.write(doc) }
39
- #
40
- # end
41
23
 
42
24
  end
43
25
  end
@@ -0,0 +1,24 @@
1
+ module CucumberCinema
2
+ module ViewSelectStrategy
3
+
4
+ def self.take_screenshot?(request)
5
+ return false unless request
6
+ current_shot = "#{request.filtered_parameters["controller"]}-#{request.filtered_parameters["action"]}-#{request.method}"
7
+ if !$cucumber_cinema_screenshots[current_shot]
8
+ $cucumber_cinema_screenshots[current_shot] = 1
9
+ true
10
+ else
11
+ false
12
+ end
13
+ end
14
+
15
+ def self.new_movie(options={})
16
+ $cucumber_cinema_screenshots = {}
17
+ $cucumber_cinema_dir_name = "#{Time.new.strftime("%Y%m%d%H%M%S")}"
18
+ $cucumber_cinema_emails = {}
19
+ $cucumber_cinema_location=options[:location] || "#{Rails.root}/tmp/screenshots/"
20
+ $cucumber_cinema_prefix = options[:prefix].present? ? options[:prefix] : "take"
21
+ end
22
+
23
+ end
24
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-cinema
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 5
8
+ - 6
9
9
  - 0
10
- version: 0.5.0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ilya Katz
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-04 00:00:00 Z
18
+ date: 2011-08-11 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime
@@ -125,7 +125,7 @@ files:
125
125
  - cucumber-cinema.gemspec
126
126
  - lib/cucumber-cinema.rb
127
127
  - lib/cucumber_cinema/camera.rb
128
- - lib/cucumber_cinema/path_strategy.rb
128
+ - lib/cucumber_cinema/view_strategy.rb
129
129
  - public/galleria/LICENSE
130
130
  - public/galleria/galleria-1.2.5.js
131
131
  - public/galleria/galleria-1.2.5.min.js
@@ -1,23 +0,0 @@
1
- module CucumberCinema
2
- class PathStrategy
3
-
4
- #determines whether or not to take a screenshot
5
- def take_screenshot?(scenario, options={})
6
- current_url=options[:url]
7
- #always take screenshots of scenario's with tag @action
8
- if scenario and scenario.source_tag_names.include?("@action")
9
- return true
10
- end
11
- if current_url
12
- #remove parameters and such
13
- path = URI.parse(current_url).path
14
- #remove model id's
15
- path = current_url.gsub(/\d+/, '')
16
- !BODY_HASHES.include?(path)
17
- else
18
- true
19
- end
20
- end
21
-
22
- end
23
- end