diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-04-26 17:23:24 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2012-04-26 17:23:24 +0000 |
commit | 8d73ddf73ffc2cefbe16ca06970377e13d4bead0 (patch) | |
tree | ecb8fbb4d8330fe936c43127f2b921ad24eec2e8 /lib/plugins/gravatar | |
parent | 26868d8b140406cce8c2494efbac7f8f85f452d0 (diff) | |
download | redmine-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/.gitignore | 1 | ||||
-rw-r--r-- | lib/plugins/gravatar/MIT-LICENSE | 20 | ||||
-rw-r--r-- | lib/plugins/gravatar/README.rdoc | 55 | ||||
-rw-r--r-- | lib/plugins/gravatar/Rakefile | 32 | ||||
-rw-r--r-- | lib/plugins/gravatar/about.yml | 7 | ||||
-rw-r--r-- | lib/plugins/gravatar/init.rb | 2 | ||||
-rw-r--r-- | lib/plugins/gravatar/lib/gravatar.rb | 88 | ||||
-rw-r--r-- | lib/plugins/gravatar/spec/gravatar_spec.rb | 43 |
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 |