diff options
Diffstat (limited to 'activesupport/lib/active_support/core_ext/date')
-rw-r--r-- | activesupport/lib/active_support/core_ext/date/calculations.rb | 34 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/date/operators.rb | 16 |
2 files changed, 32 insertions, 18 deletions
diff --git a/activesupport/lib/active_support/core_ext/date/calculations.rb b/activesupport/lib/active_support/core_ext/date/calculations.rb index 86d7fa1abf..c60e833441 100644 --- a/activesupport/lib/active_support/core_ext/date/calculations.rb +++ b/activesupport/lib/active_support/core_ext/date/calculations.rb @@ -1,13 +1,12 @@ require 'date' +require 'active_support/duration' require 'active_support/core_ext/object/acts_like' require 'active_support/core_ext/date/zones' -require 'active_support/core_ext/date/operators' require 'active_support/core_ext/time/zones' require 'active_support/core_ext/date_and_time/calculations' class Date include DateAndTime::Calculations - prepend ActiveSupport::DateOperators class << self attr_accessor :beginning_of_week_default @@ -86,6 +85,26 @@ class Date end alias :at_end_of_day :end_of_day + def plus_with_duration(other) #:nodoc: + if ActiveSupport::Duration === other + other.since(self) + else + plus_without_duration(other) + end + end + alias_method :plus_without_duration, :+ + alias_method :+, :plus_with_duration + + def minus_with_duration(other) #:nodoc: + if ActiveSupport::Duration === other + plus_with_duration(-other) + else + minus_without_duration(other) + end + end + alias_method :minus_without_duration, :- + alias_method :-, :minus_with_duration + # Provides precise Date calculations for years, months, and days. The +options+ parameter takes a hash with # any of these keys: <tt>:years</tt>, <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>. def advance(options) @@ -110,4 +129,15 @@ class Date options.fetch(:day, day) ) end + + # Allow Date to be compared with Time by converting to DateTime and relying on the <=> from there. + def compare_with_coercion(other) + if other.is_a?(Time) + self.to_datetime <=> other + else + compare_without_coercion(other) + end + end + alias_method :compare_without_coercion, :<=> + alias_method :<=>, :compare_with_coercion end diff --git a/activesupport/lib/active_support/core_ext/date/operators.rb b/activesupport/lib/active_support/core_ext/date/operators.rb deleted file mode 100644 index decf099624..0000000000 --- a/activesupport/lib/active_support/core_ext/date/operators.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'active_support/core_ext/date_and_time/with_duration' - -module ActiveSupport - module DateOperators # :nodoc: - include DateAndTime::WithDuration - - # Allow Date to be compared with Time by converting to DateTime and relying on the <=> from there. - def <=>(other) - if other.is_a?(Time) - self.to_datetime <=> other - else - super - end - end - end -end |