gravatar.rb
88 lines
| 2.9 KiB
| text/x-ruby
|
RubyLexer
|
r1960 | require 'digest/md5' | ||
require 'cgi' | ||||
module GravatarHelper | ||||
# These are the options that control the default behavior of the public | ||||
# methods. They can be overridden during the actual call to the helper, | ||||
# or you can set them in your environment.rb as such: | ||||
# | ||||
# # Allow racier gravatars | ||||
# GravatarHelper::DEFAULT_OPTIONS[:rating] = 'R' | ||||
# | ||||
DEFAULT_OPTIONS = { | ||||
# The URL of a default image to display if the given email address does | ||||
# not have a gravatar. | ||||
:default => nil, | ||||
# The default size in pixels for the gravatar image (they're square). | ||||
:size => 50, | ||||
# The maximum allowed MPAA rating for gravatars. This allows you to | ||||
# exclude gravatars that may be out of character for your site. | ||||
:rating => 'PG', | ||||
|
r2727 | # The alt text to use in the img tag for the gravatar. Since it's a | ||
# decorational picture, the alt text should be empty according to the | ||||
# XHTML specs. | ||||
:alt => '', | ||||
|
r3958 | |||
# The title text to use for the img tag for the gravatar. | ||||
:title => '', | ||||
|
r1960 | |||
# The class to assign to the img tag for the gravatar. | ||||
:class => 'gravatar', | ||||
|
r2727 | |||
# Whether or not to display the gravatars using HTTPS instead of HTTP | ||||
:ssl => false, | ||||
|
r1960 | } | ||
# The methods that will be made available to your views. | ||||
module PublicMethods | ||||
# Return the HTML img tag for the given user's gravatar. Presumes that | ||||
# the given user object will respond_to "email", and return the user's | ||||
# email address. | ||||
def gravatar_for(user, options={}) | ||||
gravatar(user.email, options) | ||||
end | ||||
# Return the HTML img tag for the given email address's gravatar. | ||||
def gravatar(email, options={}) | ||||
src = h(gravatar_url(email, options)) | ||||
options = DEFAULT_OPTIONS.merge(options) | ||||
|
r8800 | [:class, :alt, :title].each { |opt| options[opt] = h(options[opt]) } | ||
image_tag src, options | ||||
|
r1960 | end | ||
|
r2727 | |||
# Returns the base Gravatar URL for the given email hash. If ssl evaluates to true, | ||||
# a secure URL will be used instead. This is required when the gravatar is to be | ||||
# displayed on a HTTPS site. | ||||
def gravatar_api_url(hash, ssl=false) | ||||
if ssl | ||||
"https://secure.gravatar.com/avatar/#{hash}" | ||||
else | ||||
"http://www.gravatar.com/avatar/#{hash}" | ||||
end | ||||
end | ||||
|
r1960 | |||
# Return the gravatar URL for the given email address. | ||||
def gravatar_url(email, options={}) | ||||
email_hash = Digest::MD5.hexdigest(email) | ||||
options = DEFAULT_OPTIONS.merge(options) | ||||
options[:default] = CGI::escape(options[:default]) unless options[:default].nil? | ||||
|
r4292 | gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url| | ||
|
r2727 | opts = [] | ||
|
r1960 | [:rating, :size, :default].each do |opt| | ||
unless options[opt].nil? | ||||
value = h(options[opt]) | ||||
|
r2727 | opts << [opt, value].join('=') | ||
|
r1960 | end | ||
end | ||||
|
r2727 | url << "?#{opts.join('&')}" unless opts.empty? | ||
|
r1960 | end | ||
end | ||||
end | ||||
|
r3958 | end | ||