Commit 045b4c8fcd3898bf66ac74acdf13cc079a104105
1 parent
23a8e599
Exists in
master
and in
4 other branches
replace user.name by user.username in GFM
Showing
3 changed files
with
34 additions
and
37 deletions
Show diff stats
lib/gitlab/markdown.rb
... | ... | @@ -26,15 +26,19 @@ module Gitlab |
26 | 26 | # => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" /> |
27 | 27 | module Markdown |
28 | 28 | REFERENCE_PATTERN = %r{ |
29 | - (\W)? # Prefix (1) | |
30 | - ( # Reference (2) | |
31 | - @([\w\._]+) # User name (3) | |
32 | - |[#!$](\d+) # Issue/MR/Snippet ID (4) | |
33 | - |([\h]{6,40}) # Commit ID (5) | |
29 | + (?<prefix>\W)? # Prefix | |
30 | + ( # Reference | |
31 | + @(?<user>[a-zA-Z][a-zA-Z0-9_\-\.]*) # User name | |
32 | + |\#(?<issue>\d+) # Issue ID | |
33 | + |!(?<merge_request>\d+) # MR ID | |
34 | + |\$(?<snippet>\d+) # Snippet ID | |
35 | + |(?<commit>[\h]{6,40}) # Commit ID | |
34 | 36 | ) |
35 | - (\W)? # Suffix (6) | |
37 | + (?<suffix>\W)? # Suffix | |
36 | 38 | }x.freeze |
37 | 39 | |
40 | + TYPES = [:user, :issue, :merge_request, :snippet, :commit].freeze | |
41 | + | |
38 | 42 | EMOJI_PATTERN = %r{(:(\S+):)}.freeze |
39 | 43 | |
40 | 44 | attr_reader :html_options |
... | ... | @@ -95,16 +99,16 @@ module Gitlab |
95 | 99 | def parse_references(text) |
96 | 100 | # parse reference links |
97 | 101 | text.gsub!(REFERENCE_PATTERN) do |match| |
98 | - prefix = $1 || '' | |
99 | - reference = $2 | |
100 | - identifier = $3 || $4 || $5 | |
101 | - suffix = $6 || '' | |
102 | + prefix = $~[:prefix] | |
103 | + suffix = $~[:suffix] | |
104 | + type = TYPES.select{|t| !$~[t].nil?}.first | |
105 | + identifier = $~[type] | |
102 | 106 | |
103 | 107 | # Avoid HTML entities |
104 | - if prefix.ends_with?('&') || suffix.starts_with?(';') | |
108 | + if prefix && suffix && prefix[0] == '&' && suffix[-1] == ';' | |
105 | 109 | match |
106 | - elsif ref_link = reference_link(reference, identifier) | |
107 | - prefix + ref_link + suffix | |
110 | + elsif ref_link = reference_link(type, identifier) | |
111 | + "#{prefix}#{ref_link}#{suffix}" | |
108 | 112 | else |
109 | 113 | match |
110 | 114 | end |
... | ... | @@ -137,19 +141,12 @@ module Gitlab |
137 | 141 | # identifier - Object identifier (Issue ID, SHA hash, etc.) |
138 | 142 | # |
139 | 143 | # Returns string rendered by the processing method |
140 | - def reference_link(reference, identifier) | |
141 | - case reference | |
142 | - when /^@/ then reference_user(identifier) | |
143 | - when /^#/ then reference_issue(identifier) | |
144 | - when /^!/ then reference_merge_request(identifier) | |
145 | - when /^\$/ then reference_snippet(identifier) | |
146 | - when /^\h/ then reference_commit(identifier) | |
147 | - end | |
144 | + def reference_link(type, identifier) | |
145 | + send("reference_#{type}", identifier) | |
148 | 146 | end |
149 | 147 | |
150 | 148 | def reference_user(identifier) |
151 | - if user = @project.users.where(name: identifier).first | |
152 | - member = @project.users_projects.where(user_id: user).first | |
149 | + if member = @project.users_projects.joins(:user).where(users: { username: identifier }).first | |
153 | 150 | link_to("@#{identifier}", project_team_member_path(@project, member), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}")) if member |
154 | 151 | end |
155 | 152 | end | ... | ... |
spec/helpers/gitlab_markdown_helper_spec.rb
... | ... | @@ -3,7 +3,7 @@ require "spec_helper" |
3 | 3 | describe GitlabMarkdownHelper do |
4 | 4 | let!(:project) { create(:project) } |
5 | 5 | |
6 | - let(:user) { create(:user, name: 'gfm') } | |
6 | + let(:user) { create(:user, username: 'gfm') } | |
7 | 7 | let(:commit) { CommitDecorator.decorate(project.commit) } |
8 | 8 | let(:issue) { create(:issue, project: project) } |
9 | 9 | let(:merge_request) { create(:merge_request, project: project) } |
... | ... | @@ -81,7 +81,7 @@ describe GitlabMarkdownHelper do |
81 | 81 | end |
82 | 82 | |
83 | 83 | describe "referencing a team member" do |
84 | - let(:actual) { "@#{user.name} you are right." } | |
84 | + let(:actual) { "@#{user.username} you are right." } | |
85 | 85 | let(:expected) { project_team_member_path(project, member) } |
86 | 86 | |
87 | 87 | before do |
... | ... | @@ -103,18 +103,18 @@ describe GitlabMarkdownHelper do |
103 | 103 | end |
104 | 104 | |
105 | 105 | it "should link with adjacent text" do |
106 | - actual = "Mail the admin (@gfm)" | |
106 | + actual = "Mail the admin (@#{user.username})" | |
107 | 107 | gfm(actual).should match(expected) |
108 | 108 | end |
109 | 109 | |
110 | 110 | it "should keep whitespace intact" do |
111 | - actual = "Yes, @#{user.name} is right." | |
112 | - expected = /Yes, <a.+>@#{user.name}<\/a> is right/ | |
111 | + actual = "Yes, @#{user.username} is right." | |
112 | + expected = /Yes, <a.+>@#{user.username}<\/a> is right/ | |
113 | 113 | gfm(actual).should match(expected) |
114 | 114 | end |
115 | 115 | |
116 | 116 | it "should not link with an invalid id" do |
117 | - actual = expected = "@#{user.name.reverse} you are right." | |
117 | + actual = expected = "@#{user.username.reverse} you are right." | |
118 | 118 | gfm(actual).should == expected |
119 | 119 | end |
120 | 120 | |
... | ... | @@ -316,10 +316,10 @@ describe GitlabMarkdownHelper do |
316 | 316 | it "should handle references in lists" do |
317 | 317 | project.users << user |
318 | 318 | |
319 | - actual = "\n* dark: ##{issue.id}\n* light by @#{member.user_name}" | |
319 | + actual = "\n* dark: ##{issue.id}\n* light by @#{member.user.username}" | |
320 | 320 | |
321 | 321 | markdown(actual).should match(%r{<li>dark: <a.+>##{issue.id}</a></li>}) |
322 | - markdown(actual).should match(%r{<li>light by <a.+>@#{member.user_name}</a></li>}) | |
322 | + markdown(actual).should match(%r{<li>light by <a.+>@#{member.user.username}</a></li>}) | |
323 | 323 | end |
324 | 324 | |
325 | 325 | it "should handle references in <em>" do | ... | ... |
spec/requests/gitlab_flavored_markdown_spec.rb
... | ... | @@ -19,7 +19,7 @@ describe "Gitlab Flavored Markdown" do |
19 | 19 | @test_file = "gfm_test_file" |
20 | 20 | i.add(@test_file, "foo\nbar\n") |
21 | 21 | # add commit with gfm |
22 | - i.commit("fix ##{issue.id}\n\nask @#{fred.name} for details", head: @branch_name) | |
22 | + i.commit("fix ##{issue.id}\n\nask @#{fred.username} for details", head: @branch_name) | |
23 | 23 | |
24 | 24 | # add test tag |
25 | 25 | @tag_name = "gfm-test-tag" |
... | ... | @@ -56,7 +56,7 @@ describe "Gitlab Flavored Markdown" do |
56 | 56 | it "should render description in commits#show" do |
57 | 57 | visit project_commit_path(project, commit) |
58 | 58 | |
59 | - page.should have_link("@#{fred.name}") | |
59 | + page.should have_link("@#{fred.username}") | |
60 | 60 | end |
61 | 61 | |
62 | 62 | it "should render title in refs#tree", js: true do |
... | ... | @@ -93,7 +93,7 @@ describe "Gitlab Flavored Markdown" do |
93 | 93 | assignee: @user, |
94 | 94 | project: project, |
95 | 95 | title: "fix ##{@other_issue.id}", |
96 | - description: "ask @#{fred.name} for details") | |
96 | + description: "ask @#{fred.username} for details") | |
97 | 97 | end |
98 | 98 | |
99 | 99 | it "should render subject in issues#index" do |
... | ... | @@ -111,7 +111,7 @@ describe "Gitlab Flavored Markdown" do |
111 | 111 | it "should render details in issues#show" do |
112 | 112 | visit project_issue_path(project, @issue) |
113 | 113 | |
114 | - page.should have_link("@#{fred.name}") | |
114 | + page.should have_link("@#{fred.username}") | |
115 | 115 | end |
116 | 116 | end |
117 | 117 | |
... | ... | @@ -142,7 +142,7 @@ describe "Gitlab Flavored Markdown" do |
142 | 142 | @milestone = create(:milestone, |
143 | 143 | project: project, |
144 | 144 | title: "fix ##{issue.id}", |
145 | - description: "ask @#{fred.name} for details") | |
145 | + description: "ask @#{fred.username} for details") | |
146 | 146 | end |
147 | 147 | |
148 | 148 | it "should render title in milestones#index" do |
... | ... | @@ -160,7 +160,7 @@ describe "Gitlab Flavored Markdown" do |
160 | 160 | it "should render description in milestones#show" do |
161 | 161 | visit project_milestone_path(project, @milestone) |
162 | 162 | |
163 | - page.should have_link("@#{fred.name}") | |
163 | + page.should have_link("@#{fred.username}") | |
164 | 164 | end |
165 | 165 | end |
166 | 166 | ... | ... |