Permalink
Browse files

Duplicating the options hash in Date#advance to prevent modification …

…of the original [#1133 state:resolved]

Signed-off-by: Joshua Peek <josh@joshpeek.com>
  • Loading branch information...
Jay Pignata authored and josh committed Aug 31, 2009
1 parent 49342d1 commit 49c4a79e59622c74cc9bb1aad04435ab171baf7c
@@ -92,6 +92,7 @@ def minus_with_duration(other) #:nodoc:
# 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)
+ options = options.dup
d = self
d = d >> options.delete(:years) * 12 if options[:years]
d = d >> options.delete(:months) if options[:months]
@@ -250,6 +250,12 @@ def test_current_returns_time_zone_today_when_zone_default_set
Time.zone_default = nil
end
+ def test_date_advance_should_not_change_passed_options_hash
+ options = { :years => 3, :months => 11, :days => 2 }
+ Date.new(2005,2,28).advance(options)
+ assert_equal({ :years => 3, :months => 11, :days => 2 }, options)
+ end
+
protected
def with_env_tz(new_tz = 'US/Eastern')
old_tz, ENV['TZ'] = ENV['TZ'], new_tz

0 comments on commit 49c4a79

Please sign in to comment.