green_onion 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- [<img src="https://secure.travis-ci.org/tomeara/green_onion.png" />](http://travis-ci.org/#!/tomeara/green_onion) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/tomeara/green_onion)
2
+ [<img src="https://secure.travis-ci.org/intridea/green_onion.png" />](http://travis-ci.org/#!/intridea/green_onion) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/intridea/green_onion)
3
3
 
4
4
  # GreenOnion
5
5
 
@@ -60,13 +60,27 @@ For adding GreenOnion to your integration tests in RSpec, add `require 'green_on
60
60
 
61
61
  GreenOnion.configure do |c|
62
62
  c.skins_dir = 'your/path/to/skins'
63
+ c.skin_name = {
64
+ :match => /[\/]/,
65
+ :replace => "_",
66
+ :prefix => nil,
67
+ :root => "root"
68
+ }
69
+ c.dimensions = {
70
+ :width => 1440,
71
+ :height => 768
72
+ }
63
73
  c.threshold = 20
64
- c.dimensions = { :width => 1440, :height => 768 }
65
74
  end
66
75
 
67
76
  * `skins_dir` is the directory that GreenOnion will store all skins. The namespace for skins is {URI name}.png (original), {URI name}_fresh.png (testing), and {URI name}_diff.png. The default directory will be './spec/skins'
68
- * `threshold` is the percentage of acceptable change that the screenshots can take. This number can always be overwritten for an instance.
77
+ * `skin_name` is a hash that defines the skin namespace. The options include:
78
+ * `:match` - a regex pattern that will replace characters from the URI. The default pattern will match to all "/" in a URI.
79
+ * `:replace` - the string that replaces what is matched. These options are just abstractions of String.gsub in GreenOnion::Screenshot.
80
+ * `:prefix` - a value that will be concatenated to the front of the filename. A good example would be if you wanted to add a timestamp: `:prefix => Time.now.strftime("%m_%Y_")`.
81
+ * `:root` - the string that will be used to name the root of a domain.
69
82
  * `dimensions` is a hash with the height and width of the browser window. The default dimensions are 1024x768.
83
+ * `threshold` is the percentage of acceptable change that the screenshots can take. This number can always be overwritten for an instance.
70
84
 
71
85
  Then use one of the three methods below in a test...
72
86
 
@@ -105,7 +119,7 @@ The best way to run the specs is with...
105
119
  * Screenshots can either be viewed as a visual diff, or overlayed newest over oldest and viewed as an onion-skin with sliding transparency.
106
120
  * Allow for flexibility in picking browsers
107
121
  * Skinner generator needs love <3
108
- ** Should allow for testing using fixtures/factories
122
+ * Should allow for testing using fixtures/factories
109
123
  * More robust tests, especially around the visual diffs themselves
110
124
  * More documentation
111
125
  * More configuration/customizable settings
data/green_onion.gemspec CHANGED
@@ -6,12 +6,10 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["ted@intridea.com"]
7
7
  gem.description = %q{UI testing/screenshot diffing tool}
8
8
  gem.summary = %q{Regressions in the view making you cry? Have more confidence with GreenOnion.}
9
- gem.homepage = ""
9
+ gem.homepage = "http://intridea.github.com/green_onion"
10
10
 
11
11
  gem.add_development_dependency "rake"
12
12
  gem.add_development_dependency "rspec"
13
- gem.add_development_dependency "pry"
14
- gem.add_development_dependency "debugger"
15
13
  gem.add_development_dependency "sinatra"
16
14
 
17
15
  gem.add_dependency "capybara", "1.1.2"
data/lib/green_onion.rb CHANGED
@@ -23,7 +23,8 @@ module GreenOnion
23
23
  def skin(url)
24
24
  @screenshot = Screenshot.new(
25
25
  :dir => @configuration.skins_dir,
26
- :dimensions => @configuration.dimensions
26
+ :dimensions => @configuration.dimensions,
27
+ :skin_name => @configuration.skin_name
27
28
  )
28
29
  @compare = GreenOnion::Compare.new
29
30
 
@@ -19,5 +19,22 @@ module GreenOnion
19
19
  @skins_dir ||= './spec/skins'
20
20
  end
21
21
 
22
+ def skin_name=(options)
23
+ @skin_name = skin_namespace_hash(options)
24
+ end
25
+
26
+ def skin_name
27
+ @skin_name ||= skin_namespace_hash
28
+ end
29
+
30
+ def skin_namespace_hash(options = {})
31
+ {
32
+ :match => options[:match] ? options[:match] : /[\/]/,
33
+ :replace => options[:replace] ? options[:replace] : "_",
34
+ :prefix => options[:prefix] ? options[:prefix] : nil,
35
+ :root => options[:root] ? options[:root] : "root"
36
+ }
37
+ end
38
+
22
39
  end
23
40
  end
@@ -6,13 +6,14 @@ module GreenOnion
6
6
  class Screenshot
7
7
  include Capybara::DSL
8
8
 
9
- attr_accessor :dir, :dimensions
9
+ attr_accessor :dir, :dimensions, :skin_name
10
10
  attr_reader :paths_hash
11
11
 
12
12
  def initialize(params = {})
13
13
  Capybara.default_driver = :webkit
14
14
  @dimensions = params[:dimensions]
15
15
  @dir = params[:dir]
16
+ @skin_name = params[:skin_name]
16
17
  @paths_hash = {}
17
18
  end
18
19
 
@@ -45,13 +46,19 @@ module GreenOnion
45
46
  end
46
47
  end
47
48
 
49
+ def file_namer
50
+ @filename.slice!(/^\//) # remove the beginning "/" if there is one
51
+ @filename = @filename.gsub(@skin_name[:match], @skin_name[:replace]) # by default, all "/" in a URI string will be replaced with "_"
52
+ @filename = @skin_name[:prefix] + @filename if @skin_name[:prefix] # add on a prefix defined in the configuration block
53
+ @paths_hash[:original] = "#{@dir}/#{@filename}.png"
54
+ end
55
+
48
56
  def get_path(url)
49
57
  url_matcher(url)
50
58
  if @filename.empty? || @filename == '/'
51
- @paths_hash[:original] = "#{@dir}/root.png"
59
+ @paths_hash[:original] = "#{@dir}/#{@skin_name[:root]}.png"
52
60
  else
53
- @filename = @filename.gsub(/[\/]/, '')
54
- @paths_hash[:original] = "#{@dir}/#{@filename}.png"
61
+ file_namer
55
62
  end
56
63
  end
57
64
 
@@ -1,3 +1,3 @@
1
1
  module GreenOnion
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -18,4 +18,8 @@ class SampleApp < Sinatra::Base
18
18
  "<img src='onion_face_#{rand(2)}.jpg' />"
19
19
  end
20
20
 
21
+ get "/another/uri/string" do
22
+ "<h1>It was the best of times, it was the blorst of times.</h1>"
23
+ end
24
+
21
25
  end
@@ -118,6 +118,42 @@ describe GreenOnion do
118
118
  end
119
119
  end
120
120
 
121
+ describe "Skins with custom file namespace" do
122
+
123
+ after(:each) do
124
+ FileUtils.rm_r(@tmp_path, :force => true)
125
+ end
126
+
127
+ it "should allow custom file namespacing" do
128
+ GreenOnion.configure do |c|
129
+ c.skins_dir = @tmp_path
130
+ c.skin_name = {
131
+ :match => /[\/a-z]/,
132
+ :replace => "-",
133
+ :prefix => "start",
134
+ :root => "first"
135
+ }
136
+ end
137
+ ( (GreenOnion.configuration.skin_name[:match] == /[\/a-z]/) &&
138
+ (GreenOnion.configuration.skin_name[:replace] == "-") &&
139
+ (GreenOnion.configuration.skin_name[:prefix] == "start") &&
140
+ (GreenOnion.configuration.skin_name[:root] == "first") ).should be_true
141
+ end
142
+
143
+ it "should allow incomplete setting of skin_name hash" do
144
+ GreenOnion.configure do |c|
145
+ c.skins_dir = @tmp_path
146
+ c.skin_name = {
147
+ :replace => "o"
148
+ }
149
+ end
150
+ ( (GreenOnion.configuration.skin_name[:match] == /[\/]/) &&
151
+ (GreenOnion.configuration.skin_name[:replace] == "o") &&
152
+ (GreenOnion.configuration.skin_name[:prefix] == nil) &&
153
+ (GreenOnion.configuration.skin_name[:root] == "root") ).should be_true
154
+ end
155
+ end
156
+
121
157
  describe "Errors" do
122
158
  before(:each) do
123
159
  GreenOnion.configure do |c|
@@ -14,7 +14,13 @@ describe GreenOnion::Screenshot do
14
14
  before(:each) do
15
15
  @screenshot = GreenOnion::Screenshot.new(
16
16
  :dir => @tmp_path,
17
- :dimensions => @dimensions
17
+ :dimensions => @dimensions,
18
+ :skin_name => {
19
+ :match => /[\/]/,
20
+ :replace => "",
21
+ :prefix => nil,
22
+ :root => "root"
23
+ }
18
24
  )
19
25
  @file = "#{@tmp_path}/fake_uri.png"
20
26
  end
@@ -51,7 +57,13 @@ describe GreenOnion::Screenshot do
51
57
  before(:each) do
52
58
  @screenshot = GreenOnion::Screenshot.new(
53
59
  :dir => @tmp_path,
54
- :dimensions => @dimensions
60
+ :dimensions => @dimensions,
61
+ :skin_name => {
62
+ :match => /[\/]/,
63
+ :replace => "",
64
+ :prefix => nil,
65
+ :root => "root"
66
+ }
55
67
  )
56
68
  @file1 = "#{@tmp_path}/fake_uri.png"
57
69
  @file2 = "#{@tmp_path}/fake_uri_fresh.png"
@@ -79,4 +91,54 @@ describe GreenOnion::Screenshot do
79
91
  ( File.exist?(@file1) && File.exist?(@file2) ).should be_false
80
92
  end
81
93
  end
94
+
95
+ describe "Custom filenaming" do
96
+
97
+ after(:each) do
98
+ FileUtils.rm_r(@tmp_path, :force => true)
99
+ end
100
+
101
+ it "should allow users to create a naming convention" do
102
+ @screenshot = GreenOnion::Screenshot.new(
103
+ :dir => @tmp_path,
104
+ :skin_name => {
105
+ :match => /[\/]/,
106
+ :replace => "#",
107
+ :prefix => nil,
108
+ :root => "root"
109
+ }
110
+ )
111
+ @screenshot.get_path("#{@url}/another/uri/string")
112
+ @screenshot.paths_hash[:original].should eq("#{@tmp_path}/another#uri#string.png")
113
+ end
114
+
115
+ it "should allow filenames to have a timestamp" do
116
+ this_month = Time.now.strftime("%m_%Y_")
117
+ @screenshot = GreenOnion::Screenshot.new(
118
+ :dir => @tmp_path,
119
+ :skin_name => {
120
+ :match => /[\/]/,
121
+ :replace => "-",
122
+ :prefix => this_month,
123
+ :root => "root"
124
+ }
125
+ )
126
+ @screenshot.get_path("#{@url}/another/uri/string")
127
+ @screenshot.paths_hash[:original].should eq("#{@tmp_path}/#{this_month}another-uri-string.png")
128
+ end
129
+
130
+ it "should allow renaming for root skins" do
131
+ @screenshot = GreenOnion::Screenshot.new(
132
+ :dir => @tmp_path,
133
+ :skin_name => {
134
+ :match => /[\/]/,
135
+ :replace => "-",
136
+ :prefix => nil,
137
+ :root => "first"
138
+ }
139
+ )
140
+ @screenshot.get_path(@url)
141
+ @screenshot.paths_hash[:original].should eq("#{@tmp_path}/first.png")
142
+ end
143
+ end
82
144
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: green_onion
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.1.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ted O'Meara
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-08-06 00:00:00 Z
13
+ date: 2012-08-08 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -35,7 +35,7 @@ dependencies:
35
35
  type: :development
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
38
- name: pry
38
+ name: sinatra
39
39
  prerelease: false
40
40
  requirement: &id003 !ruby/object:Gem::Requirement
41
41
  none: false
@@ -45,94 +45,72 @@ dependencies:
45
45
  version: "0"
46
46
  type: :development
47
47
  version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: debugger
50
- prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
57
- type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: sinatra
61
- prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
63
- none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
68
- type: :development
69
- version_requirements: *id005
70
48
  - !ruby/object:Gem::Dependency
71
49
  name: capybara
72
50
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
74
52
  none: false
75
53
  requirements:
76
54
  - - "="
77
55
  - !ruby/object:Gem::Version
78
56
  version: 1.1.2
79
57
  type: :runtime
80
- version_requirements: *id006
58
+ version_requirements: *id004
81
59
  - !ruby/object:Gem::Dependency
82
60
  name: capybara-webkit
83
61
  prerelease: false
84
- requirement: &id007 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
85
63
  none: false
86
64
  requirements:
87
65
  - - "="
88
66
  - !ruby/object:Gem::Version
89
67
  version: 0.12.1
90
68
  type: :runtime
91
- version_requirements: *id007
69
+ version_requirements: *id005
92
70
  - !ruby/object:Gem::Dependency
93
71
  name: oily_png
94
72
  prerelease: false
95
- requirement: &id008 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
96
74
  none: false
97
75
  requirements:
98
76
  - - "="
99
77
  - !ruby/object:Gem::Version
100
78
  version: 1.0.2
101
79
  type: :runtime
102
- version_requirements: *id008
80
+ version_requirements: *id006
103
81
  - !ruby/object:Gem::Dependency
104
82
  name: rainbow
105
83
  prerelease: false
106
- requirement: &id009 !ruby/object:Gem::Requirement
84
+ requirement: &id007 !ruby/object:Gem::Requirement
107
85
  none: false
108
86
  requirements:
109
87
  - - "="
110
88
  - !ruby/object:Gem::Version
111
89
  version: 1.1.4
112
90
  type: :runtime
113
- version_requirements: *id009
91
+ version_requirements: *id007
114
92
  - !ruby/object:Gem::Dependency
115
93
  name: fileutils
116
94
  prerelease: false
117
- requirement: &id010 !ruby/object:Gem::Requirement
95
+ requirement: &id008 !ruby/object:Gem::Requirement
118
96
  none: false
119
97
  requirements:
120
98
  - - "="
121
99
  - !ruby/object:Gem::Version
122
100
  version: "0.7"
123
101
  type: :runtime
124
- version_requirements: *id010
102
+ version_requirements: *id008
125
103
  - !ruby/object:Gem::Dependency
126
104
  name: thor
127
105
  prerelease: false
128
- requirement: &id011 !ruby/object:Gem::Requirement
106
+ requirement: &id009 !ruby/object:Gem::Requirement
129
107
  none: false
130
108
  requirements:
131
109
  - - "="
132
110
  - !ruby/object:Gem::Version
133
111
  version: 0.15.4
134
112
  type: :runtime
135
- version_requirements: *id011
113
+ version_requirements: *id009
136
114
  description: UI testing/screenshot diffing tool
137
115
  email:
138
116
  - ted@intridea.com
@@ -170,7 +148,7 @@ files:
170
148
  - spec/unit/compare_spec.rb
171
149
  - spec/unit/green_onion_spec.rb
172
150
  - spec/unit/screenshot_spec.rb
173
- homepage: ""
151
+ homepage: http://intridea.github.com/green_onion
174
152
  licenses: []
175
153
 
176
154
  post_install_message: