poltergeist-screenshot_overview 0.0.3 → 0.1.3

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 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