/
uniqueness.rb
43 lines (37 loc) · 1.14 KB
/
uniqueness.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# encoding: utf-8
module Sequel
module Plugins
module SexyValidations
module Validators
class Uniqueness
def self.validate(model, attribute, value, options)
return unless value
return unless model.changed_columns.include?(attribute)
unless options.is_a?(Hash)
options = {
:scope => options,
}
end
options[:message] ||= "bereits vergeben"
dataset = model.class.filter(~:id => model.id, attribute => value)
if options[:scope].is_a?(Array)
options[:scope].each do |v|
case v
when Symbol
dataset = dataset.filter(v => model.send(v))
when Proc
dataset = dataset.filter(v.call(model))
else
dataset = dataset.filter(v)
end
end
end
unless dataset.empty?
model.errors.add(attribute, options[:message])
end
end
end
end
end
end
end