summaryrefslogtreecommitdiff
path: root/app/validators
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2017-07-04 19:04:21 +0900
committerShinya Maeda <shinya@gitlab.com>2017-07-05 18:38:37 +0900
commit8f0a2b6d780347a5ce258ac1a6a6902ce9695ca1 (patch)
tree51e964abf1ff7af7da05f0d1418d8b4aef159d35 /app/validators
parent6128f286fa5801490be7cc033e827673f0418ff7 (diff)
downloadgitlab-ce-8f0a2b6d780347a5ce258ac1a6a6902ce9695ca1.tar.gz
Implement Ci::NestedUniquenessValidator
Diffstat (limited to 'app/validators')
-rw-r--r--app/validators/uniqueness_of_in_memory_validator.rb37
1 files changed, 0 insertions, 37 deletions
diff --git a/app/validators/uniqueness_of_in_memory_validator.rb b/app/validators/uniqueness_of_in_memory_validator.rb
deleted file mode 100644
index 84e88b2eb76..00000000000
--- a/app/validators/uniqueness_of_in_memory_validator.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# UniquenessOfInMemoryValidator
-#
-# This validtor is designed for especially the following condition
-# - Use `accepts_nested_attributes_for :xxx` in a parent model
-# - Use `validates :xxx, uniqueness: { scope: :xxx_id }` in a child model
-#
-# Inspired by https://stackoverflow.com/a/2883129/2522666
-module ActiveRecord
- class Base
- # Validate that the the objects in +collection+ are unique
- # when compared against all their non-blank +attrs+. If not
- # add +message+ to the base errors.
- def validate_uniqueness_of_in_memory(collection, attrs, message)
- hashes = collection.inject({}) do |hash, record|
- key = attrs.map { |a| record.send(a).to_s }.join
- if key.blank? || record.marked_for_destruction?
- key = record.object_id
- end
- hash[key] = record unless hash[key]
- hash
- end
-
- if collection.length > hashes.length
- self.errors.add(*message)
- end
- end
- end
-end
-
-class UniquenessOfInMemoryValidator < ActiveModel::Validator
- def validate(record)
- record.validate_uniqueness_of_in_memory(
- record.public_send(options[:collection]),
- options[:attrs],
- options[:message])
- end
-end