poltergeist-screenshot_overview 0.0.3 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c4c0775884ba430446abd2cfbd82614c3545c08
4
- data.tar.gz: 1043d1359bcfb8903ac0eabb9971e18671b51ddf
3
+ metadata.gz: b43612594d07f1ad1194b19a341e32abb3a65c7f
4
+ data.tar.gz: aa91e1375f94cfc87b3e8cb8d53d86dda4ffb094
5
5
  SHA512:
6
- metadata.gz: d550c3fcc3e32c4e6988f5a988d0061fbbfeb0e3a7cda7655db6432be2eb563fe027f7e9493253e722d394f3914d913a97e24531595007214c65bc1461b57972
7
- data.tar.gz: 4b5afdd5e765ba092c85fe51570c449ffb4ae557a47314cbadfa7e0f34fef2a27d643872c4d6ca76af63de67a58b06682d96f0de8a83ec460b37f556de52b12b
6
+ metadata.gz: e9e0b877c56e0e58a49b72784ae8018d845274513f3d07943835ebf9843d1d3be799031216f7138f2a94ddc4989a18021e917e2a58a765f592646a8a5b44f38a
7
+ data.tar.gz: 2823da18c09e8b37caac98f198025d65bc731423993068eb608f845824c326a0ee900201668fb6da5c4f782e2bca2cb5af33a85b6ec28c0e628d7453e6e6d3c8
@@ -1,6 +1,56 @@
1
1
  require "erb"
2
2
  require "ostruct"
3
3
  module Poltergeist::ScreenshotOverview
4
+ class ScreenshotGroup
5
+ attr_accessor :screenshots, :file_name
6
+
7
+ def initialize(file,screenshots)
8
+ @file_name = file
9
+ @screenshots = screenshots
10
+ end
11
+
12
+ def to_id
13
+ file_name.gsub(/\W+/, "-").gsub(/^-/, "")
14
+ end
15
+ end
16
+
17
+ class Screenshot
18
+ ATTR = :url, :argument, :local_image, :full_path, :group_description, :example_description, :file_with_line
19
+ attr_accessor(*ATTR)
20
+ def initialize(opts={})
21
+ opts.each do |k,v|
22
+ self.send("#{k}=", v)
23
+ end
24
+ end
25
+
26
+ def to_hash
27
+ Hash[
28
+ ATTR.map{|k|[k, self.send(k)]}
29
+ ]
30
+ end
31
+
32
+ def line_number
33
+ file_with_line.split(":")[1].to_i rescue 0
34
+ end
35
+
36
+ def full_test_path
37
+ file_with_line.split(":")[0]
38
+ end
39
+
40
+ def snippet
41
+ File.read(full_test_path).lines[ line_number - 3, 5].join
42
+ end
43
+
44
+ def test_file
45
+ full_test_path.gsub(Dir.pwd, "").gsub("spec/features/","")
46
+ end
47
+
48
+ def render
49
+ template = ERB.new File.read(Poltergeist::ScreenshotOverview.template), nil, "%"
50
+ template.result(binding)
51
+ end
52
+ end
53
+
4
54
  class Manager
5
55
  include Singleton
6
56
 
@@ -16,23 +66,26 @@ module Poltergeist::ScreenshotOverview
16
66
  def add_image_from_rspec(argument, example, url_path)
17
67
  filename = [example.description, argument, Digest::MD5.hexdigest("foo")[0..6] ].join(" ").gsub(/\W+/,"_") + ".jpg"
18
68
 
69
+ blob = caller.find{|i| i[ example.file_path.gsub(/:\d*|^\./,"") ]}
70
+ file_with_line = blob.split(":")[0,2].join(":")
71
+
19
72
  full_name = File.join(Poltergeist::ScreenshotOverview.target_directory, filename )
20
73
  FileUtils.mkdir_p Poltergeist::ScreenshotOverview.target_directory
21
74
  describe = example.metadata[:example_group][:description_args]
22
- @files << {
23
- :url => url_path,
24
- :argument => argument,
25
- :local_image => filename,
26
- :full_path => full_name,
27
- :test_file => example.file_path,
28
- :describe_descriptions => describe,
29
- :example_description => example.description
30
- }
75
+ @files << Screenshot.new({
76
+ :url => url_path,
77
+ :argument => argument,
78
+ :local_image => filename,
79
+ :full_path => full_name,
80
+ :group_description => describe,
81
+ :example_description => example.description,
82
+ :file_with_line => file_with_line
83
+ })
31
84
  full_name
32
85
  end
33
86
 
34
87
  def generate_html
35
- title = "Screenshot Overview (#{Time.now.to_s})"
88
+ title = title = "Screenshot Overview (#{Time.now.to_s})"
36
89
  template = ERB.new File.new(Poltergeist::ScreenshotOverview.layout).read, nil, "%"
37
90
  html = template.result(binding)
38
91
  File.open( File.join(Poltergeist::ScreenshotOverview.target_directory, "index.html"), "w+") { |f|
@@ -40,12 +93,10 @@ module Poltergeist::ScreenshotOverview
40
93
  end
41
94
 
42
95
 
43
- def rendered_screenshots
44
- template = ERB.new File.read(Poltergeist::ScreenshotOverview.template), nil, "%"
45
- @files.map do |file|
46
- namespace = OpenStruct.new(file)
47
- template.result(namespace.instance_eval { binding })
48
- end.join
96
+ def groups
97
+ @files.
98
+ group_by{ |screenshot| screenshot.test_file}.
99
+ map{|file,screenshots| ScreenshotGroup.new(file,screenshots) }
49
100
  end
50
101
 
51
102
  end
@@ -5,7 +5,7 @@ require 'poltergeist/screenshot_overview/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "poltergeist-screenshot_overview"
8
- spec.version = "0.0.3"
8
+ spec.version = "0.1.3"
9
9
  spec.authors = ["Stefan Wienert"]
10
10
  spec.email = ["stefan.wienert@pludoni.de"]
11
11
  spec.description = %q{hooks into Capybara poltergeist to automatically make screenshots after each click}
data/templates/layout.erb CHANGED
@@ -3,6 +3,7 @@
3
3
  <title><%= title %></title>
4
4
  <meta name="description" content="">
5
5
  <meta name="viewport" content="width=device-width">
6
+ <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
6
7
 
7
8
  <style type='text/css'>
8
9
  .screenshot {
@@ -16,17 +17,64 @@
16
17
  padding: 0 20px;
17
18
  font-family: Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif;
18
19
  }
19
- </style
20
+ #toc {
21
+ width: 200px;
22
+ background-color: #FFFFFF;
23
+ border-radius: 6px 6px 6px 6px;
24
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.067);
25
+ margin: 30px 0 0;
26
+ padding: 0;
27
+ }
28
+ #toc a {
29
+ border: 1px solid #E5E5E5;
30
+ display: block;
31
+ margin: 0 0 -1px;
32
+ padding: 8px 14px;
33
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
34
+ }
35
+ </style>
36
+
37
+ <script type='text/javascript'>
38
+ url = window.location.toString();
39
+ console.log(url)
40
+ if (!/\/$/.test(url)) {
41
+ url = url + '/';
42
+ console.log("CHANGING" + url)
43
+ window.location = url
44
+ }
45
+ </script>
20
46
 
21
47
  </head>
22
48
 
23
- <body>
49
+ <body data-spy="scroll" data-target=".navbar">
24
50
 
25
- <div id='container'>
26
- <h1><%= title %></h1>
51
+ <div id='container' class='row'>
52
+ <div class='span10'>
53
+ <h1><%= title %></h1>
54
+ <% groups.each do |group| %>
55
+ <div class='group'>
56
+ <h2 id='<%=group.to_id%>'><%= group.file_name %></h2>
57
+ <% group.screenshots.each do |screenshot| %>
58
+ <%= screenshot.render %>
59
+ <% end %>
60
+ </div>
61
+ <% end %>
62
+ </div>
27
63
 
28
- <%= rendered_screenshots %>
29
- </div>
64
+ <div class='span2'>
65
+ <div class='navbar' id='toc' data-spy="affix" data-offset-top="200">
66
+ <ul class='nav nav-list'>
67
+ <% groups.each do |group| %>
68
+ <li>
69
+ <a href='#<%=group.to_id %>'><%= group.file_name %></a>
70
+ </li>
71
+ <% end %>
72
+ </div>
73
+ </div>
74
+ </div>
30
75
 
76
+ <script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
77
+ <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
78
+ <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
31
79
  </body>
32
80
  </html>
@@ -1,13 +1,12 @@
1
1
  <div class='screenshot'>
2
2
  <img src='<%= local_image %>' alt=''/>
3
-
4
3
  <ul>
5
4
  <li>
6
- <strong><%= describe_descriptions.join(" >> ") %>:
7
- <%= example_description %></strong>
5
+ <strong><%= group_description.join(" >> ") %> <%= example_description %></strong>
8
6
  </li>
9
- <li>on <%= url %></li>
10
- <li>in <%= test_file %></li>
11
- <li>clicked on /visited: "<%= argument %>"</li>
7
+ <li>URL: <code><%= url %></code></li>
8
+ <li>clicked on: <code><%= argument %></code></li>
9
+ <li><a href='file://<%= file_with_line %>'><%= file_with_line %></a></li>
10
+ <code><pre><%= snippet %></pre></code>
12
11
  </table>
13
12
  </div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poltergeist-screenshot_overview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Wienert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-25 00:00:00.000000000 Z
11
+ date: 2013-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: poltergeist