gravatarify 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -12
- data/VERSION.yml +2 -2
- data/init.rb +1 -2
- data/lib/gravatarify.rb +1 -5
- data/lib/gravatarify/base.rb +18 -5
- data/rails/init.rb +7 -0
- data/test/gravatarify_base_test.rb +13 -0
- data/test/gravatarify_object_support_test.rb +58 -48
- data/test/gravatarify_rack_vs_cgi_test.rb +25 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -4,11 +4,11 @@ Removes any hassles building those pesky gravatar urls, it's not there arent any
|
|
4
4
|
[there](http://github.com/chrislloyd/gravtastic), but none seem to support stuff like `Proc`s for the default picture url, or
|
5
5
|
the multiple host names supported by gravatar.com (great when displaying lots of avatars).
|
6
6
|
|
7
|
-
And it integrates seamlessly with Rails,
|
7
|
+
And it integrates seamlessly with Rails, DataMapper and even plain old Ruby.
|
8
8
|
|
9
|
-
- **Source**:
|
10
|
-
- **Docs**:
|
11
|
-
- **Gem**:
|
9
|
+
- **Source**: <http://github.com/lwe/gravatarify>
|
10
|
+
- **Docs**: <http://rdoc.info/projects/lwe/gravatarify>
|
11
|
+
- **Gem**: <http://gemcutter.org/gems/gravatarify>
|
12
12
|
|
13
13
|
## Install
|
14
14
|
|
@@ -31,13 +31,12 @@ and then `require 'gravatarify'` it.
|
|
31
31
|
|
32
32
|
This library provides...
|
33
33
|
|
34
|
-
* ...object/model helpers, so that an object responds to `gravatar_url`, see
|
34
|
+
* ...object/model helpers, so that an object responds to `gravatar_url`, see "Using the model helpers"
|
35
35
|
Works also very well with plain old ruby objects.
|
36
|
-
* ...Rails view helpers, namely `gravatar_url` and `gravatar_tag`, see
|
36
|
+
* ...Rails view helpers, namely `gravatar_url` and `gravatar_tag`, see "Using the view helpers". This is rails only though!
|
37
37
|
* ...and finally, a base module which provides the gravatar url generation, ready to be integrated into
|
38
|
-
custom helpers, plain ruby code or whatever, see
|
38
|
+
custom helpers, plain ruby code or whatever, see "Back to the roots".
|
39
39
|
|
40
|
-
<a id="l_view_helpers"/>
|
41
40
|
## Using the view helpers (Rails only!)
|
42
41
|
|
43
42
|
Probably one of the easiest ways to add support for gravatar images is with the included view helpers:
|
@@ -58,7 +57,6 @@ Using rails `image_tag` to create an `<img/>`-tag with `gravatar_url`. It's impo
|
|
58
57
|
also an object can be passed to `gravatar_url`, if it responds to either `email` or `mail`. If not (like
|
59
58
|
in the example above), the email address must be passed in.
|
60
59
|
|
61
|
-
<a id="l_model_helpers"/>
|
62
60
|
## Using the model helpers
|
63
61
|
|
64
62
|
A very simple method to add `gravatar_url` support to models is by using the `gravatarify` class method.
|
@@ -108,7 +106,6 @@ class:
|
|
108
106
|
Tadaaa! Works exactly like the model helpers, so it's now possible to call `gravatar_url` on instances
|
109
107
|
of `PoroUser`.
|
110
108
|
|
111
|
-
<a id="l_roots"/>
|
112
109
|
## Back to the roots?
|
113
110
|
|
114
111
|
No need for sophisticated stuff like view helpers and ActiveRecord integration, want to go back to the roots?
|
@@ -187,8 +184,13 @@ to generate an image url, based on the request size:
|
|
187
184
|
@user.gravatar_url(:size => 16)
|
188
185
|
# => "http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-16.jpg&s=16"
|
189
186
|
|
190
|
-
Into the block is passed the options hash and as second parameter the object itself, so
|
191
|
-
|
187
|
+
Into the block is passed the options hash and as second parameter the object itself, so it's possible to do stuff like
|
188
|
+
|
189
|
+
# doing stuff like showing default avatar based on gender...
|
190
|
+
@user = User.new(:gender => :female, :email => 'bella@gmail.com') # => @user.female? = true
|
191
|
+
|
192
|
+
@user.gravatar_url :default => Proc.new { |opts, obj| "http://example.com/avatar#{obj.respond_to?(:female) && obj.female? ? '_female' : ''}.jpg" }
|
193
|
+
# => http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar_female.jpg
|
192
194
|
|
193
195
|
Not only the `:default` option accepts a Proc, but also `:secure`, can be useful to handle cases where
|
194
196
|
it should evaluate against `request.ssl?` for example.
|
data/VERSION.yml
CHANGED
data/init.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
require File.join(File.dirname(__FILE__), 'lib', 'gravatarify')
|
1
|
+
require File.join(File.dirname(__FILE__), 'rails', 'init')
|
data/lib/gravatarify.rb
CHANGED
@@ -3,13 +3,9 @@
|
|
3
3
|
# Base -> provides the basic gravatar_url method, can also be used for
|
4
4
|
# custom implementations, just include Gravatarify::Base.
|
5
5
|
require 'gravatarify/base'
|
6
|
-
require 'gravatarify/view_helper'
|
7
6
|
require 'gravatarify/object_support'
|
8
7
|
|
9
|
-
# include helper for rails
|
10
|
-
ActionView::Base.send(:include, Gravatarify::ViewHelper) if defined?(ActionView)
|
11
|
-
|
12
8
|
# setup for AR und DataMapper, note: DataMapper yet untested :) but I suppose it works, because
|
13
9
|
# it works as expected on plain old ruby objects!
|
14
10
|
ActiveRecord::Base.send(:include, Gravatarify::ObjectSupport) if defined?(ActiveRecord)
|
15
|
-
DataMapper::Model.append_inclusions(Gravatarify::ObjectSupport) if defined?(DataMapper)
|
11
|
+
DataMapper::Model.append_inclusions(Gravatarify::ObjectSupport) if defined?(DataMapper)
|
data/lib/gravatarify/base.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'digest/md5'
|
2
|
-
require 'cgi'
|
2
|
+
begin; require 'rack/utils'; rescue LoadError; require 'cgi' end
|
3
3
|
|
4
4
|
module Gravatarify
|
5
5
|
# Subdomains used for balancing
|
@@ -56,6 +56,8 @@ module Gravatarify
|
|
56
56
|
# Get subdomain for supplied string or returns +GRAVATAR_DEFAULT_SUBDOMAIN+ if none is
|
57
57
|
# defined.
|
58
58
|
def subdomain(str); subdomains[str.hash % subdomains.size] || GRAVATAR_DEFAULT_SUBDOMAIN end
|
59
|
+
|
60
|
+
def escape(str); defined?(Rack::Utils) ? Rack::Utils.escape(str) : CGI.escape(str) end
|
59
61
|
end
|
60
62
|
|
61
63
|
# Provides core support to build gravatar urls based on supplied e-mail strings.
|
@@ -101,21 +103,32 @@ module Gravatarify
|
|
101
103
|
# FIXME: add symbolize_keys again, maybe just write custom method, so we do not depend on ActiveSupport magic...
|
102
104
|
url_options = Gravatarify.options.merge(url_options)
|
103
105
|
email_hash = Digest::MD5.hexdigest(Base.get_smart_email_from(email).strip.downcase)
|
104
|
-
|
106
|
+
|
107
|
+
build_gravatar_host(email_hash, url_options.delete(:secure)) <<
|
108
|
+
"/avatar/#{email_hash}.#{url_options.delete(:filetype) || GRAVATAR_DEFAULT_FILETYPE}#{build_gravatar_options(email, url_options)}"
|
105
109
|
end
|
106
110
|
|
107
111
|
private
|
112
|
+
# Builds gravatar host name from supplied e-mail hash.
|
113
|
+
# Ensures that for the same +str_hash+ always the same subdomain is used.
|
114
|
+
#
|
115
|
+
# @param [String] str_hash email, as hashed string as described in gravatar.com implementation specs
|
116
|
+
# @param [Boolean, Proc] secure if set to +true+ then uses gravatars secure host (<tt>https://secure.gravatar.com</tt>),
|
117
|
+
# else that subdomain magic. If it's passed in a +Proc+, it's evaluated and the result (+true+/+false+) is used
|
118
|
+
# for the same decicion.
|
119
|
+
# @return [String] Protocol and hostname (like <tt>http://www.gravatar.com</tt>), without trailing slash.
|
108
120
|
def build_gravatar_host(str_hash, secure = false)
|
109
121
|
secure = secure.call(self) if secure.respond_to?(:call)
|
110
122
|
secure ? "https://secure.gravatar.com" : "http://#{Gravatarify.subdomain(str_hash)}.gravatar.com"
|
111
123
|
end
|
112
124
|
|
113
|
-
|
125
|
+
# Builds a query string from all passed in options.
|
126
|
+
def build_gravatar_options(source, url_options = {})
|
114
127
|
params = []
|
115
128
|
url_options.each_pair do |key, value|
|
116
129
|
key = GRAVATAR_ABBREV_OPTIONS[key] if GRAVATAR_ABBREV_OPTIONS.include?(key) # shorten key!
|
117
|
-
value = value.call(url_options, self) if key.to_s == 'd' and value.respond_to?(:call)
|
118
|
-
params << "#{
|
130
|
+
value = value.call(url_options, source.is_a?(String) ? self : source) if key.to_s == 'd' and value.respond_to?(:call)
|
131
|
+
params << "#{Gravatarify.escape(key.to_s)}=#{Gravatarify.escape(value.to_s)}" if value
|
119
132
|
end
|
120
133
|
"?#{params.sort * '&'}" unless params.empty?
|
121
134
|
end
|
data/rails/init.rb
ADDED
@@ -83,6 +83,19 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
83
83
|
|
84
84
|
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", build_gravatar_url(obj)
|
85
85
|
end
|
86
|
+
|
87
|
+
should "handle Procs as :default and pass in the 'object' as second parameter" do
|
88
|
+
default = Proc.new { |options, object| "http://example.com/gravatar#{object.respond_to?(:female?) && object.female? ? '_girl' : ''}.jpg" }
|
89
|
+
girl = Object.new
|
90
|
+
mock(girl).email { "bella@gmail.com" }
|
91
|
+
mock(girl).female? { true }
|
92
|
+
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar_girl.jpg", build_gravatar_url(girl, :default => default)
|
93
|
+
|
94
|
+
boy = Object.new
|
95
|
+
mock(boy).email { "hans@gmail.com" }
|
96
|
+
mock(boy).female? { false }
|
97
|
+
assert_equal "http://www.gravatar.com/avatar/b6987c8f1d734e684cf9721970b906e5.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", build_gravatar_url(boy, :default => default)
|
98
|
+
end
|
86
99
|
end
|
87
100
|
|
88
101
|
context "Gravatar hosts support" do
|
@@ -2,70 +2,62 @@ require 'test_helper'
|
|
2
2
|
require 'gravatarify/base'
|
3
3
|
require 'gravatarify/object_support'
|
4
4
|
|
5
|
+
class PoroUser
|
6
|
+
include Gravatarify::ObjectSupport
|
7
|
+
attr_accessor :email, :gender
|
8
|
+
def initialize(attributes = {})
|
9
|
+
attributes.each do |key, value|
|
10
|
+
self.send "#{key}=", value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
class GravatarifyObjectSupportTest < Test::Unit::TestCase
|
6
16
|
def setup; reset_gravatarify! end
|
7
17
|
|
8
18
|
context "#gravatarify" do
|
9
19
|
should "add support for #gravatar_url to POROs (plain old ruby objects, yeah POJO sounds better!)" do
|
10
|
-
poro = Class.new
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new.gravatar_url
|
16
|
-
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new.gravatar_url(:secure => true)
|
17
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif?r=x&s=16", poro.new.gravatar_url(:filetype => :gif, :rating => :x, :size => 16)
|
20
|
+
poro = Class.new(PoroUser) { gravatarify }
|
21
|
+
mike_shiva = poro.new(:email => 'mike@shiva.ch')
|
22
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", mike_shiva.gravatar_url
|
23
|
+
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", mike_shiva.gravatar_url(:secure => true)
|
24
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif?r=x&s=16", mike_shiva.gravatar_url(:filetype => :gif, :rating => :x, :size => 16)
|
18
25
|
end
|
19
26
|
|
20
27
|
should "allow some default options to be passed, which can be overriden locally, though" do
|
21
|
-
poro = Class.new
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif", poro.new.gravatar_url
|
27
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif", poro.new.gravatar_url(:secure => false)
|
28
|
-
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?r=x&s=16", poro.new.gravatar_url(:filetype => :jpg, :rating => :x, :size => 16)
|
28
|
+
poro = Class.new(PoroUser) { gravatarify :secure => true, :filetype => :gif }
|
29
|
+
mike_shiva = poro.new(:email => 'mike@shiva.ch')
|
30
|
+
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif", mike_shiva.gravatar_url
|
31
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.gif", mike_shiva.gravatar_url(:secure => false)
|
32
|
+
assert_equal "https://secure.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?r=x&s=16", mike_shiva.gravatar_url(:filetype => :jpg, :rating => :x, :size => 16)
|
29
33
|
end
|
30
34
|
|
31
35
|
should "still respect options set by Gravatarify#options" do
|
32
36
|
Gravatarify.options[:size] = 20
|
33
|
-
poro = Class.new
|
34
|
-
|
35
|
-
gravatarify
|
36
|
-
def email; "mike@shiva.ch" end
|
37
|
-
end
|
38
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?s=20", poro.new.gravatar_url
|
37
|
+
poro = Class.new(PoroUser) { gravatarify }
|
38
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?s=20", poro.new(:email => 'mike@shiva.ch').gravatar_url
|
39
39
|
end
|
40
40
|
|
41
41
|
should "be able to override options set by Gravatarify#options" do
|
42
42
|
Gravatarify.options[:size] = 20
|
43
|
-
poro = Class.new
|
44
|
-
|
45
|
-
gravatarify :size => 25
|
46
|
-
def email; "mike@shiva.ch" end
|
47
|
-
end
|
48
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?s=25", poro.new.gravatar_url
|
43
|
+
poro = Class.new(PoroUser) { gravatarify :size => 25 }
|
44
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg?s=25", poro.new(:email => 'mike@shiva.ch').gravatar_url
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
52
48
|
context "#gravatarify with custom fields" do
|
53
49
|
should "detect and use the 'email' field automatically" do
|
54
|
-
poro = Class.new
|
55
|
-
|
56
|
-
gravatarify
|
57
|
-
def email; "mike@shiva.ch" end
|
58
|
-
end
|
59
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new.gravatar_url
|
50
|
+
poro = Class.new(PoroUser) { gravatarify }
|
51
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new(:email => 'mike@shiva.ch').gravatar_url
|
60
52
|
end
|
61
53
|
|
62
54
|
should "fallback to 'mail' if 'email' is not defined" do
|
63
|
-
poro = Class.new do
|
64
|
-
include Gravatarify::ObjectSupport
|
55
|
+
poro = Class.new(PoroUser) do
|
65
56
|
gravatarify
|
66
|
-
|
57
|
+
undef :email, :email=
|
58
|
+
attr_accessor :mail
|
67
59
|
end
|
68
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new.gravatar_url
|
60
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new(:mail => 'mike@shiva.ch').gravatar_url
|
69
61
|
end
|
70
62
|
|
71
63
|
should "raise NoMethodError if object does not respond to source" do
|
@@ -77,23 +69,41 @@ class GravatarifyObjectSupportTest < Test::Unit::TestCase
|
|
77
69
|
end
|
78
70
|
|
79
71
|
should "allow to set custom source, like author_email" do
|
80
|
-
poro = Class.new do
|
81
|
-
include Gravatarify::ObjectSupport
|
72
|
+
poro = Class.new(PoroUser) do
|
82
73
|
gravatarify :author_email
|
83
|
-
|
74
|
+
attr_accessor :author_email
|
84
75
|
end
|
85
|
-
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new.gravatar_url
|
76
|
+
assert_equal "http://0.gravatar.com/avatar/1b2818d77eadd6c9dbbe7f3beb1492c3.jpg", poro.new(:author_email => 'mike@shiva.ch').gravatar_url
|
86
77
|
end
|
87
78
|
|
88
79
|
should "allow multiple sources to be defined, yet still handle options!" do
|
89
|
-
poro = Class.new do
|
90
|
-
include Gravatarify::ObjectSupport
|
80
|
+
poro = Class.new(PoroUser) do
|
91
81
|
gravatarify :email, :employee_email, :default => Proc.new { |*args| "http://initech.com/avatar-#{args.first[:size] || 80}.jpg" }
|
92
|
-
|
93
|
-
|
82
|
+
attr_accessor :employee_email
|
83
|
+
end
|
84
|
+
peter_gibbons = poro.new(:email => 'info@initech.com', :employee_email => 'peter.gibbons@initech.com')
|
85
|
+
assert_equal "http://2.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg?d=http%3A%2F%2Finitech.com%2Favatar-20.jpg&s=20", peter_gibbons.gravatar_url(:size => 20)
|
86
|
+
assert_equal "http://0.gravatar.com/avatar/cb7865556d41a3d800ae7dbb31d51d54.jpg?d=http%3A%2F%2Finitech.com%2Favatar-25.jpg&s=25", peter_gibbons.employee_gravatar_url(:size => 25)
|
87
|
+
end
|
88
|
+
|
89
|
+
should "use full prefix, if not suffixed by email" do
|
90
|
+
poro = Class.new(PoroUser) do
|
91
|
+
gravatarify :email, :employee_login
|
92
|
+
attr_accessor :employee_login
|
93
|
+
end
|
94
|
+
peter_gibbons = poro.new(:email => 'peter.gibbons@initech.com', :employee_login => 'peter.gibbons@initech.com')
|
95
|
+
assert_respond_to peter_gibbons, :employee_login_gravatar_url
|
96
|
+
assert_equal "http://0.gravatar.com/avatar/cb7865556d41a3d800ae7dbb31d51d54.jpg?s=25", peter_gibbons.employee_login_gravatar_url(:size => 25)
|
97
|
+
end
|
98
|
+
|
99
|
+
should "pass in object as second parameter, not supplied string" do
|
100
|
+
poro = Class.new(PoroUser) do
|
101
|
+
gravatarify :default => Proc.new { |opts, obj| "http://initech.com/avatar#{obj.respond_to?(:gender) && obj.gender == :female ? '_girl' : ''}.jpg" }
|
94
102
|
end
|
95
|
-
|
96
|
-
|
103
|
+
peter_gibbons = poro.new(:email => 'peter.gibbons@initech.com', :gender => :male)
|
104
|
+
jane = poro.new(:email => 'jane@initech.com', :gender => :female)
|
105
|
+
assert_equal "http://0.gravatar.com/avatar/cb7865556d41a3d800ae7dbb31d51d54.jpg?d=http%3A%2F%2Finitech.com%2Favatar.jpg&s=25", peter_gibbons.gravatar_url(:s => 25)
|
106
|
+
assert_equal "http://1.gravatar.com/avatar/9b78f3f45cf32d7c52d304a63f6aef06.jpg?d=http%3A%2F%2Finitech.com%2Favatar_girl.jpg&s=35", jane.gravatar_url(:s => 35)
|
97
107
|
end
|
98
108
|
end
|
99
109
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'gravatarify/base'
|
3
|
+
|
4
|
+
class GravatarifyRackVsCgiTest < Test::Unit::TestCase
|
5
|
+
include Gravatarify::Base
|
6
|
+
|
7
|
+
# Reload Rack::Utils
|
8
|
+
def teardown
|
9
|
+
begin; require('rack/utils'); rescue LoadError; end
|
10
|
+
end
|
11
|
+
|
12
|
+
context "if Rack::Utils is not available, #gravatarify" do
|
13
|
+
setup do
|
14
|
+
# Remove Rack if defined
|
15
|
+
Object.send(:remove_const, :Rack) if defined?(Rack)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "fallback to CGI#escape" do
|
19
|
+
assert !defined?(Rack::Utils), 'Rack::Utils should no longer be defined'
|
20
|
+
assert defined?(CGI), "CGI should be defined"
|
21
|
+
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?escaped%2Fme=escaped%2Fme",
|
22
|
+
build_gravatar_url('bella@gmail.com', 'escaped/me' => 'escaped/me')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gravatarify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Westermann
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-09 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -34,9 +34,11 @@ files:
|
|
34
34
|
- lib/gravatarify/base.rb
|
35
35
|
- lib/gravatarify/object_support.rb
|
36
36
|
- lib/gravatarify/view_helper.rb
|
37
|
+
- rails/init.rb
|
37
38
|
- test/gravatarify_base_test.rb
|
38
39
|
- test/gravatarify_integration_test.rb
|
39
40
|
- test/gravatarify_object_support_test.rb
|
41
|
+
- test/gravatarify_rack_vs_cgi_test.rb
|
40
42
|
- test/gravatarify_subdomain_test.rb
|
41
43
|
- test/gravatarify_view_helper_test.rb
|
42
44
|
- test/test_helper.rb
|
@@ -72,6 +74,7 @@ test_files:
|
|
72
74
|
- test/gravatarify_base_test.rb
|
73
75
|
- test/gravatarify_integration_test.rb
|
74
76
|
- test/gravatarify_object_support_test.rb
|
77
|
+
- test/gravatarify_rack_vs_cgi_test.rb
|
75
78
|
- test/gravatarify_subdomain_test.rb
|
76
79
|
- test/gravatarify_view_helper_test.rb
|
77
80
|
- test/test_helper.rb
|