summaryrefslogtreecommitdiff
path: root/app/models/concerns/atomic_internal_id.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/atomic_internal_id.rb')
-rw-r--r--app/models/concerns/atomic_internal_id.rb20
1 files changed, 12 insertions, 8 deletions
diff --git a/app/models/concerns/atomic_internal_id.rb b/app/models/concerns/atomic_internal_id.rb
index 3cc9ce7f03f..eef5c0bfcd1 100644
--- a/app/models/concerns/atomic_internal_id.rb
+++ b/app/models/concerns/atomic_internal_id.rb
@@ -2,15 +2,19 @@ module AtomicInternalId
extend ActiveSupport::Concern
included do
- before_validation(on: :create) do
- set_iid
- end
-
- validates :iid, presence: true, numericality: true
- end
+ class << self
+ def has_internal_id(on, scope:, usage: nil, init: nil)
+ before_validation(on: :create) do
+ if self.public_send(on).blank? # rubocop:disable GitlabSecurity/PublicSend
+ usage = (usage || self.class.name.tableize).to_sym
+ new_iid = InternalId.generate_next(self, scope, usage, init)
+ self.public_send("#{on}=", new_iid) # rubocop:disable GitlabSecurity/PublicSend
+ end
+ end
- def set_iid
- self.iid = InternalId.generate_next(self.project, :issues) if iid.blank?
+ validates on, presence: true, numericality: true
+ end
+ end
end
def to_param