gravatarify 3.1.0 → 3.1.1
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.
- checksums.yaml +7 -0
- data/.travis.yml +2 -3
- data/README.md +30 -29
- data/gravatarify.gemspec +21 -24
- data/lib/gravatarify.rb +14 -13
- data/lib/gravatarify/base.rb +13 -13
- data/lib/gravatarify/version.rb +1 -1
- data/test/unit/gravatarify_base_test.rb +39 -39
- data/test/unit/gravatarify_subdomain_test.rb +23 -25
- metadata +68 -96
- data/Gemfile.lock +0 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: da6497d2bbb29f19c0754cd5d1e0d86b5595608f
|
4
|
+
data.tar.gz: 9738f5fca4d8df44288035b9cf010404999eb9d8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 90a79743136c3cec9eea5ee408ba7b2a3fcf00eec2c25bea8920b1359a67b9bfd938201e407966466701abe616c634180f4a485561121aad943aff9797d3b2ab
|
7
|
+
data.tar.gz: f1d88652037de585855d7f968ebc8bd34e95a593f23d6c1cf2a2c5076a7f3044425f823301d842543f3b7cd857792117cf0214261a76ab5e8aabbcf67c7515a1
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -21,7 +21,7 @@ Ready, Set, Go!
|
|
21
21
|
**READY** Add gravatarify to your `Gemfile`
|
22
22
|
|
23
23
|
gem 'gravatarify', '~> 3.0.0'
|
24
|
-
|
24
|
+
|
25
25
|
**SET** Guess, you are all set :) when using HAML or Sinatra you might to add:
|
26
26
|
|
27
27
|
# e.g. for Sinatra
|
@@ -37,11 +37,11 @@ Ready, Set, Go!
|
|
37
37
|
|
38
38
|
# creates an 20x20 pixel <img/> tag in your Rails ERB views:
|
39
39
|
<%= gravatar_tag @user.email, :size => 20 %>
|
40
|
-
|
40
|
+
|
41
41
|
# or in HAML views
|
42
42
|
# (Note: how it's possible to skip the email attribute, btw - that's a feature)
|
43
43
|
%img{ gravatar_attrs(@user, :size => 20) }/
|
44
|
-
|
44
|
+
|
45
45
|
**More!?** Allright, that was just the quickstart, to get up and running with ease. However, this library provides
|
46
46
|
quite a bit more, like:
|
47
47
|
|
@@ -78,31 +78,31 @@ and the `<img/>` tag should have a class attribute, do:
|
|
78
78
|
If any additional HTML attributes are needed on the tag, or in the `gravatar_attrs`, just
|
79
79
|
pass them in the `:html` option as hash. If more control is needed, or just the plain URL is
|
80
80
|
required, resort to `gravatar_url`, which returns a string with the (unescaped) url:
|
81
|
-
|
81
|
+
|
82
82
|
<img src="<%= h(gravatar_url(@user.author_email, :size => 16)) %>" alt="Gravatar"/>
|
83
|
-
|
83
|
+
|
84
84
|
Using styles
|
85
85
|
------------
|
86
86
|
|
87
87
|
With styles it's possible to easily change e.g. the size of all gravatars based on a name,
|
88
88
|
these are reusable presets of options:
|
89
|
-
|
89
|
+
|
90
90
|
# in config/initializers/gravatarify.rb or similar:
|
91
91
|
Gravatarify.styles[:mini] = { :size => 16, :html => { :class => 'gravatar gravatar-mini' } }
|
92
92
|
Gravatarify.styles[:default] = { :size => 45, :html => { :class => 'gravatar' } }
|
93
|
-
|
93
|
+
|
94
94
|
# then in/some/view.html.erb:
|
95
95
|
<%= gravatar_tag @user, :mini %> # => <img alt="" class="gravatar gravatar-mini" height="16" src.... />
|
96
|
-
|
97
|
-
# or in/another/view.html.haml:
|
96
|
+
|
97
|
+
# or in/another/view.html.haml:
|
98
98
|
%img{ gravatar_attrs(@user, :default) }/ # => <img alt="" class="gravatar" height="45" ... />
|
99
|
-
|
99
|
+
|
100
100
|
Need to change to size of all `:mini` gravatars? Easy, just change the definition in `Gravatarify.styles`.
|
101
101
|
Of course settings via `Gravatarify.options` are "mixed-in" as well, so:
|
102
102
|
|
103
103
|
Gravatarify.options[:default] = Proc.new { |*params| "http://example.com/avatar-#{params.first[:size] || 80}.jpg" }
|
104
104
|
Gravatarify.styles[:mini] => { :size => 16 }
|
105
|
-
|
105
|
+
|
106
106
|
<%= gravatar_tag @user, :mini %> # => <img alt="" height="16" src=".....?d=http://example.com/avatar-16.jpg" width="16" />
|
107
107
|
|
108
108
|
All methods accept a style, i.e. a style parameter can be passed in to `gravatar_attrs`, `gravatar_tag` and
|
@@ -117,7 +117,7 @@ Back to the roots?
|
|
117
117
|
|
118
118
|
No need for sophisticated stuff like view helpers, want to go back to the roots?
|
119
119
|
Then feel free to use `Gravatarify::Base#gravatar_url` directly.
|
120
|
-
|
120
|
+
|
121
121
|
When the ability to display image tags is required in different view frameworks (like liquid!?),
|
122
122
|
then just ensure that `Gravatarify::Helper` is included in the framework in question.
|
123
123
|
See {Gravatarify::Base#gravatar_url} and of course {Gravatarify::Helper} for more informations
|
@@ -170,7 +170,7 @@ Need more control?
|
|
170
170
|
<tr>
|
171
171
|
<td><tt>:filetype</tt></td>
|
172
172
|
<td>String, Symbol</td>
|
173
|
-
<td>Change image type, gravatar.com supports <tt>:gif</tt>, <tt>:png</tt> and <tt>:jpg</tt>. If set to <tt>false</tt>
|
173
|
+
<td>Change image type, gravatar.com supports <tt>:gif</tt>, <tt>:png</tt> and <tt>:jpg</tt>. If set to <tt>false</tt>
|
174
174
|
then a URL without an extension will be built (and gravatar.com then returns a JPG image).</td>
|
175
175
|
<td><tt>:jpg</tt></td>
|
176
176
|
</tr>
|
@@ -189,15 +189,15 @@ gravatar urls there. Of course all settings can be overridden locally:
|
|
189
189
|
# disable suffix and set default size to 16x16px
|
190
190
|
Gravatarify.options[:filetype] = false
|
191
191
|
Gravatarify.options[:size] = 16
|
192
|
-
|
192
|
+
|
193
193
|
gravatar_url(@user.email) # => http://0.gravatar.com/avatar/..f93ff1e?s=16
|
194
194
|
gravatar_url(@user.email, :filetype => :png) # => http://0.gravatar.com/avatar/..f93ff1e.png?s=16
|
195
|
-
|
195
|
+
|
196
196
|
To define global HTML attributes go ahead and do something like:
|
197
197
|
|
198
198
|
# add title attribute
|
199
199
|
Gravatarify.options[:html] = { :title => "Gravatar" }
|
200
|
-
|
200
|
+
|
201
201
|
## Not yet enough?
|
202
202
|
|
203
203
|
The `:default` option can be passed in a `Proc`, so this is certainly useful to for example
|
@@ -207,18 +207,18 @@ to generate an image url, based on the request size:
|
|
207
207
|
Gravatarify.options[:default] = Proc.new do |options, object|
|
208
208
|
"http://example.com/avatar-#{options[:size] || 80}.jpg"
|
209
209
|
end
|
210
|
-
|
210
|
+
|
211
211
|
# now each time a gravatar url is generated, the Proc is evaluated:
|
212
212
|
gravatar_url(@user)
|
213
213
|
# => "http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-80.jpg"
|
214
214
|
gravatar_url(@user, :size => 16)
|
215
215
|
# => "http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-16.jpg&s=16"
|
216
|
-
|
216
|
+
|
217
217
|
Into the block is passed the options hash and as second parameter the object itself, so it's possible to do stuff like
|
218
218
|
|
219
219
|
# doing stuff like showing default avatar based on gender...
|
220
220
|
@user = User.new(:gender => :female, :email => 'bella@gmail.com') # => @user.female? = true
|
221
|
-
|
221
|
+
|
222
222
|
gravatar_url @user, :default => Proc.new { |opts, obj| "http://example.com/avatar#{obj.respond_to?(:female) && obj.female? ? '_female' : ''}.jpg" }
|
223
223
|
# => http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar_female.jpg
|
224
224
|
|
@@ -232,16 +232,16 @@ all methods and no magic involved! So instead of doing:
|
|
232
232
|
|
233
233
|
gravatar_tag(@user, :size => 30, :class => "gravatar", :title => "Gravatar")
|
234
234
|
# Note: in Version 2.0 this would build an image src like http://..gravatar.com/...../?class=gravatar&s=30&title=Gravatar
|
235
|
-
|
235
|
+
|
236
236
|
do:
|
237
237
|
|
238
238
|
gravatar_tag(@user, :size => 30, :html => { :class => "Gravatar", :title => "Gravatar" })
|
239
|
-
|
239
|
+
|
240
240
|
An important thing to know is that the `:html` is deep merged, with defaults, so stuff like:
|
241
241
|
|
242
242
|
Gravatarify.options[:html] = { :title => "Gravatar" }
|
243
243
|
gravatar_tag(@user, :html => { :class => "gravatar" }) # => <img alt="" class="gravatar" ... title="Gravatar" .../>
|
244
|
-
|
244
|
+
|
245
245
|
Furthermore the option `:html` is ignored when building the url parameters.
|
246
246
|
|
247
247
|
If the `gravatarify` method was not used, there's no need to change anything at all :) Though if
|
@@ -260,7 +260,7 @@ directly: `<%= gravatar_tag @user.author_email %>`. If the model defines `author
|
|
260
260
|
class Author < ActiveRecord::Base
|
261
261
|
alias_attribute :email, :author_email
|
262
262
|
end
|
263
|
-
|
263
|
+
|
264
264
|
# and in the views:
|
265
265
|
<%= gravatar_tag @author %>
|
266
266
|
|
@@ -270,7 +270,7 @@ methods! The `gravatarify` method was introduced to provide compatibility with
|
|
270
270
|
then feel free to fallback and use an older version (i.e. 1.2.1):
|
271
271
|
|
272
272
|
[sudo] gem install gravatarify -v 1.2.1
|
273
|
-
|
273
|
+
|
274
274
|
|
275
275
|
About the code
|
276
276
|
==============
|
@@ -281,30 +281,31 @@ of an overkill, though I like neat and tidy classes :)
|
|
281
281
|
lib/gravatarify.rb # loads the other files from lib/gravatarify
|
282
282
|
# and hooks the necessary modules into
|
283
283
|
# HAML or ActionView.
|
284
|
-
|
284
|
+
|
285
285
|
lib/gravatarify/base.rb # Provides all logic required to generate
|
286
286
|
# gravatar.com urls from an email address.
|
287
287
|
# Check out Gravatarify::Base.gravatar_url,
|
288
288
|
# this is the absolute core method.
|
289
|
-
|
289
|
+
|
290
290
|
lib/gravatarify/helper.rb # Defines the view helpers: gravatar_attrs
|
291
291
|
# and gravatar_tag
|
292
|
-
|
292
|
+
|
293
293
|
lib/gravatarify/utils.rb # Provides commonly used methods, like helpers to
|
294
294
|
# uri and html escape strings or deep mergeing
|
295
295
|
# hashes. Though these utils are only for internal
|
296
296
|
# uses :)
|
297
|
-
|
297
|
+
|
298
298
|
### Contribute
|
299
299
|
|
300
300
|
1. Fork the project and hack away
|
301
301
|
2. Ensure that the changes are well tested
|
302
302
|
3. Send me a pull request
|
303
|
-
|
303
|
+
|
304
304
|
### Thanks
|
305
305
|
|
306
306
|
- [gudleik](https://github.com/gudleik) for his work on allowing an empty `:filetype`
|
307
307
|
- [thegcat](https://github.com/thegcat) travis, jruby and ruby 1.9 support
|
308
|
+
- [technoweenie](https://github.com/technoweenie) fix to use consistent hashing: `Zlib.crc32`
|
308
309
|
|
309
310
|
Licence
|
310
311
|
=======
|
data/gravatarify.gemspec
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require "gravatarify/version"
|
2
|
+
require File.expand_path('../lib/gravatarify/version', __FILE__)
|
4
3
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
s.description = "Ruby (and Rails) Gravatar helpers with unique options like Proc's for default images, support for gravatar.com's multiple host names, ability to define reusable styles and much more..."
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "gravatarify"
|
6
|
+
gem.version = Gravatarify::VERSION
|
7
|
+
gem.summary = "Awesome gravatar support for Ruby (and Rails)."
|
8
|
+
gem.description = "Ruby (and Rails) Gravatar helpers with unique options like Proc's for default images, support for gravatar.com's multiple host names, ability to define reusable styles and much more..."
|
11
9
|
|
12
|
-
|
13
|
-
|
10
|
+
gem.required_ruby_version = ">= 1.8.7"
|
11
|
+
gem.required_rubygems_version = ">= 1.3.6"
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
gem.authors = ["Lukas Westermann"]
|
14
|
+
gem.email = ["lukas.westermann@gmail.com"]
|
15
|
+
gem.homepage = "https://github.com/lwe/gravatarify"
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
s.add_development_dependency 'shoulda', '>= 2.10.2'
|
26
|
-
s.add_development_dependency 'rr', '>= 0.10.5'
|
27
|
-
s.add_development_dependency 'activesupport', '>= 3.0.0'
|
28
|
-
s.add_development_dependency 'rake'
|
29
|
-
end
|
17
|
+
gem.files = %w{.travis.yml .gitignore Gemfile Rakefile LICENSE README.md gravatarify.gemspec} + Dir['{lib,test}/**/*.rb']
|
18
|
+
gem.test_files = gem.files.grep(%r{^test/})
|
19
|
+
gem.require_paths = ['lib']
|
20
|
+
|
21
|
+
gem.license = 'MIT'
|
30
22
|
|
23
|
+
gem.add_development_dependency 'shoulda', '>= 2.10.2'
|
24
|
+
gem.add_development_dependency 'rr', '>= 0.10.5'
|
25
|
+
gem.add_development_dependency 'activesupport', '>= 3.0.0'
|
26
|
+
gem.add_development_dependency 'rake'
|
27
|
+
end
|
data/lib/gravatarify.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'gravatarify/version'
|
2
|
+
require 'zlib'
|
2
3
|
|
3
4
|
# Provides support for adding gravatar images in ruby (and rails)
|
4
5
|
# applications.
|
@@ -6,9 +7,9 @@ module Gravatarify
|
|
6
7
|
autoload :Base, 'gravatarify/base'
|
7
8
|
autoload :Helper, 'gravatarify/helper'
|
8
9
|
autoload :Utils, 'gravatarify/utils'
|
9
|
-
|
10
|
+
|
10
11
|
class << self
|
11
|
-
|
12
|
+
|
12
13
|
# Global options which are merged on every call to
|
13
14
|
# +gravatar_url+, this is useful to e.g. define a default image.
|
14
15
|
#
|
@@ -27,46 +28,46 @@ module Gravatarify
|
|
27
28
|
# Gravatarify.options[:filetype] = false
|
28
29
|
#
|
29
30
|
def options; @options ||= { :filetype => :jpg } end
|
30
|
-
|
31
|
+
|
31
32
|
# Allows to define some styles, makes it simpler to call by name, instead of always giving a size etc.
|
32
|
-
#
|
33
|
+
#
|
33
34
|
# Gravatarify.styles[:mini] => { :size => 30, :default => "http://example.com/gravatar-mini.jpg" }
|
34
|
-
#
|
35
|
+
#
|
35
36
|
# # in the views, it will then use the stuff defined by styles[:mini]:
|
36
37
|
# <%= gravatar_tag @user, :mini %>
|
37
38
|
#
|
38
39
|
def styles; @styles ||= {} end
|
39
|
-
|
40
|
+
|
40
41
|
# Globally overide subdomains used to build gravatar urls, normally
|
41
42
|
# +gravatarify+ picks from either +0.gravatar.com+, +1.gravatar.com+,
|
42
|
-
# +2.gravatar.com+ or +www.gravatar.com+ when building hosts, to use a custom
|
43
|
+
# +2.gravatar.com+, +3.gravater.com+ or +www.gravatar.com+ when building hosts, to use a custom
|
43
44
|
# set of subdomains (or none!) do something like:
|
44
45
|
#
|
45
46
|
# Gravatarify.subdomains = %w{ 0 www } # only use 0.gravatar.com and www.gravatar.com
|
46
47
|
#
|
47
48
|
def subdomains=(subdomains) @subdomains = [*subdomains] end
|
48
|
-
|
49
|
+
|
49
50
|
# Get subdomain for supplied string or returns +www+ if none is
|
50
51
|
# defined.
|
51
52
|
def subdomain(str) #:nodoc:
|
52
53
|
@subdomains ||= []
|
53
54
|
unless @subdomains.empty?
|
54
|
-
subdomain = @subdomains[str
|
55
|
+
subdomain = @subdomains[Zlib.crc32(str) % @subdomains.size]
|
55
56
|
subdomain + "." if subdomain
|
56
57
|
end
|
57
58
|
end
|
58
|
-
|
59
|
+
|
59
60
|
# Is running rails and at least rails 3.x
|
60
61
|
def rails?
|
61
62
|
defined?(::Rails) && ::Rails.version.to_i >= 3
|
62
63
|
end
|
63
|
-
|
64
|
+
|
64
65
|
# Loads `Gravatarify::Helper` as view helper via `ActionController::Base.helper`
|
65
66
|
def setup_rails!
|
66
67
|
ActiveSupport.on_load(:action_controller) { ActionController::Base.helper(Gravatarify::Helper) }
|
67
68
|
end
|
68
|
-
end
|
69
|
+
end
|
69
70
|
end
|
70
71
|
|
71
|
-
# Try to init
|
72
|
+
# Try to init rails
|
72
73
|
Gravatarify.setup_rails! if Gravatarify.rails?
|
data/lib/gravatarify/base.rb
CHANGED
@@ -4,10 +4,10 @@ require 'cgi'
|
|
4
4
|
module Gravatarify
|
5
5
|
# Hash of :ultra_long_option_name => :abbr_opt
|
6
6
|
GRAVATAR_ABBREV_OPTIONS = { 'default' => :d, :default => :d, 'rating' => :r, :rating => :r, 'size' => :s, :size => :s }
|
7
|
-
|
7
|
+
|
8
8
|
# Provides core support to build gravatar urls based on supplied e-mail strings.
|
9
9
|
module Base
|
10
|
-
|
10
|
+
|
11
11
|
# Method which builds a gravatar url based on a supplied email and options as
|
12
12
|
# defined by gravatar.com (http://en.gravatar.com/site/implement/url).
|
13
13
|
#
|
@@ -19,11 +19,11 @@ module Gravatarify
|
|
19
19
|
#
|
20
20
|
# If supplied +email+ responds to either a method named +email+ or +mail+, the value of that method
|
21
21
|
# is used instead to build the gravatar hash. Very useful to just pass in ActiveRecord object for instance:
|
22
|
-
#
|
22
|
+
#
|
23
23
|
# @user = User.find_by_email("samir@initech.com")
|
24
24
|
# gravatar_url(@user) # => "http://2.gravatar.com/avatar/58cf31c817d76605d5180ce1a550d0d0.jpg"
|
25
25
|
# gravatar_url(@user.email) # same as above!
|
26
|
-
#
|
26
|
+
#
|
27
27
|
# Among all options as defined by gravatar.com's specification, there also exist some special options:
|
28
28
|
#
|
29
29
|
# gravatar_url(@user, :secure => true) # => https://secure.gravatar.com/ava....
|
@@ -52,10 +52,10 @@ module Gravatarify
|
|
52
52
|
host = Base.gravatar_host(self, email_hash, url_options.delete(:secure))
|
53
53
|
"#{host}/avatar/#{email_hash}#{extension}#{Base.gravatar_params(email, url_options)}"
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
# For backwards compatibility.
|
57
57
|
alias_method :build_gravatar_url, :gravatar_url
|
58
|
-
|
58
|
+
|
59
59
|
protected
|
60
60
|
# Builds gravatar host name from supplied e-mail hash.
|
61
61
|
# Ensures that for the same +str_hash+ always the same subdomain is used.
|
@@ -65,22 +65,22 @@ module Gravatarify
|
|
65
65
|
# else that subdomain magic. If it's passed in a +Proc+, it's evaluated and the result (+true+/+false+) is used
|
66
66
|
# for the same decicion.
|
67
67
|
# @return [String] Protocol and hostname (like <tt>http://www.gravatar.com</tt>), without trailing slash.
|
68
|
-
def self.gravatar_host(context, str_hash, secure = false)
|
69
|
-
|
70
|
-
|
68
|
+
def self.gravatar_host(context, str_hash, secure = false)
|
69
|
+
use_https = secure.respond_to?(:call) ? secure.call(context) : secure
|
70
|
+
"#{use_https ? 'https' : 'http'}://#{Gravatarify.subdomain(str_hash)}gravatar.com"
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
# Builds a query string from all passed in options.
|
74
74
|
def self.gravatar_params(source, url_options = {})
|
75
75
|
params = url_options.inject([]) do |params, (key, value)|
|
76
76
|
key = (GRAVATAR_ABBREV_OPTIONS[key] || key).to_sym # shorten & symbolize key
|
77
77
|
unless key == :html
|
78
|
-
value = value.call(url_options, source) if key == :d
|
78
|
+
value = value.call(url_options, source) if key == :d && value.respond_to?(:call)
|
79
79
|
params << "#{key}=#{CGI.escape(value.to_s)}" if value
|
80
80
|
end
|
81
81
|
params
|
82
82
|
end
|
83
83
|
"?#{params.sort * '&'}" unless params.empty?
|
84
|
-
end
|
84
|
+
end
|
85
85
|
end
|
86
|
-
end
|
86
|
+
end
|
data/lib/gravatarify/version.rb
CHANGED
@@ -6,9 +6,9 @@ end
|
|
6
6
|
|
7
7
|
class GravatarifyBaseTest < Test::Unit::TestCase
|
8
8
|
include Gravatarify::Base
|
9
|
-
|
9
|
+
|
10
10
|
def setup; reset_gravatarify!; Gravatarify.subdomains = %w{www} end
|
11
|
-
|
11
|
+
|
12
12
|
context "#gravatar_url, but without any options yet" do
|
13
13
|
should "generate correct url for hash without options" do
|
14
14
|
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url('bella@gmail.com')
|
@@ -24,32 +24,32 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
24
24
|
assert_equal NIL_JPG, gravatar_url(nil)
|
25
25
|
assert_equal NIL_JPG, gravatar_url('')
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
should "be aliased to #build_gravatar_url, for backwards compatibility" do
|
29
29
|
assert_equal BELLA_AT_GMAIL_JPG, build_gravatar_url('bella@gmail.com')
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
context "#gravatar_url, with options" do
|
34
34
|
should "add well known options like size, rating or default and always in alphabetical order" do
|
35
35
|
assert_match "#{BELLA_AT_GMAIL_JPG}?s=16", gravatar_url('bella@gmail.com', :size => 16)
|
36
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
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?")
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
should "ensure that all options are escaped correctly" do
|
41
41
|
assert_equal "#{BELLA_AT_GMAIL_JPG}?unescaped=escaped%2Fme", gravatar_url('bella@gmail.com', 'unescaped' => 'escaped/me')
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
should "ignore false or nil options" do
|
45
45
|
assert_equal "#{BELLA_AT_GMAIL_JPG}?s=24", gravatar_url('bella@gmail.com', :s => 24, :invalid => false, :other => nil)
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
should "allow different :filetype to be set, like 'gif' or 'png'" do
|
49
49
|
assert_equal "#{BELLA_AT_GMAIL}.gif", gravatar_url('bella@gmail.com', :filetype => :gif)
|
50
50
|
assert_equal "#{BELLA_AT_GMAIL}.png", gravatar_url('bella@gmail.com', :filetype => :png)
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
should "skip :filetype if set to false, nil or ''" do
|
54
54
|
assert_equal "#{BELLA_AT_GMAIL}", gravatar_url('bella@gmail.com', :filetype => false)
|
55
55
|
assert_equal "#{BELLA_AT_GMAIL}", gravatar_url('bella@gmail.com', :filetype => nil)
|
@@ -57,51 +57,51 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
57
57
|
assert_equal "#{BELLA_AT_GMAIL}.foobar", gravatar_url('bella@gmail.com', :filetype => 'foobar')
|
58
58
|
assert_equal "#{BELLA_AT_GMAIL}.gif", gravatar_url('bella@gmail.com', :filetype => :gif)
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
should "handle Procs as :default, to easily generate default urls based on supplied :size" do
|
62
62
|
default = Proc.new { |*args| "http://example.com/gravatar#{args.first[:size] ? '-' + args.first[:size].to_s : ''}.jpg" }
|
63
|
-
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com', :default => default)
|
63
|
+
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com', :default => default)
|
64
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
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)
|
66
|
-
end
|
66
|
+
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
context "#gravatar_url when passed in an object" do
|
70
70
|
should "look for :email method and use it to generate gravatar_url from" do
|
71
71
|
obj = Object.new
|
72
72
|
mock(obj).email { "bella@gmail.com" }
|
73
|
-
|
73
|
+
|
74
74
|
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
should "look for :mail of field :email does not exist" do
|
78
78
|
obj = Object.new
|
79
79
|
mock(obj).mail { "bella@gmail.com" }
|
80
|
-
|
81
|
-
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
80
|
+
|
81
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
should "finally just use to_s... if neither :email nor :mail exists" do
|
85
85
|
obj = Object.new
|
86
86
|
mock(obj).to_s { "bella@gmail.com" }
|
87
|
-
|
88
|
-
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
87
|
+
|
88
|
+
assert_equal BELLA_AT_GMAIL_JPG, gravatar_url(obj)
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
should "handle Procs as :default and pass in the 'object' as second parameter" do
|
92
92
|
default = Proc.new { |options, object| "http://example.com/gravatar#{object.respond_to?(:female?) && object.female? ? '_girl' : ''}.jpg" }
|
93
93
|
girl = Object.new
|
94
94
|
mock(girl).email { "bella@gmail.com" }
|
95
|
-
mock(girl).female? { true }
|
95
|
+
mock(girl).female? { true }
|
96
96
|
assert_equal "#{BELLA_AT_GMAIL_JPG}?d=http%3A%2F%2Fexample.com%2Fgravatar_girl.jpg", gravatar_url(girl, :default => default)
|
97
|
-
|
97
|
+
|
98
98
|
boy = Object.new
|
99
99
|
mock(boy).email { "hans@gmail.com" }
|
100
100
|
mock(boy).female? { false }
|
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
|
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
103
|
end
|
104
|
-
|
104
|
+
|
105
105
|
context "Gravatar hosts support" do
|
106
106
|
should "switch to different hosts based on generated email hash, yet always the same for consecutive calls with the same email!" do
|
107
107
|
assert_match %r{\Ahttp://(0|1|2|www).gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg\z}, gravatar_url('bella@gmail.com')
|
@@ -110,41 +110,41 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
110
110
|
assert_match %r{\Ahttp://(0|1|2|www).gravatar.com/avatar/8f3af64e9c215d158b062a7b154e071e.jpg\z}, gravatar_url('bella@hotmail.com')
|
111
111
|
assert_match %r{\Ahttp://(0|1|2|www).gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg\z}, gravatar_url('bella@yahoo.de')
|
112
112
|
end
|
113
|
-
|
114
|
-
should "switch to https://
|
115
|
-
assert_equal "https://
|
116
|
-
assert_equal "https://
|
117
|
-
assert_equal "https://
|
113
|
+
|
114
|
+
should "switch to https://www.gravatar.com if :secure => true is supplied" do
|
115
|
+
assert_equal "https://www.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", gravatar_url('bella@gmail.com', :secure => true)
|
116
|
+
assert_equal "https://www.gravatar.com/avatar/41d86cad3dd465d6913d5a3232744441.jpg", gravatar_url('bella@bella.com', :secure => true)
|
117
|
+
assert_equal "https://www.gravatar.com/avatar/d2279c22a33da2cb57defd21c33c8ec5.jpg", gravatar_url('bella@yahoo.de', :secure => true)
|
118
118
|
end
|
119
|
-
|
119
|
+
|
120
120
|
should "allow Procs for :secure option, enables pretty cool stuff for stuff like request.ssl?" do
|
121
121
|
Gravatarify.options[:secure] = Proc.new { |obj| obj.request.ssl? }
|
122
|
-
|
122
|
+
|
123
123
|
mock_ssl = MockView.new
|
124
|
-
mock(mock_ssl).request.stub!.ssl? { true }
|
125
|
-
assert_equal "https://
|
126
|
-
|
124
|
+
mock(mock_ssl).request.stub!.ssl? { true }
|
125
|
+
assert_equal "https://www.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg", mock_ssl.gravatar_url('bella@gmail.com')
|
126
|
+
|
127
127
|
mock_no_ssl = MockView.new
|
128
128
|
mock(mock_no_ssl).request.stub!.ssl? { false }
|
129
129
|
assert_equal BELLA_AT_GMAIL_JPG, mock_no_ssl.gravatar_url('bella@gmail.com')
|
130
130
|
end
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
context "Gravatarify#options" do
|
134
134
|
setup do
|
135
135
|
Gravatarify.options[:anything] = "test"
|
136
136
|
Gravatarify.options[:filetype] = "png"
|
137
137
|
Gravatarify.options[:default] = "http://example.com/gravatar.jpg"
|
138
138
|
end
|
139
|
-
|
139
|
+
|
140
140
|
should "ensure that default options are always added" do
|
141
141
|
assert_equal "#{BELLA_AT_GMAIL}.png?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com')
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
should "ensure that default options can be overriden by passing options into gravatar_url call" do
|
145
145
|
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)
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
should "ensure that no filetypes are added when :filetype set to false, unless locally specified" do
|
149
149
|
Gravatarify.options[:filetype] = false
|
150
150
|
assert_equal "#{BELLA_AT_GMAIL}?anything=test&d=http%3A%2F%2Fexample.com%2Fgravatar.jpg", gravatar_url('bella@gmail.com')
|
@@ -5,52 +5,50 @@ require 'uri'
|
|
5
5
|
|
6
6
|
class GravatarifySubdomainTest < Test::Unit::TestCase
|
7
7
|
include Gravatarify::Base
|
8
|
-
|
8
|
+
|
9
9
|
def setup; reset_gravatarify! end
|
10
|
-
|
10
|
+
|
11
11
|
context "changing hosts through Gravatarify#subdomains" do
|
12
12
|
should "override default subdomains (useful to e.g. switch back to 'www' only)" do
|
13
13
|
Gravatarify.subdomains = ['a', 'b']
|
14
14
|
assert_match %r{\Ahttp://[ab].gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg\z}, gravatar_url('info@initech.com')
|
15
15
|
assert_match %r{\Ahttp://[ab].gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg\z}, gravatar_url('support@initech.com')
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
should "take in a string only argument, like www" do
|
19
19
|
Gravatarify.subdomains = 'www'
|
20
20
|
assert_equal "http://www.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", gravatar_url('info@initech.com')
|
21
|
-
assert_equal "http://www.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", gravatar_url('support@initech.com')
|
21
|
+
assert_equal "http://www.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", gravatar_url('support@initech.com')
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
should "still work as expected if passed in `nil` and return urls without subdomain (default)" do
|
25
25
|
Gravatarify.subdomains = []
|
26
26
|
assert_equal "http://gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", gravatar_url('info@initech.com')
|
27
|
-
assert_equal "http://gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", gravatar_url('support@initech.com')
|
27
|
+
assert_equal "http://gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", gravatar_url('support@initech.com')
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
context "with Net::HTTP the gravatar.com subdomains" do
|
32
|
-
|
33
|
-
|
32
|
+
%w{ 0 1 2 3 www secure }.each do |subdomain|
|
33
|
+
should "respond to http://#{subdomain}.gravatar.com/" do
|
34
34
|
response = Net::HTTP.get_response URI.parse("http://#{subdomain}.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg")
|
35
35
|
assert_equal 200, response.code.to_i
|
36
36
|
assert_equal "image/jpeg", response.content_type
|
37
37
|
end
|
38
|
+
|
39
|
+
should "respond to https://#{subdomain}.gravatar.com/ urls as well" do
|
40
|
+
http = Net::HTTP.new("#{subdomain}.gravatar.com", 443)
|
41
|
+
http.use_ssl = true
|
42
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
43
|
+
|
44
|
+
response = http.get '/avatar/4979dd9653e759c78a81d4997f56bae2.jpg'
|
45
|
+
assert_equal 200, response.code.to_i
|
46
|
+
assert_equal "image/jpeg", response.content_type
|
47
|
+
end
|
38
48
|
end
|
39
|
-
|
40
|
-
should "not respond to
|
41
|
-
assert_raises(SocketError) { Net::HTTP.get_response URI.parse('http://
|
42
|
-
end
|
43
|
-
|
44
|
-
should "respond to https://secure.gravatar.com/ urls as well" do
|
45
|
-
http = Net::HTTP.new('secure.gravatar.com', 443)
|
46
|
-
http.use_ssl = true
|
47
|
-
|
48
|
-
# do not verify peer certificate (just get rid of that warning!)
|
49
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
50
|
-
|
51
|
-
response = http.get '/avatar/4979dd9653e759c78a81d4997f56bae2.jpg'
|
52
|
-
assert_equal 200, response.code.to_i
|
53
|
-
assert_equal "image/jpeg", response.content_type
|
49
|
+
|
50
|
+
should "not respond to 4.gravatar.com, if so add to subdomains dude!!!" do
|
51
|
+
assert_raises(SocketError) { Net::HTTP.get_response URI.parse('http://4.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg') }
|
54
52
|
end
|
55
53
|
end
|
56
|
-
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,98 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: gravatarify
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 3
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 3.1.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.1.1
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Lukas Westermann
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
none: false
|
24
|
-
requirements:
|
11
|
+
date: 2014-03-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: shoulda
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
25
17
|
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
hash: 35
|
28
|
-
segments:
|
29
|
-
- 2
|
30
|
-
- 10
|
31
|
-
- 2
|
18
|
+
- !ruby/object:Gem::Version
|
32
19
|
version: 2.10.2
|
33
|
-
requirement: *id001
|
34
20
|
type: :development
|
35
|
-
name: shoulda
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
21
|
prerelease: false
|
38
|
-
version_requirements:
|
39
|
-
|
40
|
-
requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
41
24
|
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.10.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rr
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
48
33
|
version: 0.10.5
|
49
|
-
requirement: *id002
|
50
34
|
type: :development
|
51
|
-
name: rr
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
35
|
prerelease: false
|
54
|
-
version_requirements:
|
55
|
-
|
56
|
-
requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
57
38
|
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.10.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
64
47
|
version: 3.0.0
|
65
|
-
requirement: *id003
|
66
48
|
type: :development
|
67
|
-
name: activesupport
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
49
|
prerelease: false
|
70
|
-
version_requirements:
|
71
|
-
|
72
|
-
requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
73
52
|
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
|
77
|
-
- 0
|
78
|
-
version: "0"
|
79
|
-
requirement: *id004
|
80
|
-
type: :development
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
81
56
|
name: rake
|
82
|
-
|
83
|
-
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Ruby (and Rails) Gravatar helpers with unique options like Proc's for
|
70
|
+
default images, support for gravatar.com's multiple host names, ability to define
|
71
|
+
reusable styles and much more...
|
72
|
+
email:
|
84
73
|
- lukas.westermann@gmail.com
|
85
74
|
executables: []
|
86
|
-
|
87
75
|
extensions: []
|
88
|
-
|
89
76
|
extra_rdoc_files: []
|
90
|
-
|
91
|
-
|
92
|
-
- .
|
93
|
-
- .travis.yml
|
77
|
+
files:
|
78
|
+
- ".gitignore"
|
79
|
+
- ".travis.yml"
|
94
80
|
- Gemfile
|
95
|
-
- Gemfile.lock
|
96
81
|
- LICENSE
|
97
82
|
- README.md
|
98
83
|
- Rakefile
|
@@ -108,44 +93,31 @@ files:
|
|
108
93
|
- test/unit/gravatarify_helper_test.rb
|
109
94
|
- test/unit/gravatarify_styles_test.rb
|
110
95
|
- test/unit/gravatarify_subdomain_test.rb
|
111
|
-
homepage:
|
112
|
-
licenses:
|
96
|
+
homepage: https://github.com/lwe/gravatarify
|
97
|
+
licenses:
|
113
98
|
- MIT
|
99
|
+
metadata: {}
|
114
100
|
post_install_message:
|
115
101
|
rdoc_options: []
|
116
|
-
|
117
|
-
require_paths:
|
102
|
+
require_paths:
|
118
103
|
- lib
|
119
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
-
|
121
|
-
requirements:
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
122
106
|
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
hash: 57
|
125
|
-
segments:
|
126
|
-
- 1
|
127
|
-
- 8
|
128
|
-
- 7
|
107
|
+
- !ruby/object:Gem::Version
|
129
108
|
version: 1.8.7
|
130
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
-
|
132
|
-
requirements:
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
133
111
|
- - ">="
|
134
|
-
- !ruby/object:Gem::Version
|
135
|
-
hash: 23
|
136
|
-
segments:
|
137
|
-
- 1
|
138
|
-
- 3
|
139
|
-
- 6
|
112
|
+
- !ruby/object:Gem::Version
|
140
113
|
version: 1.3.6
|
141
114
|
requirements: []
|
142
|
-
|
143
115
|
rubyforge_project:
|
144
|
-
rubygems_version:
|
116
|
+
rubygems_version: 2.2.0
|
145
117
|
signing_key:
|
146
|
-
specification_version:
|
118
|
+
specification_version: 4
|
147
119
|
summary: Awesome gravatar support for Ruby (and Rails).
|
148
|
-
test_files:
|
120
|
+
test_files:
|
149
121
|
- test/benchmark/benchmark.rb
|
150
122
|
- test/test_helper.rb
|
151
123
|
- test/unit/gravatarify_base_test.rb
|
data/Gemfile.lock
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
gravatarify (3.1.0)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: http://rubygems.org/
|
8
|
-
specs:
|
9
|
-
activesupport (3.2.5)
|
10
|
-
i18n (~> 0.6)
|
11
|
-
multi_json (~> 1.0)
|
12
|
-
i18n (0.6.0)
|
13
|
-
multi_json (1.3.6)
|
14
|
-
rake (0.9.2.2)
|
15
|
-
rr (1.0.4)
|
16
|
-
shoulda (3.0.1)
|
17
|
-
shoulda-context (~> 1.0.0)
|
18
|
-
shoulda-matchers (~> 1.0.0)
|
19
|
-
shoulda-context (1.0.0)
|
20
|
-
shoulda-matchers (1.0.0)
|
21
|
-
|
22
|
-
PLATFORMS
|
23
|
-
ruby
|
24
|
-
|
25
|
-
DEPENDENCIES
|
26
|
-
activesupport (>= 3.0.0)
|
27
|
-
gravatarify!
|
28
|
-
jruby-openssl
|
29
|
-
rake
|
30
|
-
rr (>= 0.10.5)
|
31
|
-
shoulda (>= 2.10.2)
|