diff options
-rw-r--r-- | lib/redmine/acts/mentionable.rb | 19 | ||||
-rw-r--r-- | test/unit/lib/redmine/acts/mentionable_test.rb | 9 |
2 files changed, 19 insertions, 9 deletions
diff --git a/lib/redmine/acts/mentionable.rb b/lib/redmine/acts/mentionable.rb index 264d1f50b..1629bbe41 100644 --- a/lib/redmine/acts/mentionable.rb +++ b/lib/redmine/acts/mentionable.rb @@ -90,19 +90,20 @@ module Redmine content = content.gsub(%r{(~~~|```)(.*?)(~~~|```)}m, '') end - users = content.scan(MENTION_PATTERN).flatten + content.scan(MENTION_PATTERN).flatten end MENTION_PATTERN = / - (?:^|\W) # beginning of string or non-word char - @((?>[a-z0-9][a-z0-9-]*)) # @username - (?!\/) # without a trailing slash + (?:^|\W) + @([A-Za-z0-9_\-@\.]*?) (?= - \.+[ \t\W]| # dots followed by space or non-word character - \.+$| # dots at end of line - [^0-9a-zA-Z_.]| # non-word character except dot - $ # end of line - ) + (?=[[:punct:]][^A-Za-z0-9_\/])| + ,| + \.+$| + \s| + \]| + <| + $) /ix end end diff --git a/test/unit/lib/redmine/acts/mentionable_test.rb b/test/unit/lib/redmine/acts/mentionable_test.rb index 9badcd6d2..cf01c3289 100644 --- a/test/unit/lib/redmine/acts/mentionable_test.rb +++ b/test/unit/lib/redmine/acts/mentionable_test.rb @@ -34,6 +34,15 @@ class Redmine::Acts::MentionableTest < ActiveSupport::TestCase assert_equal [User.find(3)], issue.mentioned_users end + def test_mentioned_users_with_user_mention_having_mail_as_login + user = User.generate!(login: "foo@example.net") + User.add_to_project(user, Project.find(1), Role.find(1)) + + issue = Issue.generate!(project_id: 1, description: '@dlopper and @foo@example.net') + + assert_equal [User.find(3), user], issue.mentioned_users + end + def test_mentioned_users_with_multiple_mentions issue = Issue.generate!(project_id: 1, description: 'Hello @dlopper, @jsmith.') |