diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-10-23 09:03:13 -0700 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-10-23 09:03:13 -0700 |
commit | d6fe9e837e8dc15fa6859138a2f641ff85c02aa3 (patch) | |
tree | 83e3ceeaa83e20ed65071aea33637826026d3464 /activemodel/lib | |
parent | dc8a20677d820aa09413c6a3e25c9d70ba24561a (diff) | |
parent | 68db6bc431fbff0b2291f1f60ccf974b4eece596 (diff) | |
download | rails-d6fe9e837e8dc15fa6859138a2f641ff85c02aa3.tar.gz rails-d6fe9e837e8dc15fa6859138a2f641ff85c02aa3.tar.bz2 rails-d6fe9e837e8dc15fa6859138a2f641ff85c02aa3.zip |
Merge pull request #12612 from amatsuda/amo_validates_inclusion_of_time_range_error
Let validates_inclusion_of accept Time and DateTime ranges
Diffstat (limited to 'activemodel/lib')
-rw-r--r-- | activemodel/lib/active_model/validations/clusivity.rb | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/activemodel/lib/active_model/validations/clusivity.rb b/activemodel/lib/active_model/validations/clusivity.rb index 1c35cb7c35..fd6cc1edb4 100644 --- a/activemodel/lib/active_model/validations/clusivity.rb +++ b/activemodel/lib/active_model/validations/clusivity.rb @@ -30,12 +30,18 @@ module ActiveModel @delimiter ||= options[:in] || options[:within] end - # In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible values in the - # range for equality, which is slower but more accurate. <tt>Range#cover?</tt> uses - # the previous logic of comparing a value with the range endpoints, which is fast - # but is only accurate on numeric ranges. + # In Ruby 1.9 <tt>Range#include?</tt> on non-number-or-time-ish ranges checks all + # possible values in the range for equality, which is slower but more accurate. + # <tt>Range#cover?</tt> uses the previous logic of comparing a value with the range + # endpoints, which is fast but is only accurate on Numeric, Time, or DateTime ranges. def inclusion_method(enumerable) - (enumerable.is_a?(Range) && enumerable.first.is_a?(Numeric)) ? :cover? : :include? + return :include? unless enumerable.is_a?(Range) + case enumerable.first + when Numeric, Time, DateTime + :cover? + else + :include? + end end end end |