diff options
Diffstat (limited to 'app/models/concerns/nonatomic_internal_id.rb')
-rw-r--r-- | app/models/concerns/nonatomic_internal_id.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/app/models/concerns/nonatomic_internal_id.rb b/app/models/concerns/nonatomic_internal_id.rb new file mode 100644 index 00000000000..9d0c9b8512f --- /dev/null +++ b/app/models/concerns/nonatomic_internal_id.rb @@ -0,0 +1,22 @@ +module NonatomicInternalId + extend ActiveSupport::Concern + + included do + validate :set_iid, on: :create + validates :iid, presence: true, numericality: true + end + + def set_iid + if iid.blank? + parent = project || group + records = parent.public_send(self.class.name.tableize) # rubocop:disable GitlabSecurity/PublicSend + max_iid = records.maximum(:iid) + + self.iid = max_iid.to_i + 1 + end + end + + def to_param + iid.to_s + end +end |