gnawrnip 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
}
|