gravatarify 0.6.0 → 0.7.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/LICENSE +1 -1
- data/README.md +123 -2
- data/VERSION.yml +1 -1
- data/lib/gravatarify/base.rb +3 -3
- data/test/gravatarify_base_test.rb +2 -2
- data/test/gravatarify_object_support_test.rb +1 -1
- metadata +1 -1
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -8,9 +8,24 @@ Best of it? It works with Rails, probably Merb and even plain old Ruby :)
|
|
8
8
|
|
9
9
|
## Install
|
10
10
|
|
11
|
-
|
11
|
+
Just install the gem (ensure you have gemcutter in your sources!)
|
12
12
|
|
13
|
-
|
13
|
+
sudo gem install gravatarify
|
14
|
+
|
15
|
+
Ready to go! Using Rails? Either add (to `config/environment.rb`):
|
16
|
+
|
17
|
+
config.gem 'gravatarify', :source => 'http://gemcutter.org'
|
18
|
+
|
19
|
+
or install as Rails plugin:
|
20
|
+
|
21
|
+
./script/plugin install git://github.com/lwe/gravatarify.git
|
22
|
+
|
23
|
+
If the gem is available, just require it (for your simple ruby apps):
|
24
|
+
|
25
|
+
require 'rubygems'
|
26
|
+
require 'gravatarify'
|
27
|
+
|
28
|
+
## Using the view helpers (Rails only!)
|
14
29
|
|
15
30
|
Probably one of the easiest ways to add support for gravatar images is with the included view helpers:
|
16
31
|
|
@@ -79,3 +94,109 @@ class:
|
|
79
94
|
Tadaaa! Works exactly like the model helpers, so it's now possible to call `gravatar_url` on instances
|
80
95
|
of `PoroUser`.
|
81
96
|
|
97
|
+
## Back to the roots?
|
98
|
+
|
99
|
+
No need for sophisticated stuff like view helpers and ActiveRecord integration, want to go back to the roots?
|
100
|
+
Then feel free to use `Gravatarify::Base#build_gravatar_url` directly.
|
101
|
+
|
102
|
+
For example, want to use `build_gravatar_url` in a Sinatra app?
|
103
|
+
|
104
|
+
helpers Gravatarify::Base
|
105
|
+
|
106
|
+
Yeah, that should work :). See {Gravatarify::Base#build_gravatar_url} for more informations and usage examples.
|
107
|
+
|
108
|
+
## Need more control?
|
109
|
+
|
110
|
+
<table>
|
111
|
+
<tr>
|
112
|
+
<th>Option</th>
|
113
|
+
<th>Type</th>
|
114
|
+
<th>Description</th>
|
115
|
+
<th>Default</th>
|
116
|
+
</tr>
|
117
|
+
<tr>
|
118
|
+
<td><tt>:default</tt></td>
|
119
|
+
<td>String, Proc</td>
|
120
|
+
<td>Fully qualified URL to an image, which is used if gravatar.com has no image for the supplied email.
|
121
|
+
<tt>Proc</tt>s can be used to return e.g. an image based on the request size (see Advanced stuff).
|
122
|
+
Furthermore gravatar.com provides several "special values" which generate icons, these are "wavatar",
|
123
|
+
"monsterid" and "identicon", finally if set to <tt>404</tt> gravatar.com returns the <tt>HTTP 404 Not Found</tt> error.
|
124
|
+
If nothing is specified gravatar.com returns it's gravatar icon.
|
125
|
+
</td>
|
126
|
+
<td>-</td>
|
127
|
+
</tr>
|
128
|
+
<tr>
|
129
|
+
<td><tt>:rating</tt></td>
|
130
|
+
<td>String, Symbol</td>
|
131
|
+
<td>Each avatar at gravatar.com has a rating associated (which is based on MPAAs rating system), valid values are:<br/>
|
132
|
+
<b>g</b> - general audiences, <b>pg</b> - parental guidance suggested, <b>r</b> - restricted and <b>x</b> - x-rated :).
|
133
|
+
Gravatar.com returns <b>g</b>-rated avatars, unless anything else is specified.
|
134
|
+
</td>
|
135
|
+
<td>-</td>
|
136
|
+
</tr>
|
137
|
+
<tr>
|
138
|
+
<td><tt>:size</tt></td>
|
139
|
+
<td>Integer</td>
|
140
|
+
<td>Avatars are square, so <tt>:size</tt> defines the length of the sides in pixel, if nothing is specified gravatar.com
|
141
|
+
returns 80x80px images.</td>
|
142
|
+
<td>-</td>
|
143
|
+
</tr>
|
144
|
+
<tr>
|
145
|
+
<td><tt>:secure</tt></td>
|
146
|
+
<td>Boolean, Proc</td>
|
147
|
+
<td>If set to <tt>true</tt> gravatars secure host (<i>https://secure.gravatar.com/</i>) is used to serve the avatars
|
148
|
+
from. Can be a Proc to inflect wheter or not to use the secure host based on request parameters.</td>
|
149
|
+
<td><tt>false</tt></td>
|
150
|
+
</tr>
|
151
|
+
<tr>
|
152
|
+
<td><tt>:filetype</tt></td>
|
153
|
+
<td>String, Symbol</td>
|
154
|
+
<td>Change image type, gravatar.com supports <tt>:gif</tt>, <tt>:png</tt> and <tt>:jpg</tt>.</td>
|
155
|
+
<td><tt>:jpg</tt></td>
|
156
|
+
</tr>
|
157
|
+
</table>
|
158
|
+
|
159
|
+
## Not yet enough?
|
160
|
+
|
161
|
+
The `:default` option can be passed in a `Proc`, so this is certainly useful to for example
|
162
|
+
to generate an image url, based on the request size:
|
163
|
+
|
164
|
+
# in an initializer
|
165
|
+
Gravatarify.options[:default] = Proc.new do |options, object|
|
166
|
+
"http://example.com/avatar-#{options[:size] || 80}.jpg"
|
167
|
+
end
|
168
|
+
|
169
|
+
# now each time a gravatar url is generated, the Proc is evaluated:
|
170
|
+
@user.gravatar_url
|
171
|
+
# => "http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-80.jpg"
|
172
|
+
@user.gravatar_url(:size => 16)
|
173
|
+
# => "http://0.gravatar.com/...jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-16.jpg&s=16"
|
174
|
+
|
175
|
+
Into the block is passed the options hash and as second parameter the object itself, so in the example above
|
176
|
+
`object` would be `@user`, might be useful!? Never used it, so I might remove the second argument...
|
177
|
+
|
178
|
+
Not only the `:default` option accepts a Proc, but also `:secure`, can be useful to handle cases where
|
179
|
+
it should evaluate against `request.ssl?` for example.
|
180
|
+
|
181
|
+
## Licence
|
182
|
+
|
183
|
+
Copyright (c) 2009 Lukas Westermann
|
184
|
+
|
185
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
186
|
+
a copy of this software and associated documentation files (the
|
187
|
+
"Software"), to deal in the Software without restriction, including
|
188
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
189
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
190
|
+
permit persons to whom the Software is furnished to do so, subject to
|
191
|
+
the following conditions:
|
192
|
+
|
193
|
+
The above copyright notice and this permission notice shall be
|
194
|
+
included in all copies or substantial portions of the Software.
|
195
|
+
|
196
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
197
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
198
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
199
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
200
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
201
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
202
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/VERSION.yml
CHANGED
data/lib/gravatarify/base.rb
CHANGED
@@ -10,7 +10,7 @@ module Gravatarify
|
|
10
10
|
GRAVATAR_DEFAULT_SIZE = 80
|
11
11
|
|
12
12
|
# Default filetype is JPG
|
13
|
-
GRAVATAR_DEFAULT_FILETYPE =
|
13
|
+
GRAVATAR_DEFAULT_FILETYPE = :jpg
|
14
14
|
|
15
15
|
# List of known and valid gravatar options (includes shortened options).
|
16
16
|
GRAVATAR_OPTIONS = [ :default, :d, :rating, :r, :size, :s, :secure, :filetype ]
|
@@ -69,7 +69,7 @@ module Gravatarify
|
|
69
69
|
|
70
70
|
private
|
71
71
|
def build_gravatar_host(str_hash, secure = false)
|
72
|
-
secure = secure.call(
|
72
|
+
secure = secure.call(self) if secure.respond_to?(:call)
|
73
73
|
secure ? "https://secure.gravatar.com" : "http://#{GRAVATAR_HOSTS[str_hash.hash % GRAVATAR_HOSTS.size] || 'www'}.gravatar.com"
|
74
74
|
end
|
75
75
|
|
@@ -77,7 +77,7 @@ module Gravatarify
|
|
77
77
|
params = []
|
78
78
|
url_options.each_pair do |key, value|
|
79
79
|
key = GRAVATAR_ABBREV_OPTIONS[key] if GRAVATAR_ABBREV_OPTIONS.include?(key) # shorten key!
|
80
|
-
value = value.call(url_options) if key.to_s == 'd' and value.respond_to?(:call)
|
80
|
+
value = value.call(url_options, self) if key.to_s == 'd' and value.respond_to?(:call)
|
81
81
|
params << "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}" if value
|
82
82
|
end
|
83
83
|
"?#{params.sort * '&'}" unless params.empty?
|
@@ -55,7 +55,7 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
should "handle Procs as :default, to easily generate default urls based on supplied :size" do
|
58
|
-
default = Proc.new { |
|
58
|
+
default = Proc.new { |*args| "http://example.com/gravatar#{args.first[:size] ? '-' + args.first[:size].to_s : ''}.jpg" }
|
59
59
|
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar.jpg",
|
60
60
|
build_gravatar_url('bella@gmail.com', :default => default)
|
61
61
|
assert_equal "http://0.gravatar.com/avatar/1cacf1bc403efca2e7a58bcfa9574e4d.jpg?d=http%3A%2F%2Fexample.com%2Fgravatar-25.jpg&s=25",
|
@@ -104,7 +104,7 @@ class GravatarifyBaseTest < Test::Unit::TestCase
|
|
104
104
|
end
|
105
105
|
|
106
106
|
should "allow Procs for :secure option, enables pretty cool stuff for stuff like request.ssl?" do
|
107
|
-
Gravatarify.options[:secure] = Proc.new { |
|
107
|
+
Gravatarify.options[:secure] = Proc.new { |obj| obj.request.ssl? }
|
108
108
|
|
109
109
|
mock_ssl = MockView.new
|
110
110
|
mock(mock_ssl).request.stub!.ssl? { true }
|
@@ -88,7 +88,7 @@ class GravatarifyObjectSupportTest < Test::Unit::TestCase
|
|
88
88
|
should "allow multiple sources to be defined, yet still handle options!" do
|
89
89
|
poro = Class.new do
|
90
90
|
include Gravatarify::ObjectSupport
|
91
|
-
gravatarify :email, :employee_email, :default => Proc.new { |
|
91
|
+
gravatarify :email, :employee_email, :default => Proc.new { |*args| "http://initech.com/avatar-#{args.first[:size] || 80}.jpg" }
|
92
92
|
def email; "info@initech.com" end
|
93
93
|
def employee_email; "peter.gibbons@initech.com" end
|
94
94
|
end
|