gravatarify 1.2.1 → 2.0.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.
- data/README.md +115 -73
- data/Rakefile +2 -2
- data/VERSION.yml +3 -3
- data/lib/gravatarify.rb +1 -6
- data/lib/gravatarify/base.rb +40 -48
- data/lib/gravatarify/helper.rb +11 -25
- data/lib/gravatarify/utils.rb +44 -0
- data/test/test_helper.rb +1 -9
- data/test/unit/gravatarify_base_test.rb +54 -46
- data/test/unit/gravatarify_helper_test.rb +12 -30
- data/test/unit/gravatarify_rack_vs_cgi_test.rb +7 -7
- data/test/unit/gravatarify_styles_test.rb +92 -0
- data/test/unit/gravatarify_subdomain_test.rb +13 -21
- metadata +7 -9
- data/lib/gravatarify/object_support.rb +0 -59
- data/test/unit/gravatarify_ar_dm_test.rb +0 -60
- data/test/unit/gravatarify_object_support_test.rb +0 -107
data/lib/gravatarify/helper.rb
CHANGED
@@ -1,18 +1,6 @@
|
|
1
1
|
module Gravatarify::Helper
|
2
|
-
# so that it's possible to access that build_gravatar_url method
|
3
2
|
include Gravatarify::Base
|
4
|
-
|
5
|
-
# Allow HTML options to be overriden globally as well, useful
|
6
|
-
# to e.g. define a common alt attribute, or class.
|
7
|
-
#
|
8
|
-
# Gravatarify::Helper.html_options[:title] = "Gravatar"
|
9
|
-
#
|
10
|
-
# @return [Hash] globally defined html attributes
|
11
|
-
def self.html_options; @html_options ||= { :alt => '' } end
|
12
|
-
|
13
|
-
# To simplify things a bit and have a neat-o naming
|
14
|
-
alias_method :gravatar_url, :build_gravatar_url
|
15
|
-
|
3
|
+
|
16
4
|
# Helper method for HAML to return a neat hash to be used as attributes in an image tag.
|
17
5
|
#
|
18
6
|
# Now it's as simple as doing something like:
|
@@ -23,14 +11,15 @@ module Gravatarify::Helper
|
|
23
11
|
#
|
24
12
|
# @param [String, #email, #mail, #gravatar_url] email a string or an object used
|
25
13
|
# to generate to gravatar url for.
|
26
|
-
# @param [Hash]
|
14
|
+
# @param [Symbol, Hash] *params other gravatar or html options for building the resulting
|
27
15
|
# hash.
|
28
16
|
# @return [Hash] all html attributes required to build an +img+ tag.
|
29
|
-
def gravatar_attrs(email,
|
30
|
-
url_options =
|
31
|
-
options
|
32
|
-
options[:src] =
|
33
|
-
|
17
|
+
def gravatar_attrs(email, *params)
|
18
|
+
url_options = Gravatarify::Utils.merge_gravatar_options(*params)
|
19
|
+
options = url_options[:html] || {}
|
20
|
+
options[:src] = gravatar_url(email, false, url_options)
|
21
|
+
options[:width] = options[:height] = (url_options[:size] || 80) # customize size
|
22
|
+
{ :alt => '' }.merge!(options) # to ensure validity merge with :alt => ''!
|
34
23
|
end
|
35
24
|
|
36
25
|
# Takes care of creating an <tt><img/></tt>-tag based on a gravatar url, it no longer
|
@@ -38,14 +27,11 @@ module Gravatarify::Helper
|
|
38
27
|
#
|
39
28
|
# @param [String, #email, #mail, #gravatar_url] email a string or an object used
|
40
29
|
# to generate the gravatar url from
|
41
|
-
# @param [Hash]
|
30
|
+
# @param [Symbol, Hash] *params other gravatar or html options for building the resulting
|
42
31
|
# image tag.
|
43
32
|
# @return [String] a complete and hopefully valid +img+ tag.
|
44
|
-
def gravatar_tag(email,
|
45
|
-
html_attrs = gravatar_attrs(email,
|
46
|
-
escaped = defined?(Rack::Utils) ? Rack::Utils.escape_html(value) : CGI.escapeHTML(value)
|
47
|
-
"#{key}=\"#{escaped}\""
|
48
|
-
end.sort.join(" ")
|
33
|
+
def gravatar_tag(email, *params)
|
34
|
+
html_attrs = gravatar_attrs(email, *params).map { |key,value| "#{key}=\"#{Gravatarify::Utils.escape_html(value)}\"" }.sort.join(" ")
|
49
35
|
"<img #{html_attrs} />"
|
50
36
|
end
|
51
37
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
begin; require 'rack/utils'; rescue LoadError; require 'cgi' end
|
2
|
+
|
3
|
+
module Gravatarify
|
4
|
+
module Utils #:nodoc:
|
5
|
+
# Helper method to URI escape a string using either <tt>Rack::Utils#escape</tt> if available or else
|
6
|
+
# fallback to <tt>CGI#escape</tt>.
|
7
|
+
def self.escape(str)
|
8
|
+
str = str.to_s
|
9
|
+
defined?(Rack::Utils) ? Rack::Utils.escape(str) : CGI.escape(str)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Escape HTML entities in string, basically falls back to either <tt>RackUtils#escape_html</tt>
|
13
|
+
# or <tt>CGI#escapeHTML</tt>.
|
14
|
+
def self.escape_html(str)
|
15
|
+
str = str.to_s
|
16
|
+
defined?(Rack::Utils) ? Rack::Utils.escape_html(str) : CGI.escapeHTML(str)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Merge supplied list of +params+ with the globally defined default options and
|
20
|
+
# any params. Then merge remaining params as hash.
|
21
|
+
#
|
22
|
+
def self.merge_gravatar_options(*params)
|
23
|
+
return (params[1] || {}) if params.first == false
|
24
|
+
options = Gravatarify.options.dup
|
25
|
+
deep_merge_html!(options, Gravatarify.styles[params.shift] || {}) unless params.first.is_a?(Hash)
|
26
|
+
deep_merge_html!(options, params.first) unless params.empty?
|
27
|
+
options
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.deep_merge_html!(hash, to_merge)
|
31
|
+
html = (hash[:html] || {}).merge(to_merge[:html] || {})
|
32
|
+
hash.merge!(to_merge)
|
33
|
+
hash[:html] = html unless html.empty?
|
34
|
+
end
|
35
|
+
|
36
|
+
# Tries first to call +email+, then +mail+ then +to_s+ on supplied
|
37
|
+
# object.
|
38
|
+
def self.smart_email(obj)
|
39
|
+
str = (obj.respond_to?(:email) ? obj.send(:email) : (obj.respond_to?(:mail) ? obj.send(:mail) : obj)).to_s
|
40
|
+
str = str.sub(/\A.*?<(.+?)>.*\z/, '\1') if str =~ /<.+>/
|
41
|
+
str.strip.downcase
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -3,9 +3,6 @@ require 'test/unit'
|
|
3
3
|
require 'shoulda'
|
4
4
|
require 'rr'
|
5
5
|
|
6
|
-
require 'active_support'
|
7
|
-
begin; require 'activerecord'; rescue LoadError; end
|
8
|
-
begin; require 'dm-core'; rescue LoadError; end
|
9
6
|
require 'gravatarify'
|
10
7
|
|
11
8
|
Test::Unit::TestCase.send :include, RR::Adapters::TestUnit
|
@@ -14,12 +11,7 @@ Test::Unit::TestCase.send :include, RR::Adapters::TestUnit
|
|
14
11
|
def reset_gravatarify!
|
15
12
|
Gravatarify.options.clear
|
16
13
|
Gravatarify.options[:filetype] = :jpg
|
17
|
-
Gravatarify.subdomains = %w{ 0 1 2 www }
|
18
|
-
|
19
|
-
if defined?(Gravatarify::Helper)
|
20
|
-
Gravatarify::Helper.html_options.clear
|
21
|
-
Gravatarify::Helper.html_options[:alt] = ''
|
22
|
-
end
|
14
|
+
Gravatarify.subdomains = %w{ 0 1 2 www }
|
23
15
|
end
|
24
16
|
|
25
17
|
# some often used values...
|
@@ -9,79 +9,83 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
def setup; reset_gravatarify! end
|
11
11
|
|
12
|
-
context "#
|
12
|
+
context "#gravatar_url, but without any options yet" do
|
13
13
|
should "generate correct url for hash without options" do
|
14
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
14
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url('bella@gmail.com')
|
15
15
|
end
|
16
16
|
|
17
17
|
should "trim and lowercase email address (as according to gravatar docs)" do
|
18
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
19
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
20
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
18
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url("\tbella@gmail.com \n\t")
|
19
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url("BELLA@gmail.COM")
|
20
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(" BELLA@GMAIL.com")
|
21
21
|
end
|
22
22
|
|
23
23
|
should "handle a nil email as if it were an empty string" do
|
24
|
-
assert_equal NIL_JPG,
|
25
|
-
assert_equal NIL_JPG,
|
24
|
+
assert_equal NIL_JPG, gravatar_url(nil)
|
25
|
+
assert_equal NIL_JPG, gravatar_url('')
|
26
|
+
end
|
27
|
+
|
28
|
+
should "be aliased to #build_gravatar_url, for backwards compatibility" do
|
29
|
+
assert_equal BELLA_AT_GMAIL_JPG, build_gravatar_url('bella@gmail.com')
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
|
-
context "#
|
33
|
+
context "#gravatar_url, with options" do
|
30
34
|
should "add well known options like size, rating or default and always in alphabetical order" do
|
31
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=16",
|
32
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Ftest.jpg&s=20",
|
33
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?other=escaped%26yes%3F&r=x&s=30",
|
35
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=16", gravatar_url('bella@gmail.com', :size => 16)
|
36
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Ftest.jpg&s=20", gravatar_url('bella@gmail.com', :size => 20, :default => 'http://example.com/test.jpg')
|
37
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?other=escaped%26yes%3F&r=x&s=30", gravatar_url('bella@gmail.com', :size => 30, :rating => :x, :other => "escaped&yes?")
|
34
38
|
end
|
35
39
|
|
36
40
|
should "ensure that all options as well as keys are escaped correctly" do
|
37
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?escaped%2Fme=escaped%2Fme",
|
41
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?escaped%2Fme=escaped%2Fme", gravatar_url('bella@gmail.com', 'escaped/me' => 'escaped/me')
|
38
42
|
end
|
39
43
|
|
40
44
|
should "ignore false or nil options" do
|
41
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=24",
|
45
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=24", gravatar_url('bella@gmail.com', :s => 24, :invalid => false, :other => nil)
|
42
46
|
end
|
43
47
|
|
44
48
|
should "allow different :filetype to be set, like 'gif' or 'png'" do
|
45
|
-
assert_equal "#{BELLA_AT_GMAIL}.gif",
|
46
|
-
assert_equal "#{BELLA_AT_GMAIL}.png",
|
49
|
+
assert_equal "#{BELLA_AT_GMAIL}.gif", gravatar_url('bella@gmail.com', :filetype => :gif)
|
50
|
+
assert_equal "#{BELLA_AT_GMAIL}.png", gravatar_url('bella@gmail.com', :filetype => :png)
|
47
51
|
end
|
48
52
|
|
49
53
|
should "skip :filetype if set to false, nil or ''" do
|
50
|
-
assert_equal "#{BELLA_AT_GMAIL}",
|
51
|
-
assert_equal "#{BELLA_AT_GMAIL}",
|
52
|
-
assert_equal "#{BELLA_AT_GMAIL}",
|
53
|
-
assert_equal "#{BELLA_AT_GMAIL}.foobar",
|
54
|
-
assert_equal "#{BELLA_AT_GMAIL}.gif",
|
54
|
+
assert_equal "#{BELLA_AT_GMAIL}", gravatar_url('bella@gmail.com', :filetype => false)
|
55
|
+
assert_equal "#{BELLA_AT_GMAIL}", gravatar_url('bella@gmail.com', :filetype => nil)
|
56
|
+
assert_equal "#{BELLA_AT_GMAIL}", gravatar_url('bella@gmail.com', :filetype => '')
|
57
|
+
assert_equal "#{BELLA_AT_GMAIL}.foobar", gravatar_url('bella@gmail.com', :filetype => 'foobar')
|
58
|
+
assert_equal "#{BELLA_AT_GMAIL}.gif", gravatar_url('bella@gmail.com', :filetype => :gif)
|
55
59
|
end
|
56
60
|
|
57
61
|
should "handle Procs as :default, to easily generate default urls based on supplied :size" do
|
58
62
|
default = Proc.new { |*args| "http://example.com/gravatar#{args.first[:size] ? '-' + args.first[:size].to_s : ''}.jpg" }
|
59
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
60
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar-25.jpg&s=25",
|
61
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar-20.jpg&s=20",
|
63
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com', :default => default)
|
64
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar-25.jpg&s=25", gravatar_url('bella@gmail.com', :size => 25, :d => default)
|
65
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar-20.jpg&s=20", gravatar_url('bella@gmail.com', :size => 20, 'd' => default)
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
65
|
-
context "#
|
66
|
-
should "look for :email method and use it to generate
|
69
|
+
context "#gravatar_url when passed in an object" do
|
70
|
+
should "look for :email method and use it to generate gravatar_url from" do
|
67
71
|
obj = Object.new
|
68
72
|
mock(obj).email { "bella@gmail.com" }
|
69
73
|
|
70
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
74
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
71
75
|
end
|
72
76
|
|
73
77
|
should "look for :mail of field :email does not exist" do
|
74
78
|
obj = Object.new
|
75
79
|
mock(obj).mail { "bella@gmail.com" }
|
76
80
|
|
77
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
81
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
78
82
|
end
|
79
83
|
|
80
84
|
should "finally just use to_s... if neither :email nor :mail exists" do
|
81
85
|
obj = Object.new
|
82
86
|
mock(obj).to_s { "bella@gmail.com" }
|
83
87
|
|
84
|
-
assert_equal BELLA_AT_GMAIL_JPG,
|
88
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
85
89
|
end
|
86
90
|
|
87
91
|
should "handle Procs as :default and pass in the 'object' as second parameter" do
|
@@ -89,28 +93,32 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
89
93
|
girl = Object.new
|
90
94
|
mock(girl).email { "bella@gmail.com" }
|
91
95
|
mock(girl).female? { true }
|
92
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar_girl.jpg",
|
96
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar_girl.jpg", gravatar_url(girl, :default => default)
|
93
97
|
|
94
98
|
boy = Object.new
|
95
99
|
mock(boy).email { "hans@gmail.com" }
|
96
100
|
mock(boy).female? { false }
|
97
|
-
assert_equal "http://www.gravatar.com/avatar/b6987c8f1d734e684cf9721970b906e5.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
98
|
-
end
|
101
|
+
assert_equal "http://www.gravatar.com/avatar/b6987c8f1d734e684cf9721970b906e5.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url(boy, :default => default)
|
102
|
+
end
|
103
|
+
|
104
|
+
should "work easily work with RFC emails encapsulated in < and >" do
|
105
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url('Bella <bella@gmail.com>')
|
106
|
+
end
|
99
107
|
end
|
100
108
|
|
101
109
|
context "Gravatar hosts support" do
|
102
110
|
should "switch to different hosts based on generated email hash, yet always the same for consecutive calls with the same email!" do
|
103
|
-
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg",
|
104
|
-
assert_equal
|
105
|
-
assert_equal "http://1.gravatar.com/avatar/41d86cad3dd465d6913d5a3232744441.jpg",
|
106
|
-
assert_equal "http://2.gravatar.com/avatar/8f3af64e9c215d158b062a7b154e071e.jpg",
|
107
|
-
assert_equal "http://www.gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg",
|
111
|
+
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", gravatar_url('bella@gmail.com')
|
112
|
+
assert_equal gravatar_url('bella@gmail.com'), gravatar_url('bella@gmail.com')
|
113
|
+
assert_equal "http://1.gravatar.com/avatar/41d86cad3dd465d6913d5a3232744441.jpg", gravatar_url('bella@bella.com')
|
114
|
+
assert_equal "http://2.gravatar.com/avatar/8f3af64e9c215d158b062a7b154e071e.jpg", gravatar_url('bella@hotmail.com')
|
115
|
+
assert_equal "http://www.gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg", gravatar_url('bella@yahoo.de')
|
108
116
|
end
|
109
117
|
|
110
118
|
should "switch to https://secure.gravatar.com if :secure => true is supplied" do
|
111
|
-
assert_equal "https://secure.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg",
|
112
|
-
assert_equal "https://secure.gravatar.com/avatar/41d86cad3dd465d6913d5a3232744441.jpg",
|
113
|
-
assert_equal "https://secure.gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg",
|
119
|
+
assert_equal "https://secure.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", gravatar_url('bella@gmail.com', :secure => true)
|
120
|
+
assert_equal "https://secure.gravatar.com/avatar/41d86cad3dd465d6913d5a3232744441.jpg", gravatar_url('bella@bella.com', :secure => true)
|
121
|
+
assert_equal "https://secure.gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg", gravatar_url('bella@yahoo.de', :secure => true)
|
114
122
|
end
|
115
123
|
|
116
124
|
should "allow Procs for :secure option, enables pretty cool stuff for stuff like request.ssl?" do
|
@@ -118,11 +126,11 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
118
126
|
|
119
127
|
mock_ssl = MockView.new
|
120
128
|
mock(mock_ssl).request.stub!.ssl? { true }
|
121
|
-
assert_equal "https://secure.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", mock_ssl.
|
129
|
+
assert_equal "https://secure.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", mock_ssl.gravatar_url('bella@gmail.com')
|
122
130
|
|
123
131
|
mock_no_ssl = MockView.new
|
124
132
|
mock(mock_no_ssl).request.stub!.ssl? { false }
|
125
|
-
assert_equal BELLA_AT_GMAIL_JPG, mock_no_ssl.
|
133
|
+
assert_equal BELLA_AT_GMAIL_JPG, mock_no_ssl.gravatar_url('bella@gmail.com')
|
126
134
|
end
|
127
135
|
end
|
128
136
|
|
@@ -134,17 +142,17 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
134
142
|
end
|
135
143
|
|
136
144
|
should "ensure that default options are always added" do
|
137
|
-
assert_equal "#{BELLA_AT_GMAIL}.png?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
145
|
+
assert_equal "#{BELLA_AT_GMAIL}.png?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com')
|
138
146
|
end
|
139
147
|
|
140
|
-
should "ensure that default options can be overriden by passing options into
|
141
|
-
assert_equal "#{BELLA_AT_GMAIL}.gif?anything=else&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
148
|
+
should "ensure that default options can be overriden by passing options into gravatar_url call" do
|
149
|
+
assert_equal "#{BELLA_AT_GMAIL}.gif?anything=else&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com', :anything => "else", :filetype => :gif)
|
142
150
|
end
|
143
151
|
|
144
152
|
should "ensure that no filetypes are added when :filetype set to false, unless locally specified" do
|
145
153
|
Gravatarify.options[:filetype] = false
|
146
|
-
assert_equal "#{BELLA_AT_GMAIL}?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
147
|
-
assert_equal "#{BELLA_AT_GMAIL}.png?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
154
|
+
assert_equal "#{BELLA_AT_GMAIL}?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com')
|
155
|
+
assert_equal "#{BELLA_AT_GMAIL}.png?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com', :filetype => 'png')
|
148
156
|
end
|
149
157
|
end
|
150
158
|
end
|
@@ -8,13 +8,6 @@ class GravatarifyHelpersTest < Test::Unit::TestCase
|
|
8
8
|
# just ensure that no global options are defined when starting next test
|
9
9
|
reset_gravatarify!
|
10
10
|
end
|
11
|
-
|
12
|
-
context "#gravatar_url" do
|
13
|
-
should "return same urls as build_gravatar_url" do
|
14
|
-
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url('bella@gmail.com')
|
15
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=x&s=16", gravatar_url('bella@gmail.com', :d => 'x', :s => 16)
|
16
|
-
end
|
17
|
-
end
|
18
11
|
|
19
12
|
context "#gravatar_attrs" do
|
20
13
|
should "return hash with :height, :width, :alt and :src defined" do
|
@@ -25,9 +18,10 @@ class GravatarifyHelpersTest < Test::Unit::TestCase
|
|
25
18
|
end
|
26
19
|
|
27
20
|
should "allow any param to be defined/overridden, except src, width and heigth" do
|
28
|
-
hash = gravatar_attrs('bella@gmail.com', :size => 20, :r => :x, :
|
21
|
+
hash = gravatar_attrs('bella@gmail.com', :size => 20, :r => :x, :foo => 40,
|
22
|
+
:html => { :alt => 'bella', :id => 'test', :title => 'something', :class => 'gravatar'})
|
29
23
|
expected = {
|
30
|
-
:alt => 'bella', :src => "#{BELLA_AT_GMAIL_JPG}?r=x&s=20", :width => 20, :height => 20,
|
24
|
+
:alt => 'bella', :src => "#{BELLA_AT_GMAIL_JPG}?foo=40&r=x&s=20", :width => 20, :height => 20,
|
31
25
|
:id => 'test', :title => 'something', :class => 'gravatar'
|
32
26
|
}
|
33
27
|
assert_equal expected, hash
|
@@ -45,12 +39,12 @@ class GravatarifyHelpersTest < Test::Unit::TestCase
|
|
45
39
|
assert_equal '<img alt="" height="16" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?s=16" width="16" />',
|
46
40
|
gravatar_tag('bella@gmail.com', :size => 16)
|
47
41
|
assert_equal '<img alt="" class="gravatar" height="16" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?d=x&s=16" width="16" />',
|
48
|
-
gravatar_tag('bella@gmail.com', :class => "gravatar", :size => 16, :d => "x")
|
42
|
+
gravatar_tag('bella@gmail.com', :html => { :class => "gravatar" }, :size => 16, :d => "x")
|
49
43
|
end
|
50
44
|
|
51
45
|
should "ensure that all values are correctly html-esacped!" do
|
52
46
|
assert_equal '<img alt="" height="80" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg" title="<>" width="80" />',
|
53
|
-
gravatar_tag('bella@gmail.com', :title => '<>')
|
47
|
+
gravatar_tag('bella@gmail.com', :html => { :title => '<>' })
|
54
48
|
end
|
55
49
|
end
|
56
50
|
|
@@ -61,26 +55,16 @@ class GravatarifyHelpersTest < Test::Unit::TestCase
|
|
61
55
|
|
62
56
|
assert_equal '<img alt="" height="80" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg" width="80" />',
|
63
57
|
gravatar_tag(obj)
|
64
|
-
end
|
65
|
-
|
66
|
-
should "create <img/>-tag based on gravatar_url from object if object responds to gravatar_url" do
|
67
|
-
obj = Object.new
|
68
|
-
mock(obj).name { "Mr. X" }
|
69
|
-
mock(obj).gravatar_url({ :size => 16 }) { "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?s=16" }
|
70
|
-
|
71
|
-
assert_equal '<img alt="Gravatar for Mr. X" height="16" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?s=16" width="16" />',
|
72
|
-
gravatar_tag(obj, :size => 16, :alt => "Gravatar for #{obj.name}")
|
73
|
-
end
|
58
|
+
end
|
74
59
|
end
|
75
60
|
|
76
61
|
context "Gravatarify::Helper#html_options" do
|
77
62
|
should "add be added to all tags/hashes created by gravatar_tag or gravatar_attrs" do
|
78
|
-
Gravatarify
|
79
|
-
Gravatarify::Helper.html_options[:class] = "gravatar"
|
63
|
+
Gravatarify.options[:html] = { :title => "Gravatar", :class => "gravatar" } # add a title attribute, yeah neat-o!
|
80
64
|
|
81
65
|
assert_equal '<img alt="" class="gravatar" height="80" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg" title="Gravatar" width="80" />',
|
82
66
|
gravatar_tag('bella@gmail.com')
|
83
|
-
hash = gravatar_attrs('bella@gmail.com', :size => 20, :title => "Gravatar for Bella", :id => "test")
|
67
|
+
hash = gravatar_attrs('bella@gmail.com', :size => 20, :html => { :title => "Gravatar for Bella", :id => "test" })
|
84
68
|
expected = {
|
85
69
|
:alt => "", :width => 20, :height => 20, :src => "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?s=20",
|
86
70
|
:title => "Gravatar for Bella", :id => "test", :class => "gravatar"
|
@@ -89,21 +73,19 @@ class GravatarifyHelpersTest < Test::Unit::TestCase
|
|
89
73
|
end
|
90
74
|
|
91
75
|
should "not allow :src, :height or :width to be set via global options and all local options should override!" do
|
92
|
-
Gravatarify
|
93
|
-
Gravatarify::Helper.html_options[:width] = 30
|
94
|
-
Gravatarify::Helper.html_options[:title] = "Avatar"
|
76
|
+
Gravatarify.options[:html] = { :src => "avatar-30.jpg", :width => 30, :title => "Avatar" }
|
95
77
|
|
96
78
|
assert_equal '<img alt="" height="25" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?s=25" title="Gravatar" width="25" />',
|
97
|
-
gravatar_tag('bella@gmail.com', :size => 25, :title => 'Gravatar')
|
79
|
+
gravatar_tag('bella@gmail.com', :size => 25, :html => { :title => 'Gravatar' })
|
98
80
|
end
|
99
81
|
|
100
82
|
should "allow :alt to be set globally" do
|
101
|
-
Gravatarify
|
83
|
+
Gravatarify.options[:html] = { :alt => "Gravatar" }
|
102
84
|
|
103
85
|
assert_equal '<img alt="Gravatar" height="80" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg" width="80" />',
|
104
86
|
gravatar_tag('bella@gmail.com')
|
105
87
|
assert_equal '<img alt="Avatar" height="80" src="http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d" width="80" />',
|
106
|
-
gravatar_tag('bella@gmail.com', :filetype => false, :alt => 'Avatar')
|
88
|
+
gravatar_tag('bella@gmail.com', :filetype => false, :html => { :alt => 'Avatar' })
|
107
89
|
end
|
108
90
|
end
|
109
91
|
end
|
@@ -4,21 +4,21 @@ require 'cgi'
|
|
4
4
|
class GravatarifyRackVsCgiTest < Test::Unit::TestCase
|
5
5
|
include Gravatarify::Base
|
6
6
|
|
7
|
+
# Remove Rack if defined
|
8
|
+
def setup
|
9
|
+
Object.send(:remove_const, :Rack) if defined?(Rack)
|
10
|
+
end
|
11
|
+
|
7
12
|
# Reload Rack::Utils
|
8
13
|
def teardown
|
9
14
|
begin; require('rack/utils'); rescue LoadError; end
|
10
15
|
end
|
11
16
|
|
12
|
-
context "if Rack::Utils is not available, #
|
13
|
-
setup do
|
14
|
-
# Remove Rack if defined
|
15
|
-
Object.send(:remove_const, :Rack) if defined?(Rack)
|
16
|
-
end
|
17
|
-
|
17
|
+
context "if Rack::Utils is not available, #gravatar_url" do
|
18
18
|
should "fallback to CGI#escape" do
|
19
19
|
assert !defined?(Rack::Utils), 'Rack::Utils should no longer be defined'
|
20
20
|
assert defined?(CGI), "CGI should be defined"
|
21
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?escaped%2Fme=escaped%2Fme",
|
21
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?escaped%2Fme=escaped%2Fme", gravatar_url('bella@gmail.com', 'escaped/me' => 'escaped/me')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class GravatarifyStylesTest < Test::Unit::TestCase
|
4
|
+
include Gravatarify::Helper
|
5
|
+
|
6
|
+
def setup
|
7
|
+
reset_gravatarify!
|
8
|
+
Gravatarify.styles.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
context "Gravatarify#styles" do
|
12
|
+
should "store and retrieve styles" do
|
13
|
+
Gravatarify.styles[:mini] = { :size => 16 }
|
14
|
+
exp = { :size => 16 }
|
15
|
+
assert_equal exp, Gravatarify.styles[:mini]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "Gravatarify::Base#gravatar_url" do
|
20
|
+
setup { Gravatarify.styles[:mini] = { :size => 16, :default => :wavatar } }
|
21
|
+
|
22
|
+
should "still work without any argument" do
|
23
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url('bella@gmail.com')
|
24
|
+
end
|
25
|
+
|
26
|
+
should "respect styles" do
|
27
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=wavatar&s=16", gravatar_url('bella@gmail.com', :mini)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "allow to override styles" do
|
31
|
+
assert_equal "#{BELLA_AT_GMAIL}?d=404&s=16", gravatar_url('bella@gmail.com', :mini, :filetype => false, :default => 404)
|
32
|
+
end
|
33
|
+
|
34
|
+
should "override default options" do
|
35
|
+
Gravatarify.options[:size] = 45
|
36
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=wavatar&s=16", gravatar_url('bella@gmail.com', :mini)
|
37
|
+
end
|
38
|
+
|
39
|
+
should "inherit default options" do
|
40
|
+
Gravatarify.options[:size] = 45
|
41
|
+
Gravatarify.options[:filetype] = 'png'
|
42
|
+
assert_equal "#{BELLA_AT_GMAIL}.png?d=wavatar&s=16", gravatar_url('bella@gmail.com', :mini)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "work with unknown style" do
|
46
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}", gravatar_url('bella@gmail.com', :some_style)
|
47
|
+
end
|
48
|
+
|
49
|
+
should "work with unknown style and custom options" do
|
50
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=20", gravatar_url('bella@gmail.com', :some_style, :size => 20)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "Gravatarify::Helper#gravatar_attrs" do
|
55
|
+
setup { Gravatarify.styles[:mini] = { :size => 16 } }
|
56
|
+
|
57
|
+
should "still work as-is without options" do
|
58
|
+
expected = { :src => BELLA_AT_GMAIL_JPG, :alt => '', :width => 80, :height => 80 }
|
59
|
+
assert_equal expected, gravatar_attrs('bella@gmail.com')
|
60
|
+
end
|
61
|
+
|
62
|
+
should "work with style :mini" do
|
63
|
+
expected = { :src => "#{BELLA_AT_GMAIL_JPG}?s=16", :alt => '', :width => 16, :height => 16 }
|
64
|
+
assert_equal expected, gravatar_attrs('bella@gmail.com', :mini)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "Gravatarify::Helper#gravatar_tag" do
|
69
|
+
setup { Gravatarify.styles[:mini] = { :size => 16, :html => { :alt => "x" } } }
|
70
|
+
|
71
|
+
should "work with styles and be able to override options locally" do
|
72
|
+
assert_equal "<img alt=\"x\" height=\"16\" src=\"#{BELLA_AT_GMAIL_JPG}?r=x&s=16\" width=\"16\" />", gravatar_tag('bella@gmail.com', :mini, :rating => :x)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "Gravatarify#options and Gravatarify#styles" do
|
77
|
+
should "deep merge the :html attribute and inherit correctly" do
|
78
|
+
Gravatarify.options[:a] = "global"
|
79
|
+
Gravatarify.options[:b] = "global"
|
80
|
+
Gravatarify.options[:c] = "global"
|
81
|
+
Gravatarify.options[:html] = { :a => "global", :b => "global", :c => "global" }
|
82
|
+
Gravatarify.styles[:test] = { :b => "style", :c => "style", :html => { :b => "style", :c => "style" } }
|
83
|
+
|
84
|
+
expected = {
|
85
|
+
:alt => '', :width => 80, :height => 80,
|
86
|
+
:src => "#{BELLA_AT_GMAIL_JPG}?a=global&b=style&c=local",
|
87
|
+
:a => "global", :b => "style", :c => "local"
|
88
|
+
}
|
89
|
+
assert_equal expected, gravatar_attrs('bella@gmail.com', :test, :c => "local", :html => { :c => "local" })
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|