33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/activerecord-import/import.rb', line 33
def init_validations(klass)
@validate_callbacks = klass._validate_callbacks.dup
@validate_callbacks.each_with_index do |callback, i|
filter = callback.respond_to?(:raw_filter) ? callback.raw_filter : callback.filter
next unless filter.class.name =~ /Validations::PresenceValidator/ ||
(!@options[:validate_uniqueness] &&
filter.is_a?(ActiveRecord::Validations::UniquenessValidator))
callback = callback.dup
filter = filter.dup
attrs = filter.instance_variable_get(:@attributes).dup
if filter.is_a?(ActiveRecord::Validations::UniquenessValidator)
attrs = []
else
associations = klass.reflect_on_all_associations(:belongs_to)
associations.each do |assoc|
if (index = attrs.index(assoc.name))
key = assoc.foreign_key.is_a?(Array) ? assoc.foreign_key.map(&:to_sym) : assoc.foreign_key.to_sym
attrs[index] = key unless attrs.include?(key)
end
end
end
filter.instance_variable_set(:@attributes, attrs.flatten)
if @validate_callbacks.respond_to?(:chain, true)
@validate_callbacks.send(:chain).tap do |chain|
callback.instance_variable_set(:@filter, filter)
callback.instance_variable_set(:@compiled, nil)
chain[i] = callback
end
else
callback.raw_filter = filter
callback.filter = callback.send(:_compile_filter, filter)
@validate_callbacks[i] = callback
end
end
end
|