lib/tzinfo/time_or_datetime.rb in tzinfo-0.2.0 vs lib/tzinfo/time_or_datetime.rb in tzinfo-0.2.1

- old
+ new

@@ -29,11 +29,12 @@ # timestamp (seconds since 1970-01-01 00:00:00). class TimeOrDateTime #:nodoc: include Comparable # Constructs a new TimeOrDateTime. timeOrDateTime can be a Time, DateTime - # or an integer. If using a Time, any time zone information is ignored. + # or an integer. If using a Time or DateTime, any time zone information is + # ignored. def initialize(timeOrDateTime) @time = nil @datetime = nil @timestamp = nil @@ -41,10 +42,11 @@ @time = timeOrDateTime @time = Time.utc(@time.year, @time.mon, @time.mday, @time.hour, @time.min, @time.sec) unless @time.zone == 'UTC' @orig = @time elsif timeOrDateTime.is_a?(DateTime) @datetime = timeOrDateTime + @datetime = @datetime.new_offset(0) unless @datetime.offset == 0 @orig = @datetime else @timestamp = timeOrDateTime.to_i @orig = @timestamp end @@ -169,11 +171,21 @@ # timestamp or TimeOrDateTime. Returns -1, 0 or +1 depending whether the # receiver is less than, equal to, or greater than timeOrDateTime. # # Milliseconds and smaller units are ignored in the comparison. def <=>(timeOrDateTime) - if timeOrDateTime.is_a?(TimeOrDateTime) - self <=> timeOrDateTime.orig + if timeOrDateTime.is_a?(TimeOrDateTime) + orig = timeOrDateTime.to_orig + + if @orig.is_a?(DateTime) || orig.is_a?(DateTime) + # If either is a DateTime, assume it is there for a reason + # (i.e. for range). + to_datetime <=> timeOrDateTime.to_datetime + elsif orig.is_a?(Time) + to_time <=> timeOrDateTime.to_time + else + to_i <=> timeOrDateTime.to_i + end elsif @orig.is_a?(DateTime) || timeOrDateTime.is_a?(DateTime) # If either is a DateTime, assume it is there for a reason # (i.e. for range). to_datetime <=> TimeOrDateTime.wrap(timeOrDateTime).to_datetime elsif timeOrDateTime.is_a?(Time)