aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/validations/length.rb
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2017-10-26 11:27:21 -0400
committerGitHub <noreply@github.com>2017-10-26 11:27:21 -0400
commit12de5e202ddfca27cccc5965b3048e88718a9ace (patch)
tree2e7aae2d26e56036acced292301ff7fd8326b9b6 /activemodel/lib/active_model/validations/length.rb
parent8cd143900978902ed9bbba10b34099a3140de5c6 (diff)
parentb8b089ef11300fab4625011b942ee4a1fbbdbbbd (diff)
downloadrails-12de5e202ddfca27cccc5965b3048e88718a9ace.tar.gz
rails-12de5e202ddfca27cccc5965b3048e88718a9ace.tar.bz2
rails-12de5e202ddfca27cccc5965b3048e88718a9ace.zip
Merge pull request #30674 from prognostikos/allow_procs_for_length_validator
Allow passing a Proc or Symbol as an argument to length validator values
Diffstat (limited to 'activemodel/lib/active_model/validations/length.rb')
-rw-r--r--activemodel/lib/active_model/validations/length.rb10
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