lib/mini_defender/validator.rb in mini_defender-0.4.1 vs lib/mini_defender/validator.rb in mini_defender-0.5.0
- old
+ new
@@ -21,10 +21,11 @@
data_rules = @rules.to_h do |k, set|
[k, @factory.init_set(set)]
end
+ # Set default values for missing data key compared to rules
data_rules.each do |k, set|
if !@data.key?(k) || @data[k].blank?
set.filter{ |r| r.defaults?(self) }.each do |r|
@data.merge!({k => r.default_value(self)}.flatten_keys(keep_roots: true))
end
@@ -49,19 +50,26 @@
@errors[k] << 'This field is missing.' if required
next
end
value = coerced = @data[k]
+ force_coerce = false
+
rule_set.each do |rule|
next unless rule.active?(self)
value_included &= !rule.excluded?(self)
- if rule.passes?(k, coerced, self)
+ if rule.passes?(k, value, self)
coerced = rule.coerce(coerced)
+ force_coerce = rule.force_coerce?
else
@errors[k] << rule.error_message(k, value, self)
end
+ end
+
+ if force_coerce
+ value = coerced
end
if @errors[k].empty? && value_included
@validated[k] = value
@coerced[k] = coerced