Commit b598154cc1462d78905fa2afd2584d764ff3c599
Exists in
master
and in
1 other branch
Merge pull request #232 from BlackFoks/add_gravatars
Gravatars
Showing
7 changed files
with
70 additions
and
0 deletions
Show diff stats
app/assets/stylesheets/errbit.css
@@ -841,6 +841,9 @@ table.comment tbody th { | @@ -841,6 +841,9 @@ table.comment tbody th { | ||
841 | height: 20px; | 841 | height: 20px; |
842 | line-height: 0.5em; | 842 | line-height: 0.5em; |
843 | } | 843 | } |
844 | +table.comment tbody th img { | ||
845 | + float: right; | ||
846 | +} | ||
844 | table.comment tbody td { | 847 | table.comment tbody td { |
845 | background-color: #F9F9F9; | 848 | background-color: #F9F9F9; |
846 | } | 849 | } |
app/helpers/errs_helper.rb
@@ -13,5 +13,17 @@ module ErrsHelper | @@ -13,5 +13,17 @@ module ErrsHelper | ||
13 | truncate(msg, :length => 300).scan(/.{1,5}/).map { |s| h(s) }.join("​").html_safe | 13 | truncate(msg, :length => 300).scan(/.{1,5}/).map { |s| h(s) }.join("​").html_safe |
14 | end | 14 | end |
15 | end | 15 | end |
16 | + | ||
17 | + def gravatar_tag(email, options = {}) | ||
18 | + default_options = { | ||
19 | + :s => Errbit::Config.gravatar_size, | ||
20 | + :d => Errbit::Config.gravatar_default, | ||
21 | + :alt => email | ||
22 | + } | ||
23 | + options.reverse_merge! default_options | ||
24 | + params = options.extract!(:s, :d).delete_if { |k, v| v.blank? } | ||
25 | + email_hash = Digest::MD5.hexdigest(email) | ||
26 | + image_tag "http://www.gravatar.com/avatar/#{email_hash}?#{params.to_query}", options | ||
27 | + end | ||
16 | end | 28 | end |
17 | 29 |
app/views/errs/show.html.haml
@@ -31,6 +31,8 @@ | @@ -31,6 +31,8 @@ | ||
31 | %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" | 31 | %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" |
32 | = time_ago_in_words(comment.created_at, true) << " ago by " | 32 | = time_ago_in_words(comment.created_at, true) << " ago by " |
33 | = link_to comment.user.email, user_path(comment.user) | 33 | = link_to comment.user.email, user_path(comment.user) |
34 | + - if Errbit::Config.use_gravatar | ||
35 | + = gravatar_tag comment.user.email | ||
34 | %tr | 36 | %tr |
35 | %td= comment.body.gsub("\n", "<br>").html_safe | 37 | %td= comment.body.gsub("\n", "<br>").html_safe |
36 | - if Errbit::Config.allow_comments_with_issue_tracker || !@app.issue_tracker_configured? | 38 | - if Errbit::Config.allow_comments_with_issue_tracker || !@app.issue_tracker_configured? |
config/config.example.yml
@@ -39,6 +39,13 @@ user_has_username: false | @@ -39,6 +39,13 @@ user_has_username: false | ||
39 | # but you want to leave a short comment. | 39 | # but you want to leave a short comment. |
40 | allow_comments_with_issue_tracker: true | 40 | allow_comments_with_issue_tracker: true |
41 | 41 | ||
42 | +# Enable Gravatar. | ||
43 | +use_gravatar: false | ||
44 | +# Default Gravatar size. | ||
45 | +gravatar_size: 40 | ||
46 | +# Default Gravatar image, can be: mm, identicon, monsterid, wavatar, retro. | ||
47 | +gravatar_default: identicon | ||
48 | + | ||
42 | # Setup your deploy options for capistrano. | 49 | # Setup your deploy options for capistrano. |
43 | deployment: | 50 | deployment: |
44 | hosts: | 51 | hosts: |
config/initializers/_load_config.rb
@@ -14,6 +14,10 @@ unless defined?(Errbit::Config) | @@ -14,6 +14,10 @@ unless defined?(Errbit::Config) | ||
14 | Errbit::Config.user_has_username = ENV['ERRBIT_USER_HAS_USERNAME'] | 14 | Errbit::Config.user_has_username = ENV['ERRBIT_USER_HAS_USERNAME'] |
15 | Errbit::Config.allow_comments_with_issue_tracker = ENV['ERRBIT_ALLOW_COMMENTS_WITH_ISSUE_TRACKER'] | 15 | Errbit::Config.allow_comments_with_issue_tracker = ENV['ERRBIT_ALLOW_COMMENTS_WITH_ISSUE_TRACKER'] |
16 | 16 | ||
17 | + Errbit::Config.use_gravatar = ENV['ERRBIT_USE_GRAVATAR'] | ||
18 | + Errbit::Config.gravatar_size = ENV['ERRBIT_GRAVATAR_SIZE'] | ||
19 | + Errbit::Config.gravatar_default = ENV['ERRBIT_GRAVATAR_DEFAULT'] | ||
20 | + | ||
17 | Errbit::Config.github_authentication = ENV['GITHUB_AUTHENTICATION'] | 21 | Errbit::Config.github_authentication = ENV['GITHUB_AUTHENTICATION'] |
18 | Errbit::Config.github_client_id = ENV['GITHUB_CLIENT_ID'] | 22 | Errbit::Config.github_client_id = ENV['GITHUB_CLIENT_ID'] |
19 | Errbit::Config.github_secret = ENV['GITHUB_SECRET'] | 23 | Errbit::Config.github_secret = ENV['GITHUB_SECRET'] |
spec/helpers/errs_helper_spec.rb
@@ -9,4 +9,43 @@ describe ErrsHelper do | @@ -9,4 +9,43 @@ describe ErrsHelper do | ||
9 | truncated.should_not include('<', '>') | 9 | truncated.should_not include('<', '>') |
10 | end | 10 | end |
11 | end | 11 | end |
12 | + | ||
13 | + describe "#gravatar_tag" do | ||
14 | + let(:email) { "gravatar@example.com" } | ||
15 | + let(:email_hash) { Digest::MD5.hexdigest email } | ||
16 | + let(:base_url) { "http://www.gravatar.com/avatar/#{email_hash}" } | ||
17 | + | ||
18 | + context "default config" do | ||
19 | + before do | ||
20 | + Errbit::Config.stub(:use_gravatar).and_return(true) | ||
21 | + Errbit::Config.stub(:gravatar_size).and_return(48) | ||
22 | + Errbit::Config.stub(:gravatar_default).and_return('identicon') | ||
23 | + end | ||
24 | + | ||
25 | + it "should render image_tag with correct alt and src" do | ||
26 | + expected = "<img alt=\"#{email}\" src=\"#{base_url}?d=identicon&s=48\" />" | ||
27 | + helper.gravatar_tag(email).should eq(expected) | ||
28 | + end | ||
29 | + | ||
30 | + it "should override :s" do | ||
31 | + expected = "<img alt=\"#{email}\" src=\"#{base_url}?d=identicon&s=64\" />" | ||
32 | + helper.gravatar_tag(email, :s => 64).should eq(expected) | ||
33 | + end | ||
34 | + | ||
35 | + it "should override :d" do | ||
36 | + expected = "<img alt=\"#{email}\" src=\"#{base_url}?d=retro&s=48\" />" | ||
37 | + helper.gravatar_tag(email, :d => 'retro').should eq(expected) | ||
38 | + end | ||
39 | + | ||
40 | + it "should override alt" do | ||
41 | + expected = "<img alt=\"gravatar\" src=\"#{base_url}?d=identicon&s=48\" />" | ||
42 | + helper.gravatar_tag(email, :alt => 'gravatar').should eq(expected) | ||
43 | + end | ||
44 | + | ||
45 | + it "should pass other options to image_tag" do | ||
46 | + expected = "<img align=\"left\" alt=\"#{email}\" src=\"#{base_url}?d=identicon&s=48\" />" | ||
47 | + helper.gravatar_tag(email, :align => :left).should eq(expected) | ||
48 | + end | ||
49 | + end | ||
50 | + end | ||
12 | end | 51 | end |
spec/views/errs/show.html.haml_spec.rb
@@ -90,6 +90,7 @@ describe "errs/show.html.haml" do | @@ -90,6 +90,7 @@ describe "errs/show.html.haml" do | ||
90 | describe "content_for :comments with comments disabled for configured issue tracker" do | 90 | describe "content_for :comments with comments disabled for configured issue tracker" do |
91 | before do | 91 | before do |
92 | Errbit::Config.stub(:allow_comments_with_issue_tracker).and_return(false) | 92 | Errbit::Config.stub(:allow_comments_with_issue_tracker).and_return(false) |
93 | + Errbit::Config.stub(:use_gravatar).and_return(true) | ||
93 | end | 94 | end |
94 | 95 | ||
95 | it 'should display comments and new comment form when no issue tracker' do | 96 | it 'should display comments and new comment form when no issue tracker' do |
@@ -99,6 +100,7 @@ describe "errs/show.html.haml" do | @@ -99,6 +100,7 @@ describe "errs/show.html.haml" do | ||
99 | render | 100 | render |
100 | 101 | ||
101 | view.content_for(:comments).should include('Test comment') | 102 | view.content_for(:comments).should include('Test comment') |
103 | + view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]') | ||
102 | view.content_for(:comments).should include('Add a comment') | 104 | view.content_for(:comments).should include('Add a comment') |
103 | end | 105 | end |
104 | 106 | ||
@@ -117,6 +119,7 @@ describe "errs/show.html.haml" do | @@ -117,6 +119,7 @@ describe "errs/show.html.haml" do | ||
117 | render | 119 | render |
118 | 120 | ||
119 | view.content_for(:comments).should include('Test comment') | 121 | view.content_for(:comments).should include('Test comment') |
122 | + view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]') | ||
120 | view.content_for(:comments).should_not include('Add a comment') | 123 | view.content_for(:comments).should_not include('Add a comment') |
121 | end | 124 | end |
122 | end | 125 | end |