summaryrefslogtreecommitdiffstats
path: root/lib/plugins/gravatar
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-04-26 17:23:24 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-04-26 17:23:24 +0000
commit8d73ddf73ffc2cefbe16ca06970377e13d4bead0 (patch)
treeecb8fbb4d8330fe936c43127f2b921ad24eec2e8 /lib/plugins/gravatar
parent26868d8b140406cce8c2494efbac7f8f85f452d0 (diff)
downloadredmine-8d73ddf73ffc2cefbe16ca06970377e13d4bead0.tar.gz
redmine-8d73ddf73ffc2cefbe16ca06970377e13d4bead0.zip
Moved Rails plugins required by the core to lib/plugins.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9533 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib/plugins/gravatar')
-rw-r--r--lib/plugins/gravatar/.gitignore1
-rw-r--r--lib/plugins/gravatar/MIT-LICENSE20
-rw-r--r--lib/plugins/gravatar/README.rdoc55
-rw-r--r--lib/plugins/gravatar/Rakefile32
-rw-r--r--lib/plugins/gravatar/about.yml7
-rw-r--r--lib/plugins/gravatar/init.rb2
-rw-r--r--lib/plugins/gravatar/lib/gravatar.rb88
-rw-r--r--lib/plugins/gravatar/spec/gravatar_spec.rb43
8 files changed, 248 insertions, 0 deletions
diff --git a/lib/plugins/gravatar/.gitignore b/lib/plugins/gravatar/.gitignore
new file mode 100644
index 000000000..4ebc8aea5
--- /dev/null
+++ b/lib/plugins/gravatar/.gitignore
@@ -0,0 +1 @@
+coverage
diff --git a/lib/plugins/gravatar/MIT-LICENSE b/lib/plugins/gravatar/MIT-LICENSE
new file mode 100644
index 000000000..6a222ac4d
--- /dev/null
+++ b/lib/plugins/gravatar/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2007 West Arete Computing, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/lib/plugins/gravatar/README.rdoc b/lib/plugins/gravatar/README.rdoc
new file mode 100644
index 000000000..0b95e85e8
--- /dev/null
+++ b/lib/plugins/gravatar/README.rdoc
@@ -0,0 +1,55 @@
+== Gravatar Plugin
+
+This plugin provides a handful of view helpers for displaying gravatars
+(globally-recognized avatars).
+
+Gravatars allow users to configure an avatar to go with their email address at
+a central location: http://gravatar.com. Gravatar-aware websites (such
+as yours) can then look up and display each user's preferred avatar, without
+having to handle avatar management. The user gets the benefit of not having to
+set up an avatar for each site that they post on.
+
+== Installation
+
+ cd ~/myapp
+ ruby script/plugin install git://github.com/woods/gravatar-plugin.git
+
+or, if you're using piston[http://piston.rubyforge.org] (worth it!):
+
+ cd ~/myapp/vendor/plugins
+ piston import git://github.com/woods/gravatar-plugin.git
+
+== Example
+
+If you represent your users with a model that has an +email+ method (typical
+for most rails authentication setups), then you can simply use this method
+in your views:
+
+ <%= gravatar_for @user %>
+
+This will be replaced with the full HTML +img+ tag necessary for displaying
+that user's gravatar.
+
+Other helpers are documented under GravatarHelper::PublicMethods.
+
+== Acknowledgments
+
+Thanks to Magnus Bergmark (http://github.com/Mange), who contributed the SSL
+support in this plugin, as well as a few minor fixes.
+
+The following people have also written gravatar-related Ruby libraries:
+* Seth Rasmussen created the gravatar gem[http://gravatar.rubyforge.org]
+* Matt McCray has also created a gravatar
+ plugin[http://mattmccray.com/svn/rails/plugins/gravatar_helper]
+
+== Author
+
+ Scott A. Woods
+ West Arete Computing, Inc.
+ http://westarete.com
+ scott at westarete dot com
+
+== TODO
+
+* Add specs for ssl support
+* Finish rdoc documentation \ No newline at end of file
diff --git a/lib/plugins/gravatar/Rakefile b/lib/plugins/gravatar/Rakefile
new file mode 100644
index 000000000..e67e5e7f9
--- /dev/null
+++ b/lib/plugins/gravatar/Rakefile
@@ -0,0 +1,32 @@
+require 'spec/rake/spectask'
+require 'rake/rdoctask'
+
+desc 'Default: run all specs'
+task :default => :spec
+
+desc 'Run all application-specific specs'
+Spec::Rake::SpecTask.new(:spec) do |t|
+ # t.rcov = true
+end
+
+desc "Report code statistics (KLOCs, etc) from the application"
+task :stats do
+ RAILS_ROOT = File.dirname(__FILE__)
+ STATS_DIRECTORIES = [
+ %w(Libraries lib/),
+ %w(Specs spec/),
+ ].collect { |name, dir| [ name, "#{RAILS_ROOT}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
+ require 'code_statistics'
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
+end
+
+namespace :doc do
+ desc 'Generate documentation for the assert_request plugin.'
+ Rake::RDocTask.new(:plugin) do |rdoc|
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = 'Gravatar Rails Plugin'
+ rdoc.options << '--line-numbers' << '--inline-source' << '--accessor' << 'cattr_accessor=rw'
+ rdoc.rdoc_files.include('README')
+ rdoc.rdoc_files.include('lib/**/*.rb')
+ end
+end
diff --git a/lib/plugins/gravatar/about.yml b/lib/plugins/gravatar/about.yml
new file mode 100644
index 000000000..aa5b8b19d
--- /dev/null
+++ b/lib/plugins/gravatar/about.yml
@@ -0,0 +1,7 @@
+author: Scott Woods, West Arete Computing
+summary: View helpers for displaying gravatars.
+homepage: http://github.com/woods/gravatar-plugin/
+plugin: git://github.com/woods/gravatar-plugin.git
+license: MIT
+version: 0.1
+rails_version: 1.0+
diff --git a/lib/plugins/gravatar/init.rb b/lib/plugins/gravatar/init.rb
new file mode 100644
index 000000000..aab3f75f3
--- /dev/null
+++ b/lib/plugins/gravatar/init.rb
@@ -0,0 +1,2 @@
+require 'gravatar'
+ActionView::Base.send :include, GravatarHelper::PublicMethods
diff --git a/lib/plugins/gravatar/lib/gravatar.rb b/lib/plugins/gravatar/lib/gravatar.rb
new file mode 100644
index 000000000..a0b1241b2
--- /dev/null
+++ b/lib/plugins/gravatar/lib/gravatar.rb
@@ -0,0 +1,88 @@
+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',
+
+ # 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 => '',
+
+ # The title text to use for the img tag for the gravatar.
+ :title => '',
+
+ # The class to assign to the img tag for the gravatar.
+ :class => 'gravatar',
+
+ # Whether or not to display the gravatars using HTTPS instead of HTTP
+ :ssl => false,
+ }
+
+ # 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)
+ [:class, :alt, :title].each { |opt| options[opt] = h(options[opt]) }
+ image_tag src, options
+ end
+
+ # 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
+
+ # 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?
+ gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url|
+ opts = []
+ [:rating, :size, :default].each do |opt|
+ unless options[opt].nil?
+ value = h(options[opt])
+ opts << [opt, value].join('=')
+ end
+ end
+ url << "?#{opts.join('&')}" unless opts.empty?
+ end
+ end
+
+ end
+
+end
diff --git a/lib/plugins/gravatar/spec/gravatar_spec.rb b/lib/plugins/gravatar/spec/gravatar_spec.rb
new file mode 100644
index 000000000..6f78d79ad
--- /dev/null
+++ b/lib/plugins/gravatar/spec/gravatar_spec.rb
@@ -0,0 +1,43 @@
+require 'rubygems'
+require 'erb' # to get "h"
+require 'active_support' # to get "returning"
+require File.dirname(__FILE__) + '/../lib/gravatar'
+include GravatarHelper, GravatarHelper::PublicMethods, ERB::Util
+
+describe "gravatar_url with a custom default URL" do
+ before(:each) do
+ @original_options = DEFAULT_OPTIONS.dup
+ DEFAULT_OPTIONS[:default] = "no_avatar.png"
+ @url = gravatar_url("somewhere")
+ end
+
+ it "should include the \"default\" argument in the result" do
+ @url.should match(/&default=no_avatar.png/)
+ end
+
+ after(:each) do
+ DEFAULT_OPTIONS.merge!(@original_options)
+ end
+
+end
+
+describe "gravatar_url with default settings" do
+ before(:each) do
+ @url = gravatar_url("somewhere")
+ end
+
+ it "should have a nil default URL" do
+ DEFAULT_OPTIONS[:default].should be_nil
+ end
+
+ it "should not include the \"default\" argument in the result" do
+ @url.should_not match(/&default=/)
+ end
+
+end
+
+describe "gravatar with a custom title option" do
+ it "should include the title in the result" do
+ gravatar('example@example.com', :title => "This is a title attribute").should match(/This is a title attribute/)
+ end
+end