gravatarify 0.7.0 → 1.0.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/.gitignore +1 -0
- data/README.md +48 -12
- data/Rakefile +14 -2
- data/VERSION.yml +2 -2
- data/lib/gravatarify/base.rb +42 -5
- data/lib/gravatarify/view_helper.rb +2 -0
- data/test/gravatarify_base_test.rb +1 -4
- data/test/gravatarify_integration_test.rb +1 -1
- data/test/gravatarify_object_support_test.rb +1 -1
- data/test/gravatarify_subdomain_test.rb +36 -0
- data/test/gravatarify_view_helper_test.rb +2 -1
- data/test/test_helper.rb +6 -0
- metadata +10 -7
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -4,15 +4,19 @@ 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
|
-
|
7
|
+
And it integrates seamlessly with Rails, Merb and even plain old Ruby.
|
8
|
+
|
9
|
+
- **Source**: [http://github.com/lwe/gravatarify](http://github.com/lwe/gravatarify)
|
10
|
+
- **Docs**: [http://rdoc.info/projects/lwe/gravatarify](http://rdoc.info/projects/lwe/gravatarify)
|
11
|
+
- **Gem**: [http://gemcutter.org/gems/gravatarify](http://gemcutter.org/gems/gravatarify)
|
8
12
|
|
9
13
|
## Install
|
10
14
|
|
11
15
|
Just install the gem (ensure you have gemcutter in your sources!)
|
12
16
|
|
13
|
-
sudo gem install gravatarify
|
17
|
+
[sudo] gem install gravatarify
|
14
18
|
|
15
|
-
Ready to go! Using Rails? Either add (
|
19
|
+
Ready to go! Using Rails? Either add as gem (in `config/environment.rb`):
|
16
20
|
|
17
21
|
config.gem 'gravatarify', :source => 'http://gemcutter.org'
|
18
22
|
|
@@ -20,34 +24,44 @@ or install as Rails plugin:
|
|
20
24
|
|
21
25
|
./script/plugin install git://github.com/lwe/gravatarify.git
|
22
26
|
|
23
|
-
|
27
|
+
Of course it's also possible to just add the library onto the `$LOAD_PATH`
|
28
|
+
and then `require 'gravatarify'` it.
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
# Usage
|
31
|
+
|
32
|
+
This library provides...
|
27
33
|
|
34
|
+
* ...object/model helpers, so that an object responds to `gravatar_url`, see [using the model helpers](#l_model_helpers).
|
35
|
+
Works also very well with plain old ruby objects.
|
36
|
+
* ...Rails view helpers, namely `gravatar_url` and `gravatar_tag`, see [using the view helpers](#l_view_helpers). This is rails only though!
|
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 [back to the roots](#l_roots)
|
39
|
+
|
40
|
+
<a id="l_view_helpers"/>
|
28
41
|
## Using the view helpers (Rails only!)
|
29
42
|
|
30
43
|
Probably one of the easiest ways to add support for gravatar images is with the included view helpers:
|
31
44
|
|
32
45
|
<%= gravatar_tag @user %> # assumes @user has email or mail field!
|
33
|
-
|
46
|
+
|
34
47
|
This builds a neat `<img/>`-tag, if you need to pass in stuff like the size etc. just:
|
35
48
|
|
36
49
|
<%= gravatar_tag @user, :size => 25, :rating => :x, :class => "gravatar" %>
|
37
|
-
|
50
|
+
|
38
51
|
This will display an "X" rated avatar which is 25x25 pixel in size and the image tag will have the class `"gravatar"`.
|
39
52
|
If more control is required, or just the URL, well then go ahead and use `gravatar_url` instead:
|
40
53
|
|
41
|
-
|
42
|
-
|
43
|
-
|
54
|
+
<%= image_tag gravatar_url(@user.author_email, :size => 16), :size => "16x16",
|
55
|
+
:alt => @user.name, :class => "avatar avatar-16"}/
|
56
|
+
|
44
57
|
Using rails `image_tag` to create an `<img/>`-tag with `gravatar_url`. It's important to know that
|
45
58
|
also an object can be passed to `gravatar_url`, if it responds to either `email` or `mail`. If not (like
|
46
59
|
in the example above), the email address must be passed in.
|
47
60
|
|
61
|
+
<a id="l_model_helpers"/>
|
48
62
|
## Using the model helpers
|
49
63
|
|
50
|
-
|
64
|
+
A very simple method to add `gravatar_url` support to models is by using the `gravatarify` class method.
|
51
65
|
|
52
66
|
class User < ActiveRecord::Base
|
53
67
|
gravatarify
|
@@ -94,6 +108,7 @@ class:
|
|
94
108
|
Tadaaa! Works exactly like the model helpers, so it's now possible to call `gravatar_url` on instances
|
95
109
|
of `PoroUser`.
|
96
110
|
|
111
|
+
<a id="l_roots"/>
|
97
112
|
## Back to the roots?
|
98
113
|
|
99
114
|
No need for sophisticated stuff like view helpers and ActiveRecord integration, want to go back to the roots?
|
@@ -178,6 +193,27 @@ Into the block is passed the options hash and as second parameter the object its
|
|
178
193
|
Not only the `:default` option accepts a Proc, but also `:secure`, can be useful to handle cases where
|
179
194
|
it should evaluate against `request.ssl?` for example.
|
180
195
|
|
196
|
+
## About the code
|
197
|
+
|
198
|
+
Eventhough this library has less than 100 LOC, it's split into four files, maybe a bit
|
199
|
+
of an overkill, though I like neat and tidy classes :)
|
200
|
+
|
201
|
+
lib/gravatarify.rb # loads the other files from lib/gravatarify
|
202
|
+
# and hooks the necessary modules into
|
203
|
+
# ActionView, ActiveRecord and DataMapper
|
204
|
+
# (if available)
|
205
|
+
|
206
|
+
lib/gravatarify/base.rb # Provides all logic required to generate
|
207
|
+
# gravatar.com urls from an email address.
|
208
|
+
# Check out Gravatarify::Base.build_gravatar_url,
|
209
|
+
# this is the absolute core method.
|
210
|
+
|
211
|
+
lib/gravatarify/object_support.rb # Module which (when) included provides the
|
212
|
+
# gravatarify class method to add a gravatar_url
|
213
|
+
# to any object.
|
214
|
+
|
215
|
+
lib/gravatarify/view_helper.rb # Defines rails view helpers.
|
216
|
+
|
181
217
|
## Licence
|
182
218
|
|
183
219
|
Copyright (c) 2009 Lukas Westermann
|
data/Rakefile
CHANGED
@@ -2,6 +2,10 @@ require 'rake'
|
|
2
2
|
require 'rake/testtask'
|
3
3
|
require 'yard'
|
4
4
|
|
5
|
+
def gravatarify_version
|
6
|
+
@gravatarify_version ||= (tmp = YAML.load(File.read('VERSION.yml'))) && [tmp[:major], tmp[:minor], tmp[:patch]] * '.'
|
7
|
+
end
|
8
|
+
|
5
9
|
desc 'Default: run unit tests.'
|
6
10
|
task :default => :test
|
7
11
|
|
@@ -18,7 +22,7 @@ YARD::Rake::YardocTask.new(:doc) do |t|
|
|
18
22
|
t.files = ['lib/**/*.rb']
|
19
23
|
t.options = [
|
20
24
|
"--readme", "README.md",
|
21
|
-
"--title", "
|
25
|
+
"--title", "gravatarify (v#{gravatarify_version}) API Documentation"
|
22
26
|
]
|
23
27
|
end
|
24
28
|
|
@@ -26,10 +30,17 @@ begin
|
|
26
30
|
require 'jeweler'
|
27
31
|
Jeweler::Tasks.new do |gemspec|
|
28
32
|
gemspec.name = "gravatarify"
|
29
|
-
gemspec.summary = "
|
33
|
+
gemspec.summary = "Awesome gravatar support for ruby (and rails)."
|
34
|
+
description = <<-DESC
|
35
|
+
Yet another ruby/rails gravatar plugin - though, one with unique options like
|
36
|
+
`Proc`s for default images, or support for gravatar.com's multiple host names.
|
37
|
+
DESC
|
38
|
+
gemspec.description = description.strip
|
30
39
|
gemspec.email = "lukas.westermann@gmail.com"
|
31
40
|
gemspec.homepage = "http://github.com/lwe/gravatarify"
|
32
41
|
gemspec.authors = ["Lukas Westermann"]
|
42
|
+
gemspec.licenses = %w{LICENSE}
|
43
|
+
gemspec.extra_rdoc_files = %w{README.md}
|
33
44
|
end
|
34
45
|
Jeweler::GemcutterTasks.new
|
35
46
|
rescue LoadError
|
@@ -40,6 +51,7 @@ desc 'Clean all generated files (.yardoc and doc/*)'
|
|
40
51
|
task :clean do |t|
|
41
52
|
FileUtils.rm_rf "doc"
|
42
53
|
FileUtils.rm_rf "pkg"
|
54
|
+
FileUtils.rm_rf "gravatarify.gemspec"
|
43
55
|
FileUtils.rm_rf ".yardoc"
|
44
56
|
end
|
45
57
|
|
data/VERSION.yml
CHANGED
data/lib/gravatarify/base.rb
CHANGED
@@ -2,9 +2,11 @@ require 'digest/md5'
|
|
2
2
|
require 'cgi'
|
3
3
|
|
4
4
|
module Gravatarify
|
5
|
+
# Subdomains used for balancing
|
6
|
+
GRAVATAR_SUBDOMAINS = %w{ 0 1 2 www }
|
5
7
|
|
6
|
-
#
|
7
|
-
|
8
|
+
# Fallback if no subdomain is found
|
9
|
+
GRAVATAR_DEFAULT_SUBDOMAIN = 'www'
|
8
10
|
|
9
11
|
# If no size is specified, gravatar.com returns 80x80px images
|
10
12
|
GRAVATAR_DEFAULT_SIZE = 80
|
@@ -18,8 +20,43 @@ module Gravatarify
|
|
18
20
|
# Hash of :ultra_long_option_name => 'abbrevated option'
|
19
21
|
GRAVATAR_ABBREV_OPTIONS = { :default => 'd', :rating => 'r', :size => 's' }
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
class << self
|
24
|
+
# Globally define options which are then merged on every call to
|
25
|
+
# +build_gravatar_url+, this is useful to e.g. define the default image.
|
26
|
+
#
|
27
|
+
# Setting global options should be done (for Rails apps) in an initializer:
|
28
|
+
#
|
29
|
+
# # set the default image using a Proc
|
30
|
+
# Gravatarify.options[:default] = Proc.new { |*args| "http://example.com/avatar-#{args.first[:size] || 80}.jpg" }
|
31
|
+
#
|
32
|
+
# # or set a custom default rating
|
33
|
+
# Gravatarify.options[:rating] = :R
|
34
|
+
#
|
35
|
+
def options; @options ||= {} end
|
36
|
+
|
37
|
+
# Globally overide subdomains used to build gravatar urls, normally
|
38
|
+
# +gravatarify+ picks from either +0.gravatar.com+, +1.gravatar.com+,
|
39
|
+
# +2.gravatar.com+ or +www.gravatar.com+ when building hosts, to use a custom
|
40
|
+
# set of subdomains (or none!) do something like:
|
41
|
+
#
|
42
|
+
# Gravatarify.subdomains = %w{ 0 www } # only use 0.gravatar.com and www.gravatar.com
|
43
|
+
#
|
44
|
+
# Gravatarify.subdomain = 'www' # only use www! (PS: subdomain= is an alias)
|
45
|
+
#
|
46
|
+
def subdomains=(subdomains) @subdomains = [*subdomains] end
|
47
|
+
alias_method :subdomain=, :subdomains=
|
48
|
+
|
49
|
+
# Shortcut method to reset subdomains to only build +www.gravatar.com+ urls,
|
50
|
+
# i.e. disable host balancing!
|
51
|
+
def use_www_only!; self.subdomains = %w{ www } end
|
52
|
+
|
53
|
+
# Access currently defined subdomains, defaults are +GRAVTAR_SUBDOMAINS+.
|
54
|
+
def subdomains; @subdomains ||= GRAVATAR_SUBDOMAINS end
|
55
|
+
|
56
|
+
# Get subdomain for supplied string or returns +GRAVATAR_DEFAULT_SUBDOMAIN+ if none is
|
57
|
+
# defined.
|
58
|
+
def subdomain(str); subdomains[str.hash % subdomains.size] || GRAVATAR_DEFAULT_SUBDOMAIN end
|
59
|
+
end
|
23
60
|
|
24
61
|
# Provides core support to build gravatar urls based on supplied e-mail strings.
|
25
62
|
module Base
|
@@ -70,7 +107,7 @@ module Gravatarify
|
|
70
107
|
private
|
71
108
|
def build_gravatar_host(str_hash, secure = false)
|
72
109
|
secure = secure.call(self) if secure.respond_to?(:call)
|
73
|
-
secure ? "https://secure.gravatar.com" : "http://#{
|
110
|
+
secure ? "https://secure.gravatar.com" : "http://#{Gravatarify.subdomain(str_hash)}.gravatar.com"
|
74
111
|
end
|
75
112
|
|
76
113
|
def build_gravatar_options(url_options = {})
|
@@ -8,10 +8,7 @@ end
|
|
8
8
|
class GravatarifyBaseTest < Test::Unit::TestCase
|
9
9
|
include Gravatarify::Base
|
10
10
|
|
11
|
-
def setup
|
12
|
-
# just ensure that no global options are defined when starting next test
|
13
|
-
Gravatarify.options.clear
|
14
|
-
end
|
11
|
+
def setup; reset_gravatarify! end
|
15
12
|
|
16
13
|
context "#build_gravatar_url, but without any options yet" do
|
17
14
|
should "generate correct url for hash without options" do
|
@@ -4,7 +4,7 @@ begin; require 'dm-core'; rescue LoadError; end
|
|
4
4
|
require 'gravatarify'
|
5
5
|
|
6
6
|
class GravatarifyIntegrationTest < Test::Unit::TestCase
|
7
|
-
def setup;
|
7
|
+
def setup; reset_gravatarify! end
|
8
8
|
|
9
9
|
context "ActiveRecord::Base" do
|
10
10
|
if defined?(ActiveRecord)
|
@@ -3,7 +3,7 @@ require 'gravatarify/base'
|
|
3
3
|
require 'gravatarify/object_support'
|
4
4
|
|
5
5
|
class GravatarifyObjectSupportTest < Test::Unit::TestCase
|
6
|
-
def setup;
|
6
|
+
def setup; reset_gravatarify! end
|
7
7
|
|
8
8
|
context "#gravatarify" do
|
9
9
|
should "add support for #gravatar_url to POROs (plain old ruby objects, yeah POJO sounds better!)" do
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'gravatarify/base'
|
3
|
+
|
4
|
+
class GravatarifySubdomainTest < Test::Unit::TestCase
|
5
|
+
include Gravatarify::Base
|
6
|
+
|
7
|
+
def setup; reset_gravatarify! end
|
8
|
+
|
9
|
+
context "changing hosts through Gravatarify#subdomains" do
|
10
|
+
should "override default subdomains (useful to e.g. switch back to 'www' only)" do
|
11
|
+
Gravatarify.subdomains = ['0', '1']
|
12
|
+
assert_equal "http://0.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", build_gravatar_url('info@initech.com')
|
13
|
+
assert_equal "http://1.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", build_gravatar_url('support@initech.com')
|
14
|
+
end
|
15
|
+
|
16
|
+
should "take in a string only argument, like www (and be aliased to 'subdomain' to singularize it :D)" do
|
17
|
+
Gravatarify.subdomain = 'www'
|
18
|
+
assert_equal "http://www.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", build_gravatar_url('info@initech.com')
|
19
|
+
assert_equal "http://www.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", build_gravatar_url('support@initech.com')
|
20
|
+
end
|
21
|
+
|
22
|
+
should "still work as expected if passed in `nil` and return urls with default subdomain `www`" do
|
23
|
+
Gravatarify.subdomain = nil
|
24
|
+
assert_equal "http://www.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", build_gravatar_url('info@initech.com')
|
25
|
+
assert_equal "http://www.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", build_gravatar_url('support@initech.com')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "Gravatarify#use_only_www!" do
|
30
|
+
should "only generate www.gravatar.com urls" do
|
31
|
+
Gravatarify.use_www_only!
|
32
|
+
assert_equal "http://www.gravatar.com/avatar/4979dd9653e759c78a81d4997f56bae2.jpg", build_gravatar_url('info@initech.com')
|
33
|
+
assert_equal "http://www.gravatar.com/avatar/d4489907918035d0bc6ff3f6c76e760d.jpg", build_gravatar_url('support@initech.com')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'active_support'
|
3
3
|
require 'action_view/helpers'
|
4
|
+
require 'gravatarify'
|
4
5
|
require 'gravatarify/view_helper'
|
5
6
|
|
6
7
|
class GravatarifyViewHelperTest < Test::Unit::TestCase
|
@@ -9,7 +10,7 @@ class GravatarifyViewHelperTest < Test::Unit::TestCase
|
|
9
10
|
|
10
11
|
def setup
|
11
12
|
# just ensure that no global options are defined when starting next test
|
12
|
-
|
13
|
+
reset_gravatarify!
|
13
14
|
end
|
14
15
|
|
15
16
|
context "#gravatar_tag helper" do
|
data/test/test_helper.rb
CHANGED
@@ -4,3 +4,9 @@ require 'shoulda'
|
|
4
4
|
require 'rr'
|
5
5
|
|
6
6
|
Test::Unit::TestCase.send :include, RR::Adapters::TestUnit
|
7
|
+
|
8
|
+
# Reset +Gravatarify+ to default hosts and cleared options
|
9
|
+
def reset_gravatarify!
|
10
|
+
Gravatarify.options.clear
|
11
|
+
Gravatarify.subdomains = Gravatarify::GRAVATAR_SUBDOMAINS
|
12
|
+
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Westermann
|
@@ -9,18 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-02 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
16
|
+
description: |-
|
17
|
+
Yet another ruby/rails gravatar plugin - though, one with unique options like
|
18
|
+
`Proc`s for default images, or support for gravatar.com's multiple host names.
|
17
19
|
email: lukas.westermann@gmail.com
|
18
20
|
executables: []
|
19
21
|
|
20
22
|
extensions: []
|
21
23
|
|
22
24
|
extra_rdoc_files:
|
23
|
-
- LICENSE
|
24
25
|
- README.md
|
25
26
|
files:
|
26
27
|
- .gitignore
|
@@ -36,12 +37,13 @@ files:
|
|
36
37
|
- test/gravatarify_base_test.rb
|
37
38
|
- test/gravatarify_integration_test.rb
|
38
39
|
- test/gravatarify_object_support_test.rb
|
40
|
+
- test/gravatarify_subdomain_test.rb
|
39
41
|
- test/gravatarify_view_helper_test.rb
|
40
42
|
- test/test_helper.rb
|
41
43
|
has_rdoc: true
|
42
44
|
homepage: http://github.com/lwe/gravatarify
|
43
|
-
licenses:
|
44
|
-
|
45
|
+
licenses:
|
46
|
+
- LICENSE
|
45
47
|
post_install_message:
|
46
48
|
rdoc_options:
|
47
49
|
- --charset=UTF-8
|
@@ -65,10 +67,11 @@ rubyforge_project:
|
|
65
67
|
rubygems_version: 1.3.5
|
66
68
|
signing_key:
|
67
69
|
specification_version: 3
|
68
|
-
summary:
|
70
|
+
summary: Awesome gravatar support for ruby (and rails).
|
69
71
|
test_files:
|
70
72
|
- test/gravatarify_base_test.rb
|
71
73
|
- test/gravatarify_integration_test.rb
|
72
74
|
- test/gravatarify_object_support_test.rb
|
75
|
+
- test/gravatarify_subdomain_test.rb
|
73
76
|
- test/gravatarify_view_helper_test.rb
|
74
77
|
- test/test_helper.rb
|