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