summaryrefslogtreecommitdiff
path: root/lib/gitlab/background_migration
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/background_migration')
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/concerns/isolated_mentionable.rb140
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/concerns/mentionable_migration_methods.rb22
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/design_management/design.rb (renamed from lib/gitlab/background_migration/user_mentions/models/design.rb)2
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/epic.rb4
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/note.rb2
-rw-r--r--lib/gitlab/background_migration/user_mentions/models/snippet.rb4
6 files changed, 89 insertions, 85 deletions
diff --git a/lib/gitlab/background_migration/user_mentions/models/concerns/isolated_mentionable.rb b/lib/gitlab/background_migration/user_mentions/models/concerns/isolated_mentionable.rb
index 1fac4b230ca..69ba3f9132b 100644
--- a/lib/gitlab/background_migration/user_mentions/models/concerns/isolated_mentionable.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/concerns/isolated_mentionable.rb
@@ -4,95 +4,97 @@ module Gitlab
module BackgroundMigration
module UserMentions
module Models
- # == IsolatedMentionable concern
- #
- # Shortcutted for isolation version of Mentionable to be used in mentions migrations
- #
- module IsolatedMentionable
- extend ::ActiveSupport::Concern
-
- class_methods do
- # Indicate which attributes of the Mentionable to search for GFM references.
- def attr_mentionable(attr, options = {})
- attr = attr.to_s
- mentionable_attrs << [attr, options]
+ module Concerns
+ # == IsolatedMentionable concern
+ #
+ # Shortcutted for isolation version of Mentionable to be used in mentions migrations
+ #
+ module IsolatedMentionable
+ extend ::ActiveSupport::Concern
+
+ class_methods do
+ # Indicate which attributes of the Mentionable to search for GFM references.
+ def attr_mentionable(attr, options = {})
+ attr = attr.to_s
+ mentionable_attrs << [attr, options]
+ end
end
- end
- included do
- # Accessor for attributes marked mentionable.
- cattr_accessor :mentionable_attrs, instance_accessor: false do
- []
- end
+ included do
+ # Accessor for attributes marked mentionable.
+ cattr_accessor :mentionable_attrs, instance_accessor: false do
+ []
+ end
- if self < Participable
- participant -> (user, ext) { all_references(user, extractor: ext) }
+ if self < Participable
+ participant -> (user, ext) { all_references(user, extractor: ext) }
+ end
end
- end
- def all_references(current_user = nil, extractor: nil)
- # Use custom extractor if it's passed in the function parameters.
- if extractor
- extractors[current_user] = extractor
- else
- extractor = extractors[current_user] ||= ::Gitlab::ReferenceExtractor.new(project, current_user)
+ def all_references(current_user = nil, extractor: nil)
+ # Use custom extractor if it's passed in the function parameters.
+ if extractor
+ extractors[current_user] = extractor
+ else
+ extractor = extractors[current_user] ||= ::Gitlab::ReferenceExtractor.new(project, current_user)
- extractor.reset_memoized_values
- end
+ extractor.reset_memoized_values
+ end
- self.class.mentionable_attrs.each do |attr, options|
- text = __send__(attr) # rubocop:disable GitlabSecurity/PublicSend
- options = options.merge(
- cache_key: [self, attr],
- author: author,
- skip_project_check: skip_project_check?
- ).merge(mentionable_params)
+ self.class.mentionable_attrs.each do |attr, options|
+ text = __send__(attr) # rubocop:disable GitlabSecurity/PublicSend
+ options = options.merge(
+ cache_key: [self, attr],
+ author: author,
+ skip_project_check: skip_project_check?
+ ).merge(mentionable_params)
- cached_html = self.try(:updated_cached_html_for, attr.to_sym)
- options[:rendered] = cached_html if cached_html
+ cached_html = self.try(:updated_cached_html_for, attr.to_sym)
+ options[:rendered] = cached_html if cached_html
- extractor.analyze(text, options)
- end
+ extractor.analyze(text, options)
+ end
- extractor
- end
+ extractor
+ end
- def extractors
- @extractors ||= {}
- end
+ def extractors
+ @extractors ||= {}
+ end
- def skip_project_check?
- false
- end
+ def skip_project_check?
+ false
+ end
- def build_mention_values(resource_foreign_key)
- refs = all_references(author)
+ def build_mention_values(resource_foreign_key)
+ refs = all_references(author)
- mentioned_users_ids = array_to_sql(refs.mentioned_users.pluck(:id))
- mentioned_projects_ids = array_to_sql(refs.mentioned_projects.pluck(:id))
- mentioned_groups_ids = array_to_sql(refs.mentioned_groups.pluck(:id))
+ mentioned_users_ids = array_to_sql(refs.mentioned_users.pluck(:id))
+ mentioned_projects_ids = array_to_sql(refs.mentioned_projects.pluck(:id))
+ mentioned_groups_ids = array_to_sql(refs.mentioned_groups.pluck(:id))
- return if mentioned_users_ids.blank? && mentioned_projects_ids.blank? && mentioned_groups_ids.blank?
+ return if mentioned_users_ids.blank? && mentioned_projects_ids.blank? && mentioned_groups_ids.blank?
- {
- "#{resource_foreign_key}": user_mention_resource_id,
- note_id: user_mention_note_id,
- mentioned_users_ids: mentioned_users_ids,
- mentioned_projects_ids: mentioned_projects_ids,
- mentioned_groups_ids: mentioned_groups_ids
- }
- end
+ {
+ "#{resource_foreign_key}": user_mention_resource_id,
+ note_id: user_mention_note_id,
+ mentioned_users_ids: mentioned_users_ids,
+ mentioned_projects_ids: mentioned_projects_ids,
+ mentioned_groups_ids: mentioned_groups_ids
+ }
+ end
- def array_to_sql(ids_array)
- return unless ids_array.present?
+ def array_to_sql(ids_array)
+ return unless ids_array.present?
- '{' + ids_array.join(", ") + '}'
- end
+ '{' + ids_array.join(", ") + '}'
+ end
- private
+ private
- def mentionable_params
- {}
+ def mentionable_params
+ {}
+ end
end
end
end
diff --git a/lib/gitlab/background_migration/user_mentions/models/concerns/mentionable_migration_methods.rb b/lib/gitlab/background_migration/user_mentions/models/concerns/mentionable_migration_methods.rb
index fa479cb0ed3..efb08d44100 100644
--- a/lib/gitlab/background_migration/user_mentions/models/concerns/mentionable_migration_methods.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/concerns/mentionable_migration_methods.rb
@@ -4,17 +4,19 @@ module Gitlab
module BackgroundMigration
module UserMentions
module Models
- # Extract common no_quote_columns method used in determining the columns that do not need
- # to be quoted for corresponding models
- module MentionableMigrationMethods
- extend ::ActiveSupport::Concern
+ module Concerns
+ # Extract common no_quote_columns method used in determining the columns that do not need
+ # to be quoted for corresponding models
+ module MentionableMigrationMethods
+ extend ::ActiveSupport::Concern
- class_methods do
- def no_quote_columns
- [
- :note_id,
- user_mention_model.resource_foreign_key
- ]
+ class_methods do
+ def no_quote_columns
+ [
+ :note_id,
+ user_mention_model.resource_foreign_key
+ ]
+ end
end
end
end
diff --git a/lib/gitlab/background_migration/user_mentions/models/design.rb b/lib/gitlab/background_migration/user_mentions/models/design_management/design.rb
index 66cff561bcb..0cdfc6447c7 100644
--- a/lib/gitlab/background_migration/user_mentions/models/design.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/design_management/design.rb
@@ -7,7 +7,7 @@ module Gitlab
module Models
module DesignManagement
class Design < ActiveRecord::Base
- include MentionableMigrationMethods
+ include Concerns::MentionableMigrationMethods
def self.user_mention_model
Gitlab::BackgroundMigration::UserMentions::Models::DesignUserMention
diff --git a/lib/gitlab/background_migration/user_mentions/models/epic.rb b/lib/gitlab/background_migration/user_mentions/models/epic.rb
index ad1d904cde7..a76391d64bb 100644
--- a/lib/gitlab/background_migration/user_mentions/models/epic.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/epic.rb
@@ -6,9 +6,9 @@ module Gitlab
module UserMentions
module Models
class Epic < ActiveRecord::Base
- include IsolatedMentionable
+ include Concerns::IsolatedMentionable
+ include Concerns::MentionableMigrationMethods
include CacheMarkdownField
- include MentionableMigrationMethods
attr_mentionable :title, pipeline: :single_line
attr_mentionable :description
diff --git a/lib/gitlab/background_migration/user_mentions/models/note.rb b/lib/gitlab/background_migration/user_mentions/models/note.rb
index dc364d7af5a..fb61de638a8 100644
--- a/lib/gitlab/background_migration/user_mentions/models/note.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/note.rb
@@ -6,7 +6,7 @@ module Gitlab
module UserMentions
module Models
class Note < ActiveRecord::Base
- include IsolatedMentionable
+ include Concerns::IsolatedMentionable
include CacheMarkdownField
self.table_name = 'notes'
diff --git a/lib/gitlab/background_migration/user_mentions/models/snippet.rb b/lib/gitlab/background_migration/user_mentions/models/snippet.rb
index 1481cfcc562..cdbada76429 100644
--- a/lib/gitlab/background_migration/user_mentions/models/snippet.rb
+++ b/lib/gitlab/background_migration/user_mentions/models/snippet.rb
@@ -6,9 +6,9 @@ module Gitlab
module UserMentions
module Models
class Snippet < ActiveRecord::Base
- include IsolatedMentionable
+ include Concerns::IsolatedMentionable
+ include Concerns::MentionableMigrationMethods
include CacheMarkdownField
- include MentionableMigrationMethods
attr_mentionable :title, pipeline: :single_line
attr_mentionable :description