gravatarify 1.0.0 → 1.1.0
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 +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
|