diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-04-20 12:42:31 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-04-20 12:42:31 +0000 |
commit | a4006a6b4840c990adf5293d7c611b2fa798a5bf (patch) | |
tree | 4c4df25558f8b35880adb2cf538e92d594d154e0 /app/models | |
parent | d9f7499046f25dcbe69c50cb819315e69c0bf213 (diff) | |
parent | 630e879066156e8593a8b42b531ef727227c60bf (diff) | |
download | gitlab-ce-a4006a6b4840c990adf5293d7c611b2fa798a5bf.tar.gz |
Merge branch 'better-commit-mentions' into 'master'
Clean up code around commit mentions.
Builds upon !527.
See merge request !528
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/commit.rb | 19 | ||||
-rw-r--r-- | app/models/concerns/issuable.rb | 8 | ||||
-rw-r--r-- | app/models/concerns/mentionable.rb | 4 | ||||
-rw-r--r-- | app/models/note.rb | 8 | ||||
-rw-r--r-- | app/models/snippet.rb | 12 |
5 files changed, 37 insertions, 14 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb index 006fa62c8f9..1cabc060c2a 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -134,6 +134,25 @@ class Commit User.find_for_commit(committer_email, committer_name) end + def participants(project, current_user = nil) + users = [] + users << author + users << committer + + users.push *self.mentioned_users(current_user, project) + + notes(project).each do |note| + users << note.author + users.push *note.mentioned_users(current_user, project) + end + + users.uniq + end + + def notes(project) + project.notes.for_commit_id(self.id) + end + def method_missing(m, *args, &block) @raw.send(m, *args, &block) end diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 478134dff68..a21d9bdfe8a 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -122,15 +122,15 @@ module Issuable users = [] users << author users << assignee if is_assigned? - mentions = [] - mentions << self.mentioned_users(current_user) + + users.push *self.mentioned_users(current_user) notes.each do |note| users << note.author - mentions << note.mentioned_users(current_user) + users.push *note.mentioned_users(current_user) end - users.concat(mentions.reduce([], :|)).uniq + users.uniq end def subscribed?(user) diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index b7882a2bb16..acd9a1edc48 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -42,10 +42,10 @@ module Mentionable Note.cross_reference_exists?(target, local_reference) end - def mentioned_users(current_user = nil) + def mentioned_users(current_user = nil, p = project) return [] if mentionable_text.blank? - ext = Gitlab::ReferenceExtractor.new(self.project, current_user) + ext = Gitlab::ReferenceExtractor.new(p, current_user) ext.analyze(mentionable_text) ext.users.uniq end diff --git a/app/models/note.rb b/app/models/note.rb index 2cf3fac2def..4b5fa7a2ab5 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -327,14 +327,6 @@ class Note < ActiveRecord::Base current_application_settings.max_attachment_size.megabytes.to_i end - def commit_author - @commit_author ||= - project.team.users.find_by(email: noteable.author_email) || - project.team.users.find_by(name: noteable.author_name) - rescue - nil - end - def cross_reference? note.start_with?(self.class.cross_reference_note_prefix) end diff --git a/app/models/snippet.rb b/app/models/snippet.rb index b35e72c4bdb..c11c28805eb 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -87,6 +87,18 @@ class Snippet < ActiveRecord::Base visibility_level end + def participants(current_user = self.author) + users = [] + users << author + + notes.each do |note| + users << note.author + users.push *note.mentioned_users(current_user) + end + + users.uniq + end + class << self def search(query) where('(title LIKE :query OR file_name LIKE :query)', query: "%#{query}%") |