Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

fix #158: never modify the given options hash

  • Loading branch information...
commit 3627280bacfd4849124530b48a60d6c1de8c8200 1 parent 18ac029
@korny korny authored
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
Please sign in to comment.
Something went wrong with that request. Please try again.