Commit 3e8bfd50051a01c94c25214484e478ae53d92b27

Authored by Rodrigo Souto
1 parent e069a353

application-helper: refactor gravatar logic

app/controllers/public/account_controller.rb
@@ -262,7 +262,7 @@ class AccountController < ApplicationController @@ -262,7 +262,7 @@ class AccountController < ApplicationController
262 def user_data 262 def user_data
263 user_data = 263 user_data =
264 if logged_in? 264 if logged_in?
265 - current_user.data_hash self 265 + current_user.data_hash(gravatar_default)
266 else 266 else
267 { } 267 { }
268 end 268 end
app/helpers/application_helper.rb
@@ -38,6 +38,8 @@ module ApplicationHelper @@ -38,6 +38,8 @@ module ApplicationHelper
38 38
39 include LayoutHelper 39 include LayoutHelper
40 40
  41 + include Noosfero::Gravatar
  42 +
41 def locale 43 def locale
42 (@page && !@page.language.blank?) ? @page.language : FastGettext.locale 44 (@page && !@page.language.blank?) ? @page.language : FastGettext.locale
43 end 45 end
@@ -356,8 +358,7 @@ module ApplicationHelper @@ -356,8 +358,7 @@ module ApplicationHelper
356 end 358 end
357 359
358 def theme_path 360 def theme_path
359 - if ( respond_to?(:session) && session[:theme] ) ||  
360 - ( @controller && @controller.session[:theme] ) 361 + if session[:theme]
361 '/user_themes/' + current_theme 362 '/user_themes/' + current_theme
362 else 363 else
363 '/designs/themes/' + current_theme 364 '/designs/themes/' + current_theme
@@ -367,8 +368,7 @@ module ApplicationHelper @@ -367,8 +368,7 @@ module ApplicationHelper
367 def current_theme 368 def current_theme
368 @current_theme ||= 369 @current_theme ||=
369 begin 370 begin
370 - if ( respond_to?(:session) && session[:theme] ) ||  
371 - ( @controller && @controller.session[:theme] ) 371 + if session[:theme]
372 session[:theme] 372 session[:theme]
373 else 373 else
374 # utility for developers: set the theme to 'random' in development mode and 374 # utility for developers: set the theme to 'random' in development mode and
@@ -591,28 +591,8 @@ module ApplicationHelper @@ -591,28 +591,8 @@ module ApplicationHelper
591 :class => 'vcard'), :class => 'common-profile-list-block') 591 :class => 'vcard'), :class => 'common-profile-list-block')
592 end 592 end
593 593
594 - def gravatar_url_for(email, options = {})  
595 - # Ta dando erro de roteamento  
596 - default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil  
597 - url_for( { :gravatar_id => Digest::MD5.hexdigest(email.to_s),  
598 - :host => 'www.gravatar.com',  
599 - :protocol => 'http://',  
600 - :only_path => false,  
601 - :controller => 'avatar.php',  
602 - :d => default  
603 - }.merge(options) )  
604 - end  
605 -  
606 - def str_gravatar_url_for(email, options = {})  
607 - default = theme_option['gravatar'] || NOOSFERO_CONF['gravatar'] || nil  
608 - "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s)}?" + {  
609 - :only_path => false,  
610 - :d => default  
611 - }.merge(options).map{|k,v| '%s=%s' % [ k,v ] }.join('&')  
612 - end  
613 -  
614 - def gravatar_profile_url(email)  
615 - 'http://www.gravatar.com/'+ Digest::MD5.hexdigest(email.to_s) 594 + def gravatar_default
  595 + (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar']
616 end 596 end
617 597
618 attr_reader :environment 598 attr_reader :environment
app/models/person.rb
@@ -476,6 +476,13 @@ class Person < Profile @@ -476,6 +476,13 @@ class Person < Profile
476 self.fields_privacy.nil? ? [] : self.fields_privacy.reject{ |k, v| v != 'public' }.keys.map(&:to_s) 476 self.fields_privacy.nil? ? [] : self.fields_privacy.reject{ |k, v| v != 'public' }.keys.map(&:to_s)
477 end 477 end
478 478
  479 + include Noosfero::Gravatar
  480 +
  481 + def profile_custom_icon(gravatar_default=nil)
  482 + (self.image.present? && self.image.public_filename(:icon)) ||
  483 + gravatar_profile_image_url(self.email, :size=>20, :d => gravatar_default)
  484 + end
  485 +
479 protected 486 protected
480 487
481 def followed_by?(profile) 488 def followed_by?(profile)
app/models/profile.rb
@@ -844,8 +844,10 @@ private :generate_url, :url_options @@ -844,8 +844,10 @@ private :generate_url, :url_options
844 }[amount] || _("%s members") % amount 844 }[amount] || _("%s members") % amount
845 end 845 end
846 846
847 - def profile_custom_icon  
848 - self.image.public_filename(:icon) unless self.image.blank? 847 + include Noosfero::Gravatar
  848 +
  849 + def profile_custom_icon(gravatar_default=nil)
  850 + image.public_filename(:icon) if image.present?
849 end 851 end
850 852
851 def jid(options = {}) 853 def jid(options = {})
app/models/user.rb
@@ -275,25 +275,21 @@ class User < ActiveRecord::Base @@ -275,25 +275,21 @@ class User < ActiveRecord::Base
275 end 275 end
276 end 276 end
277 277
278 - include ApplicationHelper  
279 -  
280 - def data_hash(controller=nil)  
281 - @controller ||= controller 278 + def data_hash(gravatar_default = nil)
282 friends_list = {} 279 friends_list = {}
283 enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } } 280 enterprises = person.enterprises.map { |e| { 'name' => e.short_name, 'identifier' => e.identifier } }
284 self.person.friends.online.map do |person| 281 self.person.friends.online.map do |person|
285 friends_list[person.identifier] = { 282 friends_list[person.identifier] = {
286 - 'avatar' => person.profile_custom_icon, 283 + 'avatar' => person.profile_custom_icon(gravatar_default),
287 'name' => person.short_name, 284 'name' => person.short_name,
288 'jid' => person.full_jid, 285 'jid' => person.full_jid,
289 'status' => person.user.chat_status, 286 'status' => person.user.chat_status,
290 } 287 }
291 end 288 end
292 - avatar = self.person.profile_custom_icon  
293 - avatar = str_gravatar_url_for(self.email, :size=>20) if avatar.blank? 289 +
294 { 290 {
295 'login' => self.login, 291 'login' => self.login,
296 - 'avatar' => avatar, 292 + 'avatar' => self.person.profile_custom_icon(gravatar_default),
297 'is_admin' => self.person.is_admin?, 293 'is_admin' => self.person.is_admin?,
298 'since_month' => self.person.created_at.month, 294 'since_month' => self.person.created_at.month,
299 'since_year' => self.person.created_at.year, 295 'since_year' => self.person.created_at.year,
app/views/comment/_comment.rhtml
@@ -13,11 +13,11 @@ @@ -13,11 +13,11 @@
13 <% else %> 13 <% else %>
14 <% url_image, status_class = comment.author_id ? 14 <% url_image, status_class = comment.author_id ?
15 [comment.removed_user_image, 'icon-user-removed'] : 15 [comment.removed_user_image, 'icon-user-removed'] :
16 - [str_gravatar_url_for( comment.email, :size => 50, :d=>404 ), 'icon-user-unknown'] %> 16 + [gravatar_profile_image_url( comment.email, :size => 50, :d=>404 ), 'icon-user-unknown'] %>
17 17
18 <%= link_to( 18 <%= link_to(
19 image_tag(url_image, :onerror=>'gravatarCommentFailback(this)', 19 image_tag(url_image, :onerror=>'gravatarCommentFailback(this)',
20 - 'data-gravatar'=>str_gravatar_url_for(comment.email, :size=>50)) + 20 + 'data-gravatar'=>gravatar_profile_image_url(comment.email, :size=>50)) +
21 content_tag('span', comment.author_name, :class => 'comment-info') + 21 content_tag('span', comment.author_name, :class => 'comment-info') +
22 content_tag('span', comment.message, 22 content_tag('span', comment.message,
23 :class => 'comment-user-status ' + status_class), 23 :class => 'comment-user-status ' + status_class),
app/views/profile/_comment.rhtml
@@ -16,11 +16,11 @@ @@ -16,11 +16,11 @@
16 <% else %> 16 <% else %>
17 <% url_image, status_class = comment.author_id ? 17 <% url_image, status_class = comment.author_id ?
18 [comment.removed_user_image, 'icon-user-removed'] : 18 [comment.removed_user_image, 'icon-user-removed'] :
19 - [str_gravatar_url_for( comment.email ), 'icon-user-unknown'] %> 19 + [gravatar_profile_image_url( comment.email ), 'icon-user-unknown'] %>
20 20
21 <%= link_to( 21 <%= link_to(
22 image_tag(url_image, :onerror=>'gravatarCommentFailback(this)', 22 image_tag(url_image, :onerror=>'gravatarCommentFailback(this)',
23 - 'data-gravatar'=>str_gravatar_url_for(comment.email)) + 23 + 'data-gravatar'=>gravatar_profile_image_url(comment.email)) +
24 content_tag('span', comment.author_name, :class => 'comment-info') + 24 content_tag('span', comment.author_name, :class => 'comment-info') +
25 content_tag('span', comment.message, 25 content_tag('span', comment.message,
26 :class => 'comment-user-status comment-user-status-wall ' + status_class), 26 :class => 'comment-user-status comment-user-status-wall ' + status_class),
app/views/search/_comment.rhtml
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <%# unauthenticated user: display gravatar icon %> 8 <%# unauthenticated user: display gravatar icon %>
9 <%= content_tag 'span', '&nbsp;', 9 <%= content_tag 'span', '&nbsp;',
10 :class => 'comment-picture', 10 :class => 'comment-picture',
11 - :style => 'background-image:url(%s)' % str_gravatar_url_for( comment.email, :size => 20 ) 11 + :style => 'background-image:url(%s)' % gravatar_profile_image_url( comment.email, :size => 20 )
12 %> 12 %>
13 <%- end %> 13 <%- end %>
14 <strong><%= link_to(comment.title, comment.url) %></strong> 14 <strong><%= link_to(comment.title, comment.url) %></strong>
lib/noosfero/gravatar.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +module Noosfero::Gravatar
  2 + def gravatar_profile_image_url(email, options = {})
  3 + "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.to_s)}?" + {
  4 + :only_path => false,
  5 + }.merge(options).map{|k,v| '%s=%s' % [ k,v ] }.join('&')
  6 + end
  7 +
  8 + def gravatar_profile_url(email)
  9 + 'http://www.gravatar.com/'+ Digest::MD5.hexdigest(email.to_s)
  10 + end
  11 +end
test/unit/application_helper_test.rb
@@ -466,32 +466,19 @@ class ApplicationHelperTest &lt; ActiveSupport::TestCase @@ -466,32 +466,19 @@ class ApplicationHelperTest &lt; ActiveSupport::TestCase
466 assert_match(/Community nick/, page_title) 466 assert_match(/Community nick/, page_title)
467 end 467 end
468 468
469 - should 'generate a gravatar image url' do  
470 - stubs(:environment).returns(Environment.default)  
471 - @controller = ApplicationController.new  
472 - 469 + should 'gravatar default parameter' do
  470 + profile = mock
  471 + profile.stubs(:theme).returns('some-theme')
  472 + stubs(:profile).returns(profile)
473 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do 473 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do
474 - url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 )  
475 - assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url)  
476 - assert_match(/(\?|&)gravatar_id=ed5214d4b49154ba0dc397a28ee90eb7(&|$)/, url)  
477 - assert_match(/(\?|&)d=crazyvatar(&|$)/, url)  
478 - assert_match(/(\?|&)size=50(&|$)/, url) 474 + assert_equal gravatar_default, 'crazyvatar'
479 end 475 end
480 stubs(:theme_option).returns('gravatar' => 'nicevatar') 476 stubs(:theme_option).returns('gravatar' => 'nicevatar')
481 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do 477 with_constants :NOOSFERO_CONF => {'gravatar' => 'crazyvatar'} do
482 - url = str_gravatar_url_for( 'rms@gnu.org', :size => 50 )  
483 - assert_match(/^http:\/\/www\.gravatar\.com\/avatar\.php\?/, url)  
484 - assert_match(/(\?|&)gravatar_id=ed5214d4b49154ba0dc397a28ee90eb7(&|$)/, url)  
485 - assert_match(/(\?|&)d=nicevatar(&|$)/, url)  
486 - assert_match(/(\?|&)size=50(&|$)/, url) 478 + assert_equal gravatar_default, 'nicevatar'
487 end 479 end
488 end 480 end
489 481
490 - should 'generate a gravatar profile url' do  
491 - url = gravatar_profile_url( 'rms@gnu.org' )  
492 - assert_equal('http://www.gravatar.com/ed5214d4b49154ba0dc397a28ee90eb7', url)  
493 - end  
494 -  
495 should 'use theme passed via param when in development mode' do 482 should 'use theme passed via param when in development mode' do
496 stubs(:environment).returns(Environment.new(:theme => 'environment-theme')) 483 stubs(:environment).returns(Environment.new(:theme => 'environment-theme'))
497 ENV.stubs(:[]).with('RAILS_ENV').returns('development') 484 ENV.stubs(:[]).with('RAILS_ENV').returns('development')
test/unit/gravatar_test.rb 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class GravatarTest < ActiveSupport::TestCase
  4 +
  5 + def setup
  6 + @object = Object.new
  7 + @object.extend(Noosfero::Gravatar)
  8 + end
  9 +
  10 + should 'generate a gravatar image url' do
  11 + url = @object.gravatar_profile_image_url( 'rms@gnu.org', :size => 50, :d => 'crazyvatar' )
  12 + assert_match(/^http:\/\/www\.gravatar\.com\/avatar\/ed5214d4b49154ba0dc397a28ee90eb7?/, url)
  13 + assert_match(/(\?|&)d=crazyvatar(&|$)/, url)
  14 + assert_match(/(\?|&)size=50(&|$)/, url)
  15 +
  16 + url = @object.gravatar_profile_image_url( 'rms@gnu.org', :size => 50, :d => 'nicevatar' )
  17 + assert_match(/^http:\/\/www\.gravatar\.com\/avatar\/ed5214d4b49154ba0dc397a28ee90eb7?/, url)
  18 + assert_match(/(\?|&)d=nicevatar(&|$)/, url)
  19 + assert_match(/(\?|&)size=50(&|$)/, url)
  20 + end
  21 +
  22 + should 'generate a gravatar profile url' do
  23 + url = @object.gravatar_profile_url( 'rms@gnu.org' )
  24 + assert_equal('http://www.gravatar.com/ed5214d4b49154ba0dc397a28ee90eb7', url)
  25 + end
  26 +end
test/unit/user_test.rb
@@ -336,10 +336,22 @@ class UserTest &lt; ActiveSupport::TestCase @@ -336,10 +336,22 @@ class UserTest &lt; ActiveSupport::TestCase
336 Person.any_instance.stubs(:is_admin?).returns(true) 336 Person.any_instance.stubs(:is_admin?).returns(true)
337 Person.any_instance.stubs(:created_at).returns(DateTime.parse('16-08-2010')) 337 Person.any_instance.stubs(:created_at).returns(DateTime.parse('16-08-2010'))
338 expected_hash = { 338 expected_hash = {
339 - 'login' => 'x_and_y', 'is_admin' => true, 'since_month' => 8, 'chat_enabled' => false, 'since_year' => 2010, 'email_domain' => nil, 'amount_of_friends' => 0, 339 + 'login' => 'x_and_y', 'is_admin' => true, 'since_month' => 8,
  340 + 'chat_enabled' => false, 'since_year' => 2010, 'avatar' =>
  341 + 'http://www.gravatar.com/avatar/a0517761d5125820c28d87860bc7c02e?only_path=false&d=&size=20',
  342 + 'email_domain' => nil, 'amount_of_friends' => 0,
340 'friends_list' => {}, 'enterprises' => [], 343 'friends_list' => {}, 'enterprises' => [],
341 } 344 }
342 - assert_equal expected_hash, person.user.data_hash 345 +
  346 + assert_equal expected_hash['login'], person.user.data_hash['login']
  347 + assert_equal expected_hash['is_admin'], person.user.data_hash['is_admin']
  348 + assert_equal expected_hash['since_month'], person.user.data_hash['since_month']
  349 + assert_equal expected_hash['chat_enabled'], person.user.data_hash['chat_enabled']
  350 + assert_equal expected_hash['since_year'], person.user.data_hash['since_year']
  351 + assert_equal expected_hash['avatar'], person.user.data_hash['avatar']
  352 + assert_equal expected_hash['email_domain'], person.user.data_hash['email_domain']
  353 + assert_equal expected_hash['amount_of_friends'], person.user.data_hash['amount_of_friends']
  354 + assert_equal expected_hash['friends_list'], person.user.data_hash['friends_list']
343 end 355 end
344 356
345 should "data_hash return the friends_list information" do 357 should "data_hash return the friends_list information" do