Merge branch 'refactor-reference-regexes-and-identity-scopes' into 'master'
Refactor reference regexes and identity scopes See merge request gitlab-org/gitlab-ce!22987
This commit is contained in:
commit
bf7e3372f9
5 changed files with 30 additions and 17 deletions
|
@ -97,9 +97,9 @@ module Mentionable
|
|||
# Allows heavy processing to be skipped
|
||||
def matches_cross_reference_regex?
|
||||
reference_pattern = if !project || project.default_issues_tracker?
|
||||
ReferenceRegexes::DEFAULT_PATTERN
|
||||
ReferenceRegexes.default_pattern
|
||||
else
|
||||
ReferenceRegexes::EXTERNAL_PATTERN
|
||||
ReferenceRegexes.external_pattern
|
||||
end
|
||||
|
||||
self.class.mentionable_attrs.any? do |attr, _|
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
module Mentionable
|
||||
module ReferenceRegexes
|
||||
extend Gitlab::Utils::StrongMemoize
|
||||
|
||||
def self.reference_pattern(link_patterns, issue_pattern)
|
||||
Regexp.union(link_patterns,
|
||||
issue_pattern,
|
||||
|
@ -15,16 +17,20 @@ module Mentionable
|
|||
]
|
||||
end
|
||||
|
||||
DEFAULT_PATTERN = begin
|
||||
issue_pattern = Issue.reference_pattern
|
||||
link_patterns = Regexp.union([Issue, Commit, MergeRequest, Epic].map(&:link_reference_pattern).compact)
|
||||
reference_pattern(link_patterns, issue_pattern)
|
||||
def self.default_pattern
|
||||
strong_memoize(:default_pattern) do
|
||||
issue_pattern = Issue.reference_pattern
|
||||
link_patterns = Regexp.union([Issue, Commit, MergeRequest, Epic].map(&:link_reference_pattern).compact)
|
||||
reference_pattern(link_patterns, issue_pattern)
|
||||
end
|
||||
end
|
||||
|
||||
EXTERNAL_PATTERN = begin
|
||||
issue_pattern = IssueTrackerService.reference_pattern
|
||||
link_patterns = URI.regexp(%w(http https))
|
||||
reference_pattern(link_patterns, issue_pattern)
|
||||
def self.external_pattern
|
||||
strong_memoize(:external_pattern) do
|
||||
issue_pattern = IssueTrackerService.reference_pattern
|
||||
link_patterns = URI.regexp(%w(http https))
|
||||
reference_pattern(link_patterns, issue_pattern)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,18 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Identity < ActiveRecord::Base
|
||||
def self.uniqueness_scope
|
||||
:provider
|
||||
end
|
||||
|
||||
include Sortable
|
||||
include CaseSensitivity
|
||||
|
||||
belongs_to :user
|
||||
|
||||
validates :provider, presence: true
|
||||
validates :extern_uid, allow_blank: true, uniqueness: { scope: uniqueness_scope, case_sensitive: false }
|
||||
validates :user_id, uniqueness: { scope: uniqueness_scope }
|
||||
validates :extern_uid, allow_blank: true, uniqueness: { scope: UniquenessScopes.scopes, case_sensitive: false }
|
||||
validates :user_id, uniqueness: { scope: UniquenessScopes.scopes }
|
||||
|
||||
before_save :ensure_normalized_extern_uid, if: :extern_uid_changed?
|
||||
after_destroy :clear_user_synced_attributes, if: :user_synced_attributes_metadata_from_provider?
|
||||
|
|
11
app/models/identity/uniqueness_scopes.rb
Normal file
11
app/models/identity/uniqueness_scopes.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Identity < ActiveRecord::Base
|
||||
# This module and method are defined in a separate file to allow EE to
|
||||
# redefine the `scopes` method before it is used in the `Identity` model.
|
||||
module UniquenessScopes
|
||||
def self.scopes
|
||||
[:provider]
|
||||
end
|
||||
end
|
||||
end
|
|
@ -9,7 +9,7 @@ class IssueTrackerService < Service
|
|||
# Override this method on services that uses different patterns
|
||||
# This pattern does not support cross-project references
|
||||
# The other code assumes that this pattern is a superset of all
|
||||
# overridden patterns. See ReferenceRegexes::EXTERNAL_PATTERN
|
||||
# overridden patterns. See ReferenceRegexes.external_pattern
|
||||
def self.reference_pattern(only_long: false)
|
||||
if only_long
|
||||
/(\b[A-Z][A-Z0-9_]*-)(?<issue>\d+)/
|
||||
|
|
Loading…
Reference in a new issue