Merge branch 'cleanup-mentionable-methods-arguments' into 'master'
Simplify Mentionable concern instance methods ## What does this MR do? Simplify arguments received by the instance methods on the concern so in the closer future will be easy to understand and change ## Are there points in the code the reviewer needs to double check? ## Why was this MR needed? ## Screenshots (if relevant) ## Does this MR meet the acceptance criteria? - [ ] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [ ] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md) - [ ] API support added - Tests - [ ] Added for this feature/bug - [ ] All builds are passing - [ ] Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html) - [ ] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [ ] Branch has no merge conflicts with `master` (if you do - rebase it please) - [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) ## What are the relevant issue numbers? See merge request !6596
This commit is contained in:
commit
5042f008ed
6 changed files with 31 additions and 27 deletions
|
@ -11,6 +11,7 @@ v 8.13.0 (unreleased)
|
|||
- Log LDAP lookup errors and don't swallow unrelated exceptions. !6103 (Markus Koller)
|
||||
- Add more tests for calendar contribution (ClemMakesApps)
|
||||
- Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references
|
||||
- Simplify Mentionable concern instance methods
|
||||
- Fix permission for setting an issue's due date
|
||||
- Expose expires_at field when sharing project on API
|
||||
- Fix issue with page scrolling to top when closing or pinning sidebar (lukehowell)
|
||||
|
|
|
@ -43,19 +43,15 @@ module Mentionable
|
|||
self
|
||||
end
|
||||
|
||||
def all_references(current_user = nil, text = nil, extractor: nil)
|
||||
def all_references(current_user = nil, extractor: nil)
|
||||
extractor ||= Gitlab::ReferenceExtractor.
|
||||
new(project, current_user)
|
||||
|
||||
if text
|
||||
extractor.analyze(text, author: author)
|
||||
else
|
||||
self.class.mentionable_attrs.each do |attr, options|
|
||||
text = __send__(attr)
|
||||
options = options.merge(cache_key: [self, attr], author: author)
|
||||
self.class.mentionable_attrs.each do |attr, options|
|
||||
text = __send__(attr)
|
||||
options = options.merge(cache_key: [self, attr], author: author)
|
||||
|
||||
extractor.analyze(text, options)
|
||||
end
|
||||
extractor.analyze(text, options)
|
||||
end
|
||||
|
||||
extractor
|
||||
|
@ -66,8 +62,8 @@ module Mentionable
|
|||
end
|
||||
|
||||
# Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference.
|
||||
def referenced_mentionables(current_user = self.author, text = nil)
|
||||
refs = all_references(current_user, text)
|
||||
def referenced_mentionables(current_user = self.author)
|
||||
refs = all_references(current_user)
|
||||
refs = (refs.issues + refs.merge_requests + refs.commits)
|
||||
|
||||
# We're using this method instead of Array diffing because that requires
|
||||
|
@ -77,8 +73,8 @@ module Mentionable
|
|||
end
|
||||
|
||||
# Create a cross-reference Note for each GFM reference to another Mentionable found in the +mentionable_attrs+.
|
||||
def create_cross_references!(author = self.author, without = [], text = nil)
|
||||
refs = referenced_mentionables(author, text)
|
||||
def create_cross_references!(author = self.author, without = [])
|
||||
refs = referenced_mentionables(author)
|
||||
|
||||
# We're using this method instead of Array diffing because that requires
|
||||
# both of the object's `hash` values to be the same, which may not be the
|
||||
|
@ -97,10 +93,7 @@ module Mentionable
|
|||
|
||||
return if changes.empty?
|
||||
|
||||
original_text = changes.collect { |_, vals| vals.first }.join(' ')
|
||||
|
||||
preexisting = referenced_mentionables(author, original_text)
|
||||
create_cross_references!(author, preexisting)
|
||||
create_cross_references!(author)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -347,7 +347,7 @@ module SystemNoteService
|
|||
notes = notes.where(noteable_id: noteable.id)
|
||||
end
|
||||
|
||||
notes_for_mentioner(mentioner, noteable, notes).count > 0
|
||||
notes_for_mentioner(mentioner, noteable, notes).exists?
|
||||
end
|
||||
|
||||
# Build an Array of lines detailing each commit added in a merge request
|
||||
|
|
|
@ -1,18 +1,27 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Mentionable do
|
||||
include Mentionable
|
||||
class Example
|
||||
include Mentionable
|
||||
|
||||
def author
|
||||
nil
|
||||
attr_accessor :project, :message
|
||||
attr_mentionable :message
|
||||
|
||||
def author
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
describe 'references' do
|
||||
let(:project) { create(:project) }
|
||||
let(:mentionable) { Example.new }
|
||||
|
||||
it 'excludes JIRA references' do
|
||||
allow(project).to receive_messages(jira_tracker?: true)
|
||||
expect(referenced_mentionables(project, 'JIRA-123')).to be_empty
|
||||
|
||||
mentionable.project = project
|
||||
mentionable.message = 'JIRA-123'
|
||||
expect(mentionable.referenced_mentionables).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -39,9 +48,8 @@ describe Issue, "Mentionable" do
|
|||
let(:user) { create(:user) }
|
||||
|
||||
def referenced_issues(current_user)
|
||||
text = "#{private_issue.to_reference(project)} and #{public_issue.to_reference}"
|
||||
|
||||
issue.referenced_mentionables(current_user, text)
|
||||
issue.title = "#{private_issue.to_reference(project)} and #{public_issue.to_reference}"
|
||||
issue.referenced_mentionables(current_user)
|
||||
end
|
||||
|
||||
context 'when the current user can see the issue' do
|
||||
|
|
|
@ -522,7 +522,7 @@ describe MergeRequest, models: true do
|
|||
end
|
||||
|
||||
it_behaves_like 'an editable mentionable' do
|
||||
subject { create(:merge_request) }
|
||||
subject { create(:merge_request, :simple) }
|
||||
|
||||
let(:backref_text) { "merge request #{subject.to_reference}" }
|
||||
let(:set_mentionable_text) { ->(txt){ subject.description = txt } }
|
||||
|
|
|
@ -9,7 +9,7 @@ shared_context 'mentionable context' do
|
|||
let(:author) { subject.author }
|
||||
|
||||
let(:mentioned_issue) { create(:issue, project: project) }
|
||||
let!(:mentioned_mr) { create(:merge_request, :simple, source_project: project) }
|
||||
let!(:mentioned_mr) { create(:merge_request, source_project: project) }
|
||||
let(:mentioned_commit) { project.commit("HEAD~1") }
|
||||
|
||||
let(:ext_proj) { create(:project, :public) }
|
||||
|
@ -100,6 +100,7 @@ shared_examples 'an editable mentionable' do
|
|||
|
||||
it 'creates new cross-reference notes when the mentionable text is edited' do
|
||||
subject.save
|
||||
subject.create_cross_references!
|
||||
|
||||
new_text = <<-MSG.strip_heredoc
|
||||
These references already existed:
|
||||
|
@ -131,6 +132,7 @@ shared_examples 'an editable mentionable' do
|
|||
end
|
||||
|
||||
# These two issues are new and should receive reference notes
|
||||
# In the case of MergeRequests remember that cannot mention commits included in the MergeRequest
|
||||
new_issues.each do |newref|
|
||||
expect(SystemNoteService).to receive(:cross_reference).
|
||||
with(newref, subject.local_reference, author)
|
||||
|
|
Loading…
Reference in a new issue