why include ActiveSupport::CoreExtensions::Time::Calculations in Time again when active support already does it for you? On Fri, Oct 24, 2008 at 4:39 PM, Jonathan Groll <lists / groll.co.za> wrote: > This code used to perform correctly with activesupport 2.0.2: > > #!/usr/bin/ruby > require 'rubygems' > require 'time' > require 'active_support' > > class Time > include ActiveSupport::CoreExtensions::Time::Calculations > end > > nxt = Time.now.change(:hour => 7) > nxt = nxt.tomorrow if nxt < Time.now > puts nxt > > *** > However, with activesupport 2.1.2 it now fails: > /var/lib/gems/1.8/gems/activesupport-2.1.2/lib/active_support/core_ext/time/calculations.rb:270:in > 'compare_without_coercion': stack level too deep (SystemStackError) > from > > /var/lib/gems/1.8/gems/activesupport-2.1.2/lib/active_support/core_ext/time/calculations.rb:270:in > '<=>' > from ./problem_for_ruby.ml:11:in '<' > from ./problem_for_ruby.ml:11 > > The above is obviously caused by the comparison: > if nxt < Time.now > > Inside calculations.rb we seem to be getting lost in: > # Layers additional behavior on Time#<=> so that DateTime and > ActiveSupport::TimeWithZone instances > # can be chronologically compared with a Time > def compare_with_coercion(other) > # if other is an ActiveSupport::TimeWithZone, coerce a Time > instance from it so we can do <=> comparision > other = other.comparable_time if > other.respond_to?(:comparable_time) > if other.acts_like?(:date) > # other is a Date/DateTime, so coerce self #to_datetime > and hand off to DateTime#<=> > to_datetime.compare_without_coercion(other) > else > compare_without_coercion(other) > end > end > > compare_without_coercion is an alias: > alias_method :compare_without_coercion, :<=> > > So: how to do this comparison? Is it a good idea to make use of > activesupport's core extensions in my own ruby programs? Is this an > activesupport bug? > > Many thanks, > Jonathan Groll > > -- chunky bacon!