diff --git a/app/decorators/commit_decorator.rb b/app/decorators/commit_decorator.rb index 652b41f6..69d5b178 100644 --- a/app/decorators/commit_decorator.rb +++ b/app/decorators/commit_decorator.rb @@ -47,21 +47,15 @@ class CommitDecorator < ApplicationDecorator # Otherwise it will link to the author email as specified in the commit. # # options: - # avatar: true will prepend avatar image - def author_link(options) - text = if options[:avatar] - avatar = h.image_tag h.gravatar_icon(author_email), class: "avatar s16", width: 16 - "#{avatar} #{author_name}" - else - author_name - end - team_member = @project.try(:team_member_by_name_or_email, author_name, author_email) + # avatar: true will prepend the avatar image + # size: size of the avatar image in px + def author_link(options = {}) + person_link(options.merge source: :author) + end - if team_member.nil? - h.mail_to author_email, text.html_safe, class: "commit-author-link" - else - h.link_to text, h.project_team_member_path(@project, team_member), class: "commit-author-link" - end + # Just like #author_link but for the committer. + def committer_link(options = {}) + person_link(options.merge source: :committer) end protected @@ -69,4 +63,30 @@ class CommitDecorator < ApplicationDecorator def no_commit_message "--no commit message" end + + # Private: Returns a link to a person. If the person has a matching user and + # is a member of the current @project it will link to the team member page. + # Otherwise it will link to the person email as specified in the commit. + # + # options: + # source: one of :author or :committer + # avatar: true will prepend the avatar image + # size: size of the avatar image in px + def person_link(options = {}) + source_name = send "#{options[:source]}_name".to_sym + source_email = send "#{options[:source]}_email".to_sym + text = if options[:avatar] + avatar = h.image_tag h.gravatar_icon(source_email, options[:size]), class: "avatar #{"s#{options[:size]}" if options[:size]}", width: options[:size] + %Q{#{avatar} #{source_name}} + else + source_name + end + team_member = @project.try(:team_member_by_name_or_email, source_name, source_email) + + if team_member.nil? + h.mail_to source_email, text.html_safe, class: "commit-#{options[:source]}-link" + else + h.link_to text, h.project_team_member_path(@project, team_member), class: "commit-#{options[:source]}-link" + end + end end