diff options
author | Marc-Andre Lafortune <github@marc-andre.ca> | 2011-11-22 15:37:16 -0500 |
---|---|---|
committer | Marc-Andre Lafortune <github@marc-andre.ca> | 2011-11-22 15:37:16 -0500 |
commit | a4912078c7d345a347f023ef28c0986458bdebf5 (patch) | |
tree | a2a0a553fc815b2f6888f54b89ebd66ec82ab847 /activesupport/lib | |
parent | cb06727b6cb7310808f5b9ce1bf254055806ba80 (diff) | |
download | rails-a4912078c7d345a347f023ef28c0986458bdebf5.tar.gz rails-a4912078c7d345a347f023ef28c0986458bdebf5.tar.bz2 rails-a4912078c7d345a347f023ef28c0986458bdebf5.zip |
Fix inconsistencies with Time{WithZone}#{hash,eql?}
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/core_ext/time/calculations.rb | 10 | ||||
-rw-r--r-- | activesupport/lib/active_support/time_with_zone.rb | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb index 372dd69212..7a55086452 100644 --- a/activesupport/lib/active_support/core_ext/time/calculations.rb +++ b/activesupport/lib/active_support/core_ext/time/calculations.rb @@ -312,4 +312,14 @@ class Time end alias_method :compare_without_coercion, :<=> alias_method :<=>, :compare_with_coercion + + # Layers additional behavior on Time#eql? so that ActiveSupport::TimeWithZone instances + # can be eql? to an equivalent Time + def eql_with_coercion(other) + # if other is an ActiveSupport::TimeWithZone, coerce a Time instance from it so we can do eql? comparison + other = other.comparable_time if other.respond_to?(:comparable_time) + eql_without_coercion(other) + end + alias_method :eql_without_coercion, :eql? + alias_method :eql?, :eql_with_coercion end diff --git a/activesupport/lib/active_support/time_with_zone.rb b/activesupport/lib/active_support/time_with_zone.rb index 63279d0e6d..d3adf671a0 100644 --- a/activesupport/lib/active_support/time_with_zone.rb +++ b/activesupport/lib/active_support/time_with_zone.rb @@ -203,7 +203,11 @@ module ActiveSupport end def eql?(other) - utc == other + utc.eql?(other) + end + + def hash + utc.hash end def +(other) @@ -277,7 +281,6 @@ module ActiveSupport def to_i utc.to_i end - alias_method :hash, :to_i alias_method :tv_sec, :to_i # A TimeWithZone acts like a Time, so just return +self+. |