Skip to content

Loading…

Fix #158: never modify the given options hash #174

Merged
merged 1 commit into from

2 participants

@korny

This should fix #158.

@kknapik kknapik merged commit d9dbe2e into svenfuchs:master

1 check passed

Details default The Travis build passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Oct 26, 2012
  1. @korny
Showing with 18 additions and 3 deletions.
  1. +4 −3 lib/i18n.rb
  2. +7 −0 lib/i18n/tests/localization/date.rb
  3. +7 −0 lib/i18n/tests/lookup.rb
View
7 lib/i18n.rb
@@ -141,7 +141,7 @@ def reload!
# always return the same translations/values per unique combination of argument
# values.
def translate(*args)
- options = args.last.is_a?(Hash) ? args.pop : {}
+ options = args.last.is_a?(Hash) ? args.pop.dup : {}
key = args.shift
backend = config.backend
locale = options.delete(:locale) || config.locale
@@ -219,7 +219,7 @@ def translate!(key, options={})
# I18n.transliterate("Jürgen", :locale => :en) # => "Jurgen"
# I18n.transliterate("Jürgen", :locale => :de) # => "Juergen"
def transliterate(*args)
- options = args.pop if args.last.is_a?(Hash)
+ options = args.pop.dup if args.last.is_a?(Hash)
key = args.shift
locale = options && options.delete(:locale) || config.locale
handling = options && (options.delete(:throw) && :throw || options.delete(:raise) && :raise)
@@ -230,7 +230,8 @@ def transliterate(*args)
end
# Localizes certain objects, such as dates and numbers to local formatting.
- def localize(object, options = {})
+ def localize(object, options = nil)
+ options = options ? options.dup : {}
locale = options.delete(:locale) || config.locale
format = options.delete(:format) || :default
config.backend.localize(locale, object, format, options)
View
7 lib/i18n/tests/localization/date.rb
@@ -44,6 +44,13 @@ def setup
assert_nothing_raised { I18n.l(@date, :format => '%x') }
end
+ test "localize Date: does not modify the options hash" do
+ options = { :format => '%b', :locale => :de }
+ assert_equal 'Mar', I18n.l(@date, options)
+ assert_equal({ :format => '%b', :locale => :de }, options)
+ assert_nothing_raised { I18n.l(@date, options.freeze) }
+ end
+
test "localize Date: given nil it raises I18n::ArgumentError" do
assert_raise(I18n::ArgumentError) { I18n.l(nil) }
end
View
7 lib/i18n/tests/lookup.rb
@@ -41,6 +41,13 @@ def setup
assert_nothing_raised { I18n.t(:foo, :locale => :xx) }
end
+ test "lookup: does not modify the options hash" do
+ options = {}
+ assert_equal "a", I18n.t(:string, options)
+ assert_equal({}, options)
+ assert_nothing_raised { I18n.t(:string, options.freeze) }
+ end
+
test "lookup: given an array of keys it translates all of them" do
assert_equal %w(bar baz), I18n.t([:bar, :baz], :scope => [:foo])
end
Something went wrong with that request. Please try again.