From 717faee79a87868cca4add5dc889fe9edd542d86 Mon Sep 17 00:00:00 2001 From: blackfoks Date: Tue, 28 Aug 2012 14:52:19 +0700 Subject: [PATCH] Add gravatars to comments --- app/assets/stylesheets/errbit.css | 3 +++ app/helpers/errs_helper.rb | 12 ++++++++++++ app/views/errs/show.html.haml | 2 ++ spec/helpers/errs_helper_spec.rb | 39 +++++++++++++++++++++++++++++++++++++++ spec/views/errs/show.html.haml_spec.rb | 3 +++ 5 files changed, 59 insertions(+), 0 deletions(-) diff --git a/app/assets/stylesheets/errbit.css b/app/assets/stylesheets/errbit.css index 4623841..46bea72 100644 --- a/app/assets/stylesheets/errbit.css +++ b/app/assets/stylesheets/errbit.css @@ -841,6 +841,9 @@ table.comment tbody th { height: 20px; line-height: 0.5em; } +table.comment tbody th img { + float: right; +} table.comment tbody td { background-color: #F9F9F9; } diff --git a/app/helpers/errs_helper.rb b/app/helpers/errs_helper.rb index 210fd64..7cbf79c 100644 --- a/app/helpers/errs_helper.rb +++ b/app/helpers/errs_helper.rb @@ -13,5 +13,17 @@ module ErrsHelper truncate(msg, :length => 300).scan(/.{1,5}/).map { |s| h(s) }.join("​").html_safe end end + + def gravatar_tag(email, options = {}) + default_options = { + :s => Errbit::Config.gravatar_size, + :d => Errbit::Config.gravatar_default, + :alt => email + } + options.reverse_merge! default_options + params = options.extract!(:s, :d).delete_if { |k, v| v.blank? } + email_hash = Digest::MD5.hexdigest(email) + image_tag "http://www.gravatar.com/avatar/#{email_hash}?#{params.to_query}", options + end end diff --git a/app/views/errs/show.html.haml b/app/views/errs/show.html.haml index e079878..c127e67 100644 --- a/app/views/errs/show.html.haml +++ b/app/views/errs/show.html.haml @@ -31,6 +31,8 @@ %span= link_to '✘'.html_safe, app_err_comment_path(@app, @problem, comment), :method => :delete, :data => { :confirm => "Are sure you don't need this comment?" }, :class => "destroy-comment" = time_ago_in_words(comment.created_at, true) << " ago by " = link_to comment.user.email, user_path(comment.user) + - if Errbit::Config.use_gravatar + = gravatar_tag comment.user.email %tr %td= comment.body.gsub("\n", "
").html_safe - if Errbit::Config.allow_comments_with_issue_tracker || !@app.issue_tracker_configured? diff --git a/spec/helpers/errs_helper_spec.rb b/spec/helpers/errs_helper_spec.rb index 2eaa921..3f71084 100644 --- a/spec/helpers/errs_helper_spec.rb +++ b/spec/helpers/errs_helper_spec.rb @@ -9,4 +9,43 @@ describe ErrsHelper do truncated.should_not include('<', '>') end end + + describe "#gravatar_tag" do + let(:email) { "gravatar@example.com" } + let(:email_hash) { Digest::MD5.hexdigest email } + let(:base_url) { "http://www.gravatar.com/avatar/#{email_hash}" } + + context "default config" do + before do + Errbit::Config.stub(:use_gravatar).and_return(true) + Errbit::Config.stub(:gravatar_size).and_return(48) + Errbit::Config.stub(:gravatar_default).and_return('identicon') + end + + it "should render image_tag with correct alt and src" do + expected = "\"#{email}\"" + helper.gravatar_tag(email).should eq(expected) + end + + it "should override :s" do + expected = "\"#{email}\"" + helper.gravatar_tag(email, :s => 64).should eq(expected) + end + + it "should override :d" do + expected = "\"#{email}\"" + helper.gravatar_tag(email, :d => 'retro').should eq(expected) + end + + it "should override alt" do + expected = "\"gravatar\"" + helper.gravatar_tag(email, :alt => 'gravatar').should eq(expected) + end + + it "should pass other options to image_tag" do + expected = "\"#{email}\"" + helper.gravatar_tag(email, :align => :left).should eq(expected) + end + end + end end diff --git a/spec/views/errs/show.html.haml_spec.rb b/spec/views/errs/show.html.haml_spec.rb index 69c4b73..4f00bcc 100644 --- a/spec/views/errs/show.html.haml_spec.rb +++ b/spec/views/errs/show.html.haml_spec.rb @@ -90,6 +90,7 @@ describe "errs/show.html.haml" do describe "content_for :comments with comments disabled for configured issue tracker" do before do Errbit::Config.stub(:allow_comments_with_issue_tracker).and_return(false) + Errbit::Config.stub(:use_gravatar).and_return(true) end it 'should display comments and new comment form when no issue tracker' do @@ -99,6 +100,7 @@ describe "errs/show.html.haml" do render view.content_for(:comments).should include('Test comment') + view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]') view.content_for(:comments).should include('Add a comment') end @@ -117,6 +119,7 @@ describe "errs/show.html.haml" do render view.content_for(:comments).should include('Test comment') + view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]') view.content_for(:comments).should_not include('Add a comment') end end -- libgit2 0.21.2