diff options
author | Matt Rohrer <matt@prognostikos.com> | 2017-09-21 15:39:49 +0200 |
---|---|---|
committer | Matt Rohrer <matt@prognostikos.com> | 2017-10-26 10:01:06 +0200 |
commit | b8b089ef11300fab4625011b942ee4a1fbbdbbbd (patch) | |
tree | 2e7aae2d26e56036acced292301ff7fd8326b9b6 /activemodel/lib | |
parent | 8cd143900978902ed9bbba10b34099a3140de5c6 (diff) | |
download | rails-b8b089ef11300fab4625011b942ee4a1fbbdbbbd.tar.gz rails-b8b089ef11300fab4625011b942ee4a1fbbdbbbd.tar.bz2 rails-b8b089ef11300fab4625011b942ee4a1fbbdbbbd.zip |
Allow passing a Proc or Symbol as an argument to length validator values
This brings the Length validator in line with the Numericality
validator, which currently supports Proc & Symbol arguments
Diffstat (limited to 'activemodel/lib')
-rw-r--r-- | activemodel/lib/active_model/validations/length.rb | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/activemodel/lib/active_model/validations/length.rb b/activemodel/lib/active_model/validations/length.rb index d1a4197286..d6c80b2c5d 100644 --- a/activemodel/lib/active_model/validations/length.rb +++ b/activemodel/lib/active_model/validations/length.rb @@ -31,8 +31,8 @@ module ActiveModel keys.each do |key| value = options[key] - unless (value.is_a?(Integer) && value >= 0) || value == Float::INFINITY - raise ArgumentError, ":#{key} must be a nonnegative Integer or Infinity" + unless (value.is_a?(Integer) && value >= 0) || value == Float::INFINITY || value.is_a?(Symbol) || value.is_a?(Proc) + raise ArgumentError, ":#{key} must be a nonnegative Integer, Infinity, Symbol, or Proc" end end end @@ -45,6 +45,12 @@ module ActiveModel next unless check_value = options[key] if !value.nil? || skip_nil_check?(key) + case check_value + when Proc + check_value = check_value.call(record) + when Symbol + check_value = record.send(check_value) + end next if value_length.send(validity_check, check_value) end |