Commit c78359a8 authored by Riyad Preukschas's avatar Riyad Preukschas

Generalize CommitDecorator#author_link to #person_link

parent 17cec050
...@@ -47,21 +47,15 @@ class CommitDecorator < ApplicationDecorator ...@@ -47,21 +47,15 @@ class CommitDecorator < ApplicationDecorator
# Otherwise it will link to the author email as specified in the commit. # Otherwise it will link to the author email as specified in the commit.
# #
# options: # options:
# avatar: true will prepend avatar image # avatar: true will prepend the avatar image
def author_link(options) # size: size of the avatar image in px
text = if options[:avatar] def author_link(options = {})
avatar = h.image_tag h.gravatar_icon(author_email), class: "avatar s16", width: 16 person_link(options.merge source: :author)
"#{avatar} #{author_name}" end
else
author_name
end
team_member = @project.try(:team_member_by_name_or_email, author_name, author_email)
if team_member.nil? # Just like #author_link but for the committer.
h.mail_to author_email, text.html_safe, class: "commit-author-link" def committer_link(options = {})
else person_link(options.merge source: :committer)
h.link_to text, h.project_team_member_path(@project, team_member), class: "commit-author-link"
end
end end
protected protected
...@@ -69,4 +63,30 @@ class CommitDecorator < ApplicationDecorator ...@@ -69,4 +63,30 @@ class CommitDecorator < ApplicationDecorator
def no_commit_message def no_commit_message
"--no commit message" "--no commit message"
end 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} <span class="commit-#{options[:source]}-name">#{source_name}</span>}
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 end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment