aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/lib/active_support/core_ext/array/conversions.rb11
-rw-r--r--activesupport/test/core_ext/array_ext_test.rb6
-rw-r--r--activesupport/test/i18n_test.rb5
3 files changed, 14 insertions, 8 deletions
diff --git a/activesupport/lib/active_support/core_ext/array/conversions.rb b/activesupport/lib/active_support/core_ext/array/conversions.rb
index 1e0de651c7..d6ae031c0d 100644
--- a/activesupport/lib/active_support/core_ext/array/conversions.rb
+++ b/activesupport/lib/active_support/core_ext/array/conversions.rb
@@ -1,6 +1,5 @@
require 'active_support/xml_mini'
require 'active_support/core_ext/hash/keys'
-require 'active_support/core_ext/hash/reverse_merge'
require 'active_support/core_ext/string/inflections'
class Array
@@ -62,14 +61,10 @@ class Array
:last_word_connector => ', and '
}
if defined?(I18n)
- namespace = 'support.array.'
- default_connectors.each_key do |name|
- i18n_key = (namespace + name.to_s).to_sym
- default_connectors[name] = I18n.translate i18n_key, :locale => options[:locale]
- end
+ i18n_connectors = I18n.translate(:'support.array', locale: options[:locale], default: {})
+ default_connectors.merge!(i18n_connectors)
end
-
- options.reverse_merge! default_connectors
+ options = default_connectors.merge!(options)
case length
when 0
diff --git a/activesupport/test/core_ext/array_ext_test.rb b/activesupport/test/core_ext/array_ext_test.rb
index 58835c0ac5..9dfa2cbf11 100644
--- a/activesupport/test/core_ext/array_ext_test.rb
+++ b/activesupport/test/core_ext/array_ext_test.rb
@@ -90,6 +90,12 @@ class ArrayExtToSentenceTests < ActiveSupport::TestCase
def test_one_non_string_element
assert_equal '1', [1].to_sentence
end
+
+ def test_does_not_modify_given_hash
+ options = { words_connector: ' ' }
+ assert_equal "one two, and three", ['one', 'two', 'three'].to_sentence(options)
+ assert_equal({ words_connector: ' ' }, options)
+ end
end
class ArrayExtToSTests < ActiveSupport::TestCase
diff --git a/activesupport/test/i18n_test.rb b/activesupport/test/i18n_test.rb
index 4f2027f4eb..ddbba444cf 100644
--- a/activesupport/test/i18n_test.rb
+++ b/activesupport/test/i18n_test.rb
@@ -97,4 +97,9 @@ class I18nTest < ActiveSupport::TestCase
I18n.backend.store_translations 'en', :support => { :array => { :two_words_connector => default_two_words_connector } }
I18n.backend.store_translations 'en', :support => { :array => { :last_word_connector => default_last_word_connector } }
end
+
+ def test_to_sentence_with_empty_i18n_store
+ I18n.backend.store_translations 'empty', {}
+ assert_equal 'a, b, and c', %w[a b c].to_sentence(locale: 'empty')
+ end
end