summaryrefslogtreecommitdiff
path: root/app/models/concerns
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2018-05-03 10:48:23 +0200
committerKamil Trzciński <ayufan@ayufan.eu>2018-05-03 10:49:13 +0200
commit58f229af992a9481c9eee3165dc5d14eb1dc7d00 (patch)
tree6bec51a873cbb3dceca49e7814014bb6dd63a895 /app/models/concerns
parent35cf604b72ec6cabffc46cc7c2da76fb303525cb (diff)
downloadgitlab-ce-58f229af992a9481c9eee3165dc5d14eb1dc7d00.tar.gz
Make Atomic Internal ID work for pipelines
Diffstat (limited to 'app/models/concerns')
-rw-r--r--app/models/concerns/atomic_internal_id.rb18
1 files changed, 11 insertions, 7 deletions
diff --git a/app/models/concerns/atomic_internal_id.rb b/app/models/concerns/atomic_internal_id.rb
index 22f516a172f..709589a9128 100644
--- a/app/models/concerns/atomic_internal_id.rb
+++ b/app/models/concerns/atomic_internal_id.rb
@@ -25,9 +25,13 @@ module AtomicInternalId
extend ActiveSupport::Concern
module ClassMethods
- def has_internal_id(column, scope:, init:) # rubocop:disable Naming/PredicateName
- before_validation(on: :create) do
+ def has_internal_id(column, scope:, init:, presence: true, to_param: true) # rubocop:disable Naming/PredicateName
+ before_validation :"ensure_#{column}!", on: :create
+ validates column, presence: presence, numericality: true
+
+ define_method("ensure_#{column}!") do
scope_value = association(scope).reader
+
if read_attribute(column).blank? && scope_value
scope_attrs = { scope_value.class.table_name.singularize.to_sym => scope_value }
usage = self.class.table_name.to_sym
@@ -35,13 +39,13 @@ module AtomicInternalId
new_iid = InternalId.generate_next(self, scope_attrs, usage, init)
write_attribute(column, new_iid)
end
+
+ read_attribute(column)
end
- validates column, presence: true, numericality: true
+ define_method("to_param") do
+ read_attribute(column)
+ end if to_param
end
end
-
- def to_param
- iid.to_s
- end
end