gnawrnip 0.3.0 → 0.3.1
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 +4 -4
- data/Gemfile +1 -0
- data/example/.rspec +1 -1
- data/gnawrnip.gemspec +1 -1
- data/lib/gnawrnip/developer.rb +0 -1
- data/lib/gnawrnip/ext/capybara/session.rb +18 -3
- data/lib/gnawrnip/gnawrnip.css +39 -0
- data/lib/gnawrnip/image.rb +10 -23
- data/lib/gnawrnip/rspec.rb +4 -4
- data/lib/gnawrnip/screenshot.rb +7 -15
- data/lib/gnawrnip/step_screenshot.rb +7 -8
- data/lib/gnawrnip/version.rb +1 -1
- data/lib/gnawrnip.rb +2 -10
- data/spec/gnawrnip/image_spec.rb +2 -10
- data/spec/gnawrnip/step_screenshot_spec.rb +8 -2
- metadata +5 -5
- data/lib/gnawrnip/gnawrnip.scss +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28f121a332c225aa6a9be33c505ff2e8052450fb
|
4
|
+
data.tar.gz: 016797eb3184c9d0159b82e935e8f4b29ee9aff2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fcee738f720198d3ad6716c58c1a8b2ed0af60cf09c2451385963e3b1ef376b067a28df54d1ee54e80a5144fda4f86996059c47cdd7b4ee05fb27d1a15d2d98
|
7
|
+
data.tar.gz: 842e30f5b810c1d862316027240f438b623c894743513beaac784db84568b906dda80b1d1a43bbb76c86e9948cf434deca396a6b91cb6e9350f762aa54d29aad
|
data/Gemfile
CHANGED
data/example/.rspec
CHANGED
data/gnawrnip.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency 'capybara', "~> 2.2"
|
22
|
-
spec.add_dependency 'turnip_formatter', '~> 0.3.
|
22
|
+
spec.add_dependency 'turnip_formatter', '~> 0.3.2'
|
23
23
|
spec.add_dependency 'oily_png'
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
25
|
spec.add_development_dependency "rake"
|
data/lib/gnawrnip/developer.rb
CHANGED
@@ -2,15 +2,30 @@ require 'capybara/session'
|
|
2
2
|
|
3
3
|
module Capybara
|
4
4
|
class Session
|
5
|
-
SAVE_SCREENSHOT_METHODS =
|
6
|
-
:
|
5
|
+
SAVE_SCREENSHOT_METHODS = [
|
6
|
+
:click_button,
|
7
|
+
:click_link,
|
8
|
+
:click_link_or_button,
|
9
|
+
:click_on,
|
10
|
+
:fill_in,
|
11
|
+
:choose,
|
12
|
+
:check,
|
13
|
+
:uncheck,
|
14
|
+
:select,
|
15
|
+
:unselect,
|
16
|
+
:attach_file,
|
17
|
+
:execute_script,
|
18
|
+
:go_back,
|
19
|
+
:go_forward,
|
20
|
+
:switch_to_window,
|
21
|
+
:visit
|
7
22
|
]
|
8
23
|
|
9
24
|
SAVE_SCREENSHOT_METHODS.each do |method|
|
10
25
|
alias_method "after_hook_#{method}".to_sym, method
|
11
26
|
|
12
27
|
define_method method do |*args, &block|
|
13
|
-
Gnawrnip.photographer.take_shot
|
28
|
+
Gnawrnip.photographer.take_shot if current_url != 'about:blank'
|
14
29
|
send("after_hook_#{method}", *args, &block)
|
15
30
|
end
|
16
31
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
div#steps-statistics section.scenario div.steps div.screenshot img {
|
2
|
+
max-width: 90%;
|
3
|
+
border: 2px solid black;
|
4
|
+
}
|
5
|
+
|
6
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav {
|
7
|
+
text-align: center;
|
8
|
+
}
|
9
|
+
|
10
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .pager {
|
11
|
+
margin-left: auto;
|
12
|
+
margin-right: auto;
|
13
|
+
}
|
14
|
+
|
15
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .pager span {
|
16
|
+
font-size: 50px;
|
17
|
+
display: inline;
|
18
|
+
color: #999999;
|
19
|
+
cursor: pointer;
|
20
|
+
}
|
21
|
+
|
22
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .pager span.cycle-pager-active {
|
23
|
+
color: red;
|
24
|
+
}
|
25
|
+
|
26
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .manipulate {
|
27
|
+
margin-bottom: 1em;
|
28
|
+
}
|
29
|
+
|
30
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .manipulate i {
|
31
|
+
color: black;
|
32
|
+
cursor: pointer;
|
33
|
+
margin-left: 0.3em;
|
34
|
+
margin-right: 0.3em;
|
35
|
+
}
|
36
|
+
|
37
|
+
div#steps-statistics section.scenario div.steps div.screenshot.animation > div.nav .manipulate i:hover {
|
38
|
+
color: #aa0000;
|
39
|
+
}
|
data/lib/gnawrnip/image.rb
CHANGED
@@ -8,13 +8,12 @@ module Gnawrnip
|
|
8
8
|
#
|
9
9
|
def initialize(filepath)
|
10
10
|
@filepath = filepath
|
11
|
-
analysis
|
12
11
|
end
|
13
12
|
|
14
|
-
def to_html
|
15
|
-
width = width
|
16
|
-
height = height
|
17
|
-
src =
|
13
|
+
def to_html
|
14
|
+
width = canvas.width
|
15
|
+
height = canvas.height
|
16
|
+
src = canvas.to_data_url
|
18
17
|
|
19
18
|
%Q(<img width="#{width}" height="#{height}" src="#{src}"/>)
|
20
19
|
end
|
@@ -23,36 +22,24 @@ module Gnawrnip
|
|
23
22
|
# @return [Fixnum] Width of image
|
24
23
|
#
|
25
24
|
def width
|
26
|
-
|
25
|
+
canvas.width
|
27
26
|
end
|
28
27
|
|
29
28
|
#
|
30
29
|
# @return [Fixnum] Height of image
|
31
30
|
#
|
32
31
|
def height
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_base64
|
37
|
-
Base64.strict_encode64(File.read(@filepath))
|
32
|
+
canvas.height
|
38
33
|
end
|
39
34
|
|
40
35
|
def resize(width, height)
|
41
|
-
canvas.resample_bilinear(width, height)
|
42
|
-
analysis
|
36
|
+
canvas.resample_bilinear!(width, height)
|
43
37
|
end
|
44
38
|
|
45
39
|
private
|
46
40
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
def analysis
|
51
|
-
@dimension = canvas.dimension
|
52
|
-
end
|
53
|
-
|
54
|
-
def canvas
|
55
|
-
OilyPNG::Canvas.from_file(@filepath)
|
56
|
-
end
|
41
|
+
def canvas
|
42
|
+
@canvas ||= OilyPNG::Canvas.from_file(@filepath)
|
43
|
+
end
|
57
44
|
end
|
58
45
|
end
|
data/lib/gnawrnip/rspec.rb
CHANGED
@@ -5,10 +5,6 @@ RSpec.configure do |config|
|
|
5
5
|
Gnawrnip.ready!
|
6
6
|
end
|
7
7
|
|
8
|
-
config.after(:all) do
|
9
|
-
Gnawrnip.finish!
|
10
|
-
end
|
11
|
-
|
12
8
|
# https://github.com/jnicklas/capybara/blob/master/lib/capybara/rspec.rb
|
13
9
|
fetch_current_example = RSpec.respond_to?(:current_example) ?
|
14
10
|
proc { RSpec.current_example } : proc { |context| context.example }
|
@@ -26,6 +22,10 @@ RSpec.configure do |config|
|
|
26
22
|
Gnawrnip.photographer.take_shot
|
27
23
|
screenshots = Gnawrnip.photographer.frames.compact
|
28
24
|
example.metadata[:gnawrnip][:screenshot] = screenshots
|
25
|
+
else
|
26
|
+
Gnawrnip.photographer.frames.compact.each do |fp|
|
27
|
+
fp.close!
|
28
|
+
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/lib/gnawrnip/screenshot.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'time'
|
2
2
|
require 'capybara'
|
3
|
-
require '
|
4
|
-
require 'fileutils'
|
3
|
+
require 'tempfile'
|
5
4
|
|
6
5
|
module Gnawrnip
|
7
6
|
class Screenshot
|
@@ -19,9 +18,8 @@ module Gnawrnip
|
|
19
18
|
# @example
|
20
19
|
# image = Gnawrnip::Screenshot.take
|
21
20
|
#
|
22
|
-
#
|
23
21
|
# @param [Fixnum] wait_second Second to repeat the retry
|
24
|
-
# @return [
|
22
|
+
# @return [Tempfile] Image file of screenshot
|
25
23
|
#
|
26
24
|
def take(wait_second = Capybara.default_wait_time)
|
27
25
|
start_time = Time.now
|
@@ -48,19 +46,13 @@ module Gnawrnip
|
|
48
46
|
end
|
49
47
|
|
50
48
|
#
|
51
|
-
# @return [
|
49
|
+
# @return [Tempfile]
|
52
50
|
#
|
53
51
|
def shot
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
path
|
60
|
-
end
|
61
|
-
|
62
|
-
def filepath
|
63
|
-
SCREENSHOT_OUTPUT_DIR + '/gnawrnip-' + SecureRandom.uuid + '.png'
|
52
|
+
Tempfile.open(['gnawrnip', '.png']) do |fp|
|
53
|
+
session.save_screenshot(fp.path)
|
54
|
+
fp
|
55
|
+
end
|
64
56
|
end
|
65
57
|
end
|
66
58
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'base64'
|
2
1
|
require 'turnip_formatter/step_template/exception'
|
3
2
|
require 'gnawrnip/developer'
|
4
3
|
|
@@ -6,8 +5,8 @@ module Gnawrnip
|
|
6
5
|
class StepScreenshot < TurnipFormatter::StepTemplate::Exception
|
7
6
|
on_failed :build
|
8
7
|
|
9
|
-
def self.
|
10
|
-
File.read(File.dirname(__FILE__) + '/gnawrnip.
|
8
|
+
def self.css
|
9
|
+
File.read(File.dirname(__FILE__) + '/gnawrnip.css')
|
11
10
|
end
|
12
11
|
|
13
12
|
def build(example)
|
@@ -46,15 +45,15 @@ module Gnawrnip
|
|
46
45
|
EOS
|
47
46
|
end
|
48
47
|
|
49
|
-
def single_image(
|
48
|
+
def single_image(file)
|
50
49
|
text = '<div class="screenshot">'
|
51
|
-
text += develop([
|
50
|
+
text += develop([file])
|
52
51
|
text + '</div>'
|
53
52
|
end
|
54
53
|
|
55
|
-
def develop(
|
56
|
-
|
57
|
-
image = developer.develop(path)
|
54
|
+
def develop(files)
|
55
|
+
files.map do |file|
|
56
|
+
image = developer.develop(file.path)
|
58
57
|
image.to_html
|
59
58
|
end.join
|
60
59
|
end
|
data/lib/gnawrnip/version.rb
CHANGED
data/lib/gnawrnip.rb
CHANGED
@@ -4,8 +4,6 @@ require 'gnawrnip/rspec'
|
|
4
4
|
require 'gnawrnip/photographer'
|
5
5
|
|
6
6
|
module Gnawrnip
|
7
|
-
SCREENSHOT_OUTPUT_DIR = File.expand_path('./gnawrnip_tmp')
|
8
|
-
|
9
7
|
class << self
|
10
8
|
#
|
11
9
|
# [Boolean] Whether to make animation GIF
|
@@ -35,12 +33,6 @@ module Gnawrnip
|
|
35
33
|
def ready!
|
36
34
|
require 'gnawrnip/ext/capybara/session' if animation?
|
37
35
|
require 'gnawrnip/step_screenshot'
|
38
|
-
|
39
|
-
FileUtils.mkdir_p(SCREENSHOT_OUTPUT_DIR)
|
40
|
-
end
|
41
|
-
|
42
|
-
def finish!
|
43
|
-
FileUtils.rm_rf(SCREENSHOT_OUTPUT_DIR)
|
44
36
|
end
|
45
37
|
|
46
38
|
def animation?
|
@@ -58,6 +50,6 @@ module Gnawrnip
|
|
58
50
|
end
|
59
51
|
|
60
52
|
Gnawrnip.configure do |c|
|
61
|
-
c.make_animation
|
62
|
-
c.max_frame_size
|
53
|
+
c.make_animation = true
|
54
|
+
c.max_frame_size = nil
|
63
55
|
end
|
data/spec/gnawrnip/image_spec.rb
CHANGED
@@ -13,11 +13,7 @@ module Gnawrnip
|
|
13
13
|
|
14
14
|
context 'image size is 640x480' do
|
15
15
|
let(:canvas) do
|
16
|
-
double(
|
17
|
-
end
|
18
|
-
|
19
|
-
let(:dimension) do
|
20
|
-
double(width: 640, height: 480)
|
16
|
+
double(width: 640, height: 480, save: nil)
|
21
17
|
end
|
22
18
|
|
23
19
|
describe '.width' do
|
@@ -33,14 +29,10 @@ module Gnawrnip
|
|
33
29
|
describe '.resize' do
|
34
30
|
let(:canvas) do
|
35
31
|
canvas = super()
|
36
|
-
expect(canvas).to receive(:resample_bilinear).with(320, 240).
|
32
|
+
expect(canvas).to receive(:resample_bilinear!).with(320, 240).once
|
37
33
|
canvas
|
38
34
|
end
|
39
35
|
|
40
|
-
before do
|
41
|
-
expect_any_instance_of(Image).to receive(:analysis).twice
|
42
|
-
end
|
43
|
-
|
44
36
|
it { image.resize(320, 240) }
|
45
37
|
end
|
46
38
|
end
|
@@ -18,7 +18,13 @@ module Gnawrnip
|
|
18
18
|
subject { template.build(example) }
|
19
19
|
|
20
20
|
context 'has multiple data' do
|
21
|
-
let(:paths)
|
21
|
+
let(:paths) do
|
22
|
+
[
|
23
|
+
double(path: '/path/to/A.png'),
|
24
|
+
double(path: '/path/to/B.png'),
|
25
|
+
double(path: '/path/to/C.png')
|
26
|
+
]
|
27
|
+
end
|
22
28
|
|
23
29
|
it 'should get image tag and source that base64 encoded' do
|
24
30
|
should include '<div class="screenshot animation">'
|
@@ -27,7 +33,7 @@ module Gnawrnip
|
|
27
33
|
end
|
28
34
|
|
29
35
|
context 'has single data' do
|
30
|
-
let(:paths) { ['/path/to/A.png'] }
|
36
|
+
let(:paths) { [double(path: '/path/to/A.png')] }
|
31
37
|
it do
|
32
38
|
should include '<div class="screenshot">'
|
33
39
|
should_not include '<div class="nav">'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gnawrnip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wataru MIYAGUNI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.3.
|
33
|
+
version: 0.3.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.3.
|
40
|
+
version: 0.3.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: oily_png
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,8 +132,8 @@ files:
|
|
132
132
|
- lib/gnawrnip.rb
|
133
133
|
- lib/gnawrnip/developer.rb
|
134
134
|
- lib/gnawrnip/ext/capybara/session.rb
|
135
|
+
- lib/gnawrnip/gnawrnip.css
|
135
136
|
- lib/gnawrnip/gnawrnip.js
|
136
|
-
- lib/gnawrnip/gnawrnip.scss
|
137
137
|
- lib/gnawrnip/image.rb
|
138
138
|
- lib/gnawrnip/no_screenshot.png
|
139
139
|
- lib/gnawrnip/photographer.rb
|
data/lib/gnawrnip/gnawrnip.scss
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
div#steps-statistics section.scenario {
|
2
|
-
div.steps {
|
3
|
-
div.screenshot {
|
4
|
-
img {
|
5
|
-
max-width: 90%;
|
6
|
-
border: 2px solid black;
|
7
|
-
}
|
8
|
-
}
|
9
|
-
|
10
|
-
div.screenshot.animation {
|
11
|
-
> div.nav {
|
12
|
-
text-align: center;
|
13
|
-
|
14
|
-
.pager {
|
15
|
-
margin-left: auto;
|
16
|
-
margin-right: auto;
|
17
|
-
|
18
|
-
span {
|
19
|
-
font-size: 50px;
|
20
|
-
display: inline;
|
21
|
-
color: #999999;
|
22
|
-
cursor: pointer;
|
23
|
-
|
24
|
-
&.cycle-pager-active {
|
25
|
-
color: red;
|
26
|
-
}
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
.manipulate {
|
31
|
-
margin-bottom: 1em;
|
32
|
-
|
33
|
-
i {
|
34
|
-
color: black;
|
35
|
-
cursor: pointer;
|
36
|
-
margin-left: 0.3em;
|
37
|
-
margin-right: 0.3em;
|
38
|
-
|
39
|
-
&:hover {
|
40
|
-
color: #aa0000;
|
41
|
-
}
|
42
|
-
}
|
43
|
-
}
|
44
|
-
}
|
45
|
-
}
|
46
|
-
}
|
47
|
-
}
|