poltergeist-screenshot_overview 0.1.8 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/poltergeist/screenshot_overview/capybara_patch.rb +49 -0
- data/lib/poltergeist/screenshot_overview/manager.rb +25 -6
- data/lib/poltergeist/screenshot_overview/rspec.rb +6 -3
- data/lib/poltergeist/screenshot_overview/version.rb +1 -1
- data/lib/poltergeist/screenshot_overview.rb +0 -34
- data/templates/layout.erb +75 -64
- data/templates/screenshot.erb +22 -10
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b91cf4b227b7cb2262672190cc89ab4c1ea3e8cc
|
4
|
+
data.tar.gz: b38d9f89fe29f258da38b2f991091c25918e03e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27f3e49938bc7d6f40cef9b5e213c58d3d142eaa86e0c4b1a7c82198363a88c9235070d393db5453c8eeb902fb8743df7d4f1a14030497e2420c56e9b079510b
|
7
|
+
data.tar.gz: d940561a9de23b6a0f2d52b344838c2517e51b216047d9255a2efa1b2edd6e5fba7f53480a7cf9d85222391180af5e3e8ec894f439829a6a71fc4b090868041d
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Poltergeist::ScreenshotOverview
|
2
|
+
module CapybaraPatch
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
|
7
|
+
# @override
|
8
|
+
def visit(url)
|
9
|
+
with_screenshot(url, page.visit(url))
|
10
|
+
end
|
11
|
+
|
12
|
+
# @override
|
13
|
+
def click_button(*args)
|
14
|
+
# page.send method, *args, &block
|
15
|
+
with_screenshot(args.first, page.click_button(*args))
|
16
|
+
end
|
17
|
+
|
18
|
+
# @override
|
19
|
+
def click_link(*args)
|
20
|
+
with_screenshot(args.first, page.click_link(*args))
|
21
|
+
end
|
22
|
+
|
23
|
+
# @override
|
24
|
+
def click_on(*args)
|
25
|
+
with_screenshot(args.first, page.click_on(*args))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def with_screenshot(url, result)
|
32
|
+
make_screenshot(url)
|
33
|
+
result
|
34
|
+
end
|
35
|
+
|
36
|
+
def make_screenshot(argument)
|
37
|
+
if defined?(RSpec.current_example)
|
38
|
+
ex = RSpec.current_example
|
39
|
+
else
|
40
|
+
ex = example
|
41
|
+
end
|
42
|
+
if ex && (ex.metadata[:js] || ex.metadata[:screenshot])
|
43
|
+
filename = Manager.instance.add_image_from_rspec(argument, ex, current_path)
|
44
|
+
page.driver.render(Rails.root.join(filename).to_s, full: true)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "erb"
|
2
2
|
require "ostruct"
|
3
3
|
module Poltergeist::ScreenshotOverview
|
4
|
-
class
|
4
|
+
class ExampleFile
|
5
5
|
attr_accessor :screenshots, :file_name
|
6
6
|
|
7
7
|
def initialize(file,screenshots)
|
@@ -12,6 +12,24 @@ module Poltergeist::ScreenshotOverview
|
|
12
12
|
def to_id
|
13
13
|
file_name.gsub(/\W+/, "-").gsub(/^-/, "")
|
14
14
|
end
|
15
|
+
|
16
|
+
def examples
|
17
|
+
screenshots.group_by{|i| i.example_description }.map do |_,screenshots|
|
18
|
+
Example.new(screenshots)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Example
|
24
|
+
attr_accessor :screenshots
|
25
|
+
def initialize(screenshots)
|
26
|
+
@screenshots = screenshots.sort_by{|i| i.file_with_line }
|
27
|
+
end
|
28
|
+
|
29
|
+
def title
|
30
|
+
(screenshots.first.group_description + [screenshots.first.example_description]).join(' >> ')
|
31
|
+
end
|
32
|
+
|
15
33
|
end
|
16
34
|
|
17
35
|
class Screenshot
|
@@ -38,11 +56,11 @@ module Poltergeist::ScreenshotOverview
|
|
38
56
|
end
|
39
57
|
|
40
58
|
def snippet
|
41
|
-
File.read(full_test_path).lines[ line_number -
|
59
|
+
File.read(full_test_path).lines[ line_number - 5, 9].tap{|i| i[4] = ">>" + i[4].gsub(/^ /,'')}.join
|
42
60
|
end
|
43
61
|
|
44
62
|
def test_file
|
45
|
-
|
63
|
+
file_with_line.gsub(Dir.pwd, '').gsub(/:\d+$/,'')
|
46
64
|
end
|
47
65
|
|
48
66
|
def render
|
@@ -92,10 +110,11 @@ module Poltergeist::ScreenshotOverview
|
|
92
110
|
end
|
93
111
|
|
94
112
|
|
95
|
-
def
|
96
|
-
@
|
113
|
+
def example_files
|
114
|
+
@example_files ||=
|
115
|
+
@files.
|
97
116
|
group_by{ |screenshot| screenshot.test_file}.
|
98
|
-
map{|file,screenshots|
|
117
|
+
map{|file,screenshots| ExampleFile.new(file,screenshots.sort_by{|s| s.file_with_line }) }
|
99
118
|
end
|
100
119
|
|
101
120
|
end
|
@@ -1,5 +1,11 @@
|
|
1
|
+
require 'capybara'
|
2
|
+
# require 'poltergeist'
|
1
3
|
require "poltergeist/screenshot_overview"
|
2
4
|
require "poltergeist/screenshot_overview/manager"
|
5
|
+
require "poltergeist/screenshot_overview/capybara_patch"
|
6
|
+
|
7
|
+
Capybara::DSL.send(:include, Poltergeist::ScreenshotOverview::CapybaraPatch)
|
8
|
+
|
3
9
|
RSpec.configure do |config|
|
4
10
|
config.before(:suite) do
|
5
11
|
Poltergeist::ScreenshotOverview::Manager.instance.start
|
@@ -7,7 +13,4 @@ RSpec.configure do |config|
|
|
7
13
|
config.after(:suite) do
|
8
14
|
Poltergeist::ScreenshotOverview::Manager.instance.generate_html
|
9
15
|
end
|
10
|
-
|
11
|
-
config.include Poltergeist::ScreenshotOverview, :type => :feature, :js => true
|
12
|
-
|
13
16
|
end
|
@@ -20,39 +20,5 @@ module Poltergeist
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# @override
|
24
|
-
def visit(*args)
|
25
|
-
super
|
26
|
-
make_screenshot(args.first)
|
27
|
-
end
|
28
|
-
|
29
|
-
# @override
|
30
|
-
def click_button(*args)
|
31
|
-
super
|
32
|
-
make_screenshot(args.first)
|
33
|
-
end
|
34
|
-
|
35
|
-
# @override
|
36
|
-
def click_link(*args)
|
37
|
-
super
|
38
|
-
make_screenshot(args.first)
|
39
|
-
end
|
40
|
-
|
41
|
-
def click_on(*args)
|
42
|
-
super
|
43
|
-
make_screenshot(args.first)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def make_screenshot(argument)
|
49
|
-
return if !defined?(RSpec.current_example)
|
50
|
-
ex = RSpec.current_example
|
51
|
-
if ex && (ex.metadata[:js] || ex.metadata[:screenshot])
|
52
|
-
filename = Manager.instance.add_image_from_rspec(argument, ex, current_path)
|
53
|
-
page.driver.render(Rails.root.join(filename).to_s,full: true)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
23
|
end
|
58
24
|
end
|
data/templates/layout.erb
CHANGED
@@ -1,79 +1,90 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html class="no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
3
3
|
<title><%= title %></title>
|
4
|
-
<meta name="description" content="">
|
5
|
-
<meta name="viewport" content="width=device-width">
|
6
|
-
<link href="//
|
4
|
+
<meta name="description" content="">
|
5
|
+
<meta name="viewport" content="width=device-width">
|
6
|
+
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
|
7
7
|
|
8
|
-
<style type='text/css'>
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
8
|
+
<style type='text/css'>
|
9
|
+
.screenshot {
|
10
|
+
margin-bottom: 15px;
|
11
|
+
padding-bottom: 15px;
|
12
|
+
border-bottom: 2px solid #aaa;
|
13
|
+
vertical-align: top;
|
14
|
+
display: inline-block;
|
15
|
+
}
|
16
|
+
#container {
|
17
|
+
width: 80%;
|
18
|
+
margin: 0 auto;
|
19
|
+
padding: 0 20px;
|
20
|
+
font-family: Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif;
|
21
|
+
}
|
22
|
+
#toc {
|
23
|
+
width: 200px;
|
24
|
+
background-color: #FFFFFF;
|
25
|
+
border-radius: 6px 6px 6px 6px;
|
26
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.067);
|
27
|
+
margin: 30px 0 0;
|
28
|
+
padding: 0;
|
29
|
+
}
|
30
|
+
#toc a {
|
31
|
+
border: 1px solid #E5E5E5;
|
32
|
+
display: block;
|
33
|
+
margin: 0 0 -1px;
|
34
|
+
padding: 8px 14px;
|
35
|
+
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
36
|
+
}
|
37
|
+
</style>
|
36
38
|
|
37
|
-
<script type='text/javascript'>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
</script>
|
39
|
+
<script type='text/javascript'>
|
40
|
+
//url = window.location.toString();
|
41
|
+
//console.log(url)
|
42
|
+
//if (!/\/$/.test(url)) {
|
43
|
+
// url = url + '/';
|
44
|
+
// window.location = url
|
45
|
+
//}
|
46
|
+
</script>
|
45
47
|
|
46
48
|
</head>
|
47
49
|
|
48
50
|
<body data-spy="scroll" data-target=".navbar">
|
51
|
+
<div class='container-fluid'>
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
<div id='container' class='row'>
|
54
|
+
<div class='col-sm-8 col-lg-10'>
|
55
|
+
<h1><%= title %></h1>
|
56
|
+
<% example_files.each do |file| %>
|
57
|
+
<div class='group'>
|
58
|
+
<h2 id='<%=file.to_id%>'><%= file.file_name %></h2>
|
59
|
+
<% file.examples.each do |example| %>
|
60
|
+
<h4><%= example.title %></h4>
|
61
|
+
<% example.screenshots.each do |screenshot| %>
|
62
|
+
<%= screenshot.render %>
|
63
|
+
<% end %>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
<% end %>
|
67
|
+
</div>
|
62
68
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
69
|
+
<div class='col-sm-4 col-lg-2'>
|
70
|
+
<div class='navbar' id='toc' data-spy="affix" data-offset-top="200">
|
71
|
+
<ul class='nav nav-list'>
|
72
|
+
<% example_files.each do |group| %>
|
73
|
+
<li>
|
74
|
+
<a href='#<%=group.to_id %>'><%= group.file_name %></a>
|
75
|
+
</li>
|
76
|
+
<% end %>
|
77
|
+
</div>
|
78
|
+
</div>
|
71
79
|
</div>
|
72
80
|
</div>
|
73
|
-
</div>
|
74
81
|
|
75
|
-
<script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
|
76
|
-
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
|
77
|
-
<script src=
|
78
|
-
|
82
|
+
<script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
|
83
|
+
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
|
84
|
+
<script type='application/javascript' src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js'></script>
|
85
|
+
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/styles/default.min.css">
|
86
|
+
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/highlight.min.js"></script>
|
87
|
+
<script>hljs.initHighlightingOnLoad();</script>
|
88
|
+
|
89
|
+
</body>
|
79
90
|
</html>
|
data/templates/screenshot.erb
CHANGED
@@ -1,12 +1,24 @@
|
|
1
1
|
<div class='screenshot'>
|
2
|
-
|
3
|
-
<
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
<
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
2
|
+
<% id = 'modal' + Digest::MD5.hexdigest(file_with_line) %>
|
3
|
+
<a href='#<%=id%>' data-toggle='modal'>
|
4
|
+
<img src='<%= local_image %>' alt='' style='width: 100px'/>
|
5
|
+
</a>
|
6
|
+
|
7
|
+
<div class="modal fade" id='<%=id%>'>
|
8
|
+
<div class="modal-dialog modal-lg">
|
9
|
+
<div class="modal-content">
|
10
|
+
<div class="modal-header">
|
11
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
12
|
+
<h3 class='modal-title'><%= group_description.join(" >> ") %> <%= example_description %></h3>
|
13
|
+
</div>
|
14
|
+
<div class="modal-body">
|
15
|
+
<p>URL: <code><%= url %></code></p>
|
16
|
+
<p>clicked on: <code><%= argument %></code></p>
|
17
|
+
<p><a href='file://<%= file_with_line %>'><%= file_with_line %></a></p>
|
18
|
+
<pre><code lang='ruby' class='ruby'><%= snippet %></code></pre>
|
19
|
+
<img src='<%= local_image %>' alt='' class='img-responsive'/>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
</div>
|
12
24
|
</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.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Wienert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: poltergeist
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
68
|
- lib/poltergeist/screenshot_overview.rb
|
69
|
+
- lib/poltergeist/screenshot_overview/capybara_patch.rb
|
69
70
|
- lib/poltergeist/screenshot_overview/manager.rb
|
70
71
|
- lib/poltergeist/screenshot_overview/rspec.rb
|
71
72
|
- lib/poltergeist/screenshot_overview/version.rb
|