To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / .svn / pristine / 7a / 7a017fdd06e31fbf6cfa542010617fca4f01cf26.svn-base @ 1297:0a574315af3e

History | View | Annotate | Download (3 KB)

1
require 'digest/md5'
2
require 'cgi'
3

    
4
module GravatarHelper
5

    
6
  # These are the options that control the default behavior of the public
7
  # methods. They can be overridden during the actual call to the helper,
8
  # or you can set them in your environment.rb as such:
9
  #
10
  #   # Allow racier gravatars
11
  #   GravatarHelper::DEFAULT_OPTIONS[:rating] = 'R'
12
  #
13
  DEFAULT_OPTIONS = {
14
    # The URL of a default image to display if the given email address does
15
    # not have a gravatar.
16
    :default => nil,
17
    
18
    # The default size in pixels for the gravatar image (they're square).
19
    :size => 50,
20
    
21
    # The maximum allowed MPAA rating for gravatars. This allows you to 
22
    # exclude gravatars that may be out of character for your site.
23
    :rating => 'PG',
24
    
25
    # The alt text to use in the img tag for the gravatar.  Since it's a
26
    # decorational picture, the alt text should be empty according to the
27
    # XHTML specs.
28
    :alt => '',
29

    
30
    # The title text to use for the img tag for the gravatar.
31
    :title => '',
32
    
33
    # The class to assign to the img tag for the gravatar.
34
    :class => 'gravatar',
35
    
36
    # Whether or not to display the gravatars using HTTPS instead of HTTP
37
    :ssl => false,
38
  }
39
  
40
  # The methods that will be made available to your views.
41
  module PublicMethods
42
  
43
    # Return the HTML img tag for the given user's gravatar. Presumes that 
44
    # the given user object will respond_to "email", and return the user's
45
    # email address.
46
    def gravatar_for(user, options={})
47
      gravatar(user.email, options)
48
    end
49

    
50
    # Return the HTML img tag for the given email address's gravatar.
51
    def gravatar(email, options={})
52
      src = h(gravatar_url(email, options))
53
      options = DEFAULT_OPTIONS.merge(options)
54
      [:class, :alt, :size, :title].each { |opt| options[opt] = h(options[opt]) }
55
      "<img class=\"#{options[:class]}\" alt=\"#{options[:alt]}\" title=\"#{options[:title]}\" width=\"#{options[:size]}\" height=\"#{options[:size]}\" src=\"#{src}\" />"
56
    end
57
    
58
    # Returns the base Gravatar URL for the given email hash. If ssl evaluates to true,
59
    # a secure URL will be used instead. This is required when the gravatar is to be 
60
    # displayed on a HTTPS site.
61
    def gravatar_api_url(hash, ssl=false)
62
      if ssl
63
        "https://secure.gravatar.com/avatar/#{hash}"
64
      else
65
        "http://www.gravatar.com/avatar/#{hash}"
66
      end
67
    end
68

    
69
    # Return the gravatar URL for the given email address.
70
    def gravatar_url(email, options={})
71
      email_hash = Digest::MD5.hexdigest(email)
72
      options = DEFAULT_OPTIONS.merge(options)
73
      options[:default] = CGI::escape(options[:default]) unless options[:default].nil?
74
      gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url|
75
        opts = []
76
        [:rating, :size, :default].each do |opt|
77
          unless options[opt].nil?
78
            value = h(options[opt])
79
            opts << [opt, value].join('=')
80
          end
81
        end
82
        url << "?#{opts.join('&')}" unless opts.empty?
83
      end
84
    end
85

    
86
  end
87
  
88
end