summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorCyril <jv.cyril@gmail.com>2012-12-07 04:40:42 +0100
committerCyril <jv.cyril@gmail.com>2012-12-07 04:46:29 +0100
commit045b4c8fcd3898bf66ac74acdf13cc079a104105 (patch)
treead19dca0c566e809d4db23226327a6dd3a9e6038 /lib
parent23a8e59938477be9938ed96176e8f9220ca78471 (diff)
downloadgitlab-ce-045b4c8fcd3898bf66ac74acdf13cc079a104105.tar.gz
replace user.name by user.username in GFM
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/markdown.rb43
1 files changed, 20 insertions, 23 deletions
diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb
index ee0ee05c3be..859184b6c3a 100644
--- a/lib/gitlab/markdown.rb
+++ b/lib/gitlab/markdown.rb
@@ -26,15 +26,19 @@ module Gitlab
# => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" />
module Markdown
REFERENCE_PATTERN = %r{
- (\W)? # Prefix (1)
- ( # Reference (2)
- @([\w\._]+) # User name (3)
- |[#!$](\d+) # Issue/MR/Snippet ID (4)
- |([\h]{6,40}) # Commit ID (5)
+ (?<prefix>\W)? # Prefix
+ ( # Reference
+ @(?<user>[a-zA-Z][a-zA-Z0-9_\-\.]*) # User name
+ |\#(?<issue>\d+) # Issue ID
+ |!(?<merge_request>\d+) # MR ID
+ |\$(?<snippet>\d+) # Snippet ID
+ |(?<commit>[\h]{6,40}) # Commit ID
)
- (\W)? # Suffix (6)
+ (?<suffix>\W)? # Suffix
}x.freeze
+ TYPES = [:user, :issue, :merge_request, :snippet, :commit].freeze
+
EMOJI_PATTERN = %r{(:(\S+):)}.freeze
attr_reader :html_options
@@ -95,16 +99,16 @@ module Gitlab
def parse_references(text)
# parse reference links
text.gsub!(REFERENCE_PATTERN) do |match|
- prefix = $1 || ''
- reference = $2
- identifier = $3 || $4 || $5
- suffix = $6 || ''
+ prefix = $~[:prefix]
+ suffix = $~[:suffix]
+ type = TYPES.select{|t| !$~[t].nil?}.first
+ identifier = $~[type]
# Avoid HTML entities
- if prefix.ends_with?('&') || suffix.starts_with?(';')
+ if prefix && suffix && prefix[0] == '&' && suffix[-1] == ';'
match
- elsif ref_link = reference_link(reference, identifier)
- prefix + ref_link + suffix
+ elsif ref_link = reference_link(type, identifier)
+ "#{prefix}#{ref_link}#{suffix}"
else
match
end
@@ -137,19 +141,12 @@ module Gitlab
# identifier - Object identifier (Issue ID, SHA hash, etc.)
#
# Returns string rendered by the processing method
- def reference_link(reference, identifier)
- case reference
- when /^@/ then reference_user(identifier)
- when /^#/ then reference_issue(identifier)
- when /^!/ then reference_merge_request(identifier)
- when /^\$/ then reference_snippet(identifier)
- when /^\h/ then reference_commit(identifier)
- end
+ def reference_link(type, identifier)
+ send("reference_#{type}", identifier)
end
def reference_user(identifier)
- if user = @project.users.where(name: identifier).first
- member = @project.users_projects.where(user_id: user).first
+ if member = @project.users_projects.joins(:user).where(users: { username: identifier }).first
link_to("@#{identifier}", project_team_member_path(@project, member), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member
end
end