From 539bdf73be4a84b1f542801a28f016808d604fe5 Mon Sep 17 00:00:00 2001 From: Andreas Brandl Date: Wed, 14 Mar 2018 13:42:03 +0100 Subject: [PATCH] Address review comments. --- app/models/concerns/atomic_internal_id.rb | 27 ++++++++++------------- app/models/internal_id.rb | 5 +++-- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/models/concerns/atomic_internal_id.rb b/app/models/concerns/atomic_internal_id.rb index bba71eee8bd..6f2d60a7ee9 100644 --- a/app/models/concerns/atomic_internal_id.rb +++ b/app/models/concerns/atomic_internal_id.rb @@ -24,24 +24,21 @@ module AtomicInternalId extend ActiveSupport::Concern - included do - class << self - def has_internal_id(on, scope:, usage: nil, init:) # rubocop:disable Naming/PredicateName - before_validation(on: :create) do - if self.public_send(on).blank? # rubocop:disable GitlabSecurity/PublicSend - - scope_attrs = [scope].flatten.compact.each_with_object({}) do |e, h| - h[e] = self.public_send(e) # rubocop:disable GitlabSecurity/PublicSend - end - - usage = (usage || self.class.name.tableize).to_sym - new_iid = InternalId.generate_next(self, scope_attrs, usage, init) - self.public_send("#{on}=", new_iid) # rubocop:disable GitlabSecurity/PublicSend + module ClassMethods + def has_internal_id(on, scope:, usage: nil, init:) # rubocop:disable Naming/PredicateName + before_validation(on: :create) do + if self.public_send(on).blank? # rubocop:disable GitlabSecurity/PublicSend + scope_attrs = [scope].flatten.compact.each_with_object({}) do |e, h| + h[e] = self.public_send(e) # rubocop:disable GitlabSecurity/PublicSend end - end - validates on, presence: true, numericality: true + usage = (usage || self.class.table_name).to_sym + new_iid = InternalId.generate_next(self, scope_attrs, usage, init) + self.public_send("#{on}=", new_iid) # rubocop:disable GitlabSecurity/PublicSend + end end + + validates on, presence: true, numericality: true end end diff --git a/app/models/internal_id.rb b/app/models/internal_id.rb index 6419cdc5b67..f3630ed1ac5 100644 --- a/app/models/internal_id.rb +++ b/app/models/internal_id.rb @@ -67,16 +67,17 @@ class InternalId < ActiveRecord::Base # usage: Symbol to define the usage of the internal id, see InternalId.usages # init: Block that gets called to initialize InternalId record if not present attr_reader :subject, :scope, :init, :scope_attrs, :usage + def initialize(subject, scope, usage, init) @subject = subject @scope = scope @init = init @usage = usage - raise 'scope is not well-defined, need at least one column for scope (given: 0)' if scope.empty? + raise ArgumentError, 'scope is not well-defined, need at least one column for scope (given: 0)' if scope.empty? unless InternalId.usages.keys.include?(usage.to_s) - raise "Usage '#{usage}' is unknown. Supported values are #{InternalId.usages.keys} from InternalId.usages" + raise ArgumentError, "Usage '#{usage}' is unknown. Supported values are #{InternalId.usages.keys} from InternalId.usages" end end -- GitLab