aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-10-23 09:03:13 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-10-23 09:03:13 -0700
commitd6fe9e837e8dc15fa6859138a2f641ff85c02aa3 (patch)
tree83e3ceeaa83e20ed65071aea33637826026d3464 /activemodel/lib
parentdc8a20677d820aa09413c6a3e25c9d70ba24561a (diff)
parent68db6bc431fbff0b2291f1f60ccf974b4eece596 (diff)
downloadrails-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.rb16
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