diff options
Diffstat (limited to 'app/models/concerns/atomic_internal_id.rb')
-rw-r--r-- | app/models/concerns/atomic_internal_id.rb | 20 |
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 |