public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Change Array#to_sentence I18n options to pass comma and space character from 
outside.

[#1397 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
amatsuda (author)
Mon Nov 17 09:16:08 -0800 2008
jeremy (committer)
Mon Dec 08 15:53:20 -0800 2008
commit  273c770011ab43d4b523caacb808bce070922d77
tree    d10dd1a4af6127ad824eac36e5786cda32f4e431
parent  091e6f791aa3324b2c7f8c8c4cd2fce12b689cc8
...
3
4
5
6
7
 
 
 
8
9
 
10
11
12
13
14
 
 
 
 
15
16
17
...
19
20
21
22
 
23
24
 
25
26
27
...
3
4
5
 
 
6
7
8
9
 
10
11
 
 
 
 
12
13
14
15
16
17
18
...
20
21
22
 
23
24
 
25
26
27
28
0
@@ -3,15 +3,16 @@ module ActiveSupport #:nodoc:
0
     module Array #:nodoc:
0
       module Conversions
0
         # Converts the array to a comma-separated sentence where the last element is joined by the connector word. Options:
0
-        # * <tt>:connector</tt> - The word used to join the last element in arrays with two or more elements (default: "and")
0
-        # * <tt>:skip_last_comma</tt> - Set to true to return "a, b and c" instead of "a, b, and c".        
0
+        # * <tt>:words_connector</tt> - The sign or word used to join the elements in arrays with two or more elements (default: ", ")
0
+        # * <tt>:two_words_connector</tt> - The sign or word used to join the elements in arrays with two elements (default: " and ")
0
+        # * <tt>:last_word_connector</tt> - The sign or word used to join the last element in arrays with three or more elements (default: ", and ")
0
         def to_sentence(options = {})          
0
-          options.assert_valid_keys(:connector, :skip_last_comma, :locale)
0
+          options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale)
0
           
0
-          default = I18n.translate(:'support.array.sentence_connector', :locale => options[:locale])
0
-          default_skip_last_comma = I18n.translate(:'support.array.skip_last_comma', :locale => options[:locale])
0
-          options.reverse_merge! :connector => default, :skip_last_comma => default_skip_last_comma
0
-          options[:connector] = "#{options[:connector]} " unless options[:connector].nil? || options[:connector].strip == ''
0
+          default_words_connector = I18n.translate(:'support.array.words_connector', :locale => options[:locale])
0
+          default_two_words_connector = I18n.translate(:'support.array.two_words_connector', :locale => options[:locale])
0
+          default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale])
0
+          options.reverse_merge! :words_connector => default_words_connector, :two_words_connector => default_two_words_connector, :last_word_connector => default_last_word_connector
0
 
0
           case length
0
             when 0
0
@@ -19,9 +20,9 @@ module ActiveSupport #:nodoc:
0
             when 1
0
               self[0].to_s
0
             when 2
0
-              "#{self[0]} #{options[:connector]}#{self[1]}"
0
+              "#{self[0]}#{options[:two_words_connector]}#{self[1]}"
0
             else
0
-              "#{self[0...-1].join(', ')}#{options[:skip_last_comma] ? '' : ','} #{options[:connector]}#{self[-1]}"
0
+              "#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}"
0
           end
0
         end
0
         
...
28
29
30
31
32
 
 
 
...
28
29
30
 
 
31
32
33
0
@@ -28,5 +28,6 @@ en:
0
 # Used in array.to_sentence.
0
   support:
0
     array:
0
-      sentence_connector: "and"
0
-      skip_last_comma: false
0
+      words_connector: ", "
0
+      two_words_connector: " and "
0
+      last_word_connector: ", and "
...
55
56
57
58
59
60
61
62
63
 
 
 
 
64
65
66
67
 
 
 
 
 
68
69
70
71
72
 
73
74
75
...
55
56
57
 
 
 
 
 
 
58
59
60
61
62
63
 
 
64
65
66
67
68
69
70
71
72
 
73
74
75
76
0
@@ -55,21 +55,22 @@ class ArrayExtToSentenceTests < Test::Unit::TestCase
0
     assert_equal "one, two, and three", ['one', 'two', 'three'].to_sentence
0
   end
0
 
0
-  def test_to_sentence_with_connector
0
-    assert_equal "one, two, and also three", ['one', 'two', 'three'].to_sentence(:connector => 'and also')
0
-    assert_equal "one, two, three", ['one', 'two', 'three'].to_sentence(:connector => '')
0
-    assert_equal "one, two, three", ['one', 'two', 'three'].to_sentence(:connector => nil)
0
-    assert_equal "one, two,  three", ['one', 'two', 'three'].to_sentence(:connector => ' ')
0
-    assert_equal "one, two, and  three", ['one', 'two', 'three'].to_sentence(:connector => 'and ')
0
+  def test_to_sentence_with_words_connector
0
+    assert_equal "one two, and three", ['one', 'two', 'three'].to_sentence(:words_connector => ' ')
0
+    assert_equal "one & two, and three", ['one', 'two', 'three'].to_sentence(:words_connector => ' & ')
0
+    assert_equal "onetwo, and three", ['one', 'two', 'three'].to_sentence(:words_connector => nil)
0
   end
0
 
0
-  def test_to_sentence_with_skip_last_comma
0
-    assert_equal "one, two, and three", ['one', 'two', 'three'].to_sentence(:skip_last_comma => false)
0
+  def test_to_sentence_with_last_word_connector
0
+    assert_equal "one, two, and also three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ', and also ')
0
+    assert_equal "one, twothree", ['one', 'two', 'three'].to_sentence(:last_word_connector => nil)
0
+    assert_equal "one, two three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ' ')
0
+    assert_equal "one, two and three", ['one', 'two', 'three'].to_sentence(:last_word_connector => ' and ')
0
   end
0
 
0
   def test_two_elements
0
     assert_equal "one and two", ['one', 'two'].to_sentence
0
-    assert_equal "one two", ['one', 'two'].to_sentence(:connector => '')
0
+    assert_equal "one two", ['one', 'two'].to_sentence(:two_words_connector => ' ')
0
   end
0
 
0
   def test_one_element
...
71
72
73
74
75
 
 
76
77
78
79
 
 
 
 
 
 
80
81
82
 
 
83
84
 
 
 
85
86
87
 
 
88
89
...
71
72
73
 
 
74
75
76
77
 
 
78
79
80
81
82
83
84
85
86
87
88
89
 
90
91
92
93
94
 
95
96
97
98
0
@@ -71,19 +71,28 @@ class I18nTest < Test::Unit::TestCase
0
     assert_equal 'pm', I18n.translate(:'time.pm')
0
   end
0
 
0
-  def test_sentence_connector
0
-    assert_equal 'and', I18n.translate(:'support.array.sentence_connector')
0
+  def test_words_connector
0
+    assert_equal ', ', I18n.translate(:'support.array.words_connector')
0
   end
0
 
0
-  def test_skip_last_comma
0
-    assert_equal false, I18n.translate(:'support.array.skip_last_comma')
0
+  def test_two_words_connector
0
+    assert_equal ' and ', I18n.translate(:'support.array.two_words_connector')
0
+  end
0
+
0
+  def test_last_word_connector
0
+    assert_equal ', and ', I18n.translate(:'support.array.last_word_connector')
0
   end
0
 
0
   def test_to_sentence
0
+    default_two_words_connector = I18n.translate(:'support.array.two_words_connector')
0
+    default_last_word_connector = I18n.translate(:'support.array.last_word_connector')
0
     assert_equal 'a, b, and c', %w[a b c].to_sentence
0
-    I18n.backend.store_translations 'en', :support => { :array => { :skip_last_comma => true } }
0
+    I18n.backend.store_translations 'en', :support => { :array => { :two_words_connector => ' & ' } }
0
+    assert_equal 'a & b', %w[a b].to_sentence
0
+    I18n.backend.store_translations 'en', :support => { :array => { :last_word_connector => ' and ' } }
0
     assert_equal 'a, b and c', %w[a b c].to_sentence
0
   ensure
0
-    I18n.backend.store_translations 'en', :support => { :array => { :skip_last_comma => false } }
0
+    I18n.backend.store_translations 'en', :support => { :array => { :two_words_connector => default_two_words_connector } }
0
+    I18n.backend.store_translations 'en', :support => { :array => { :last_word_connector => default_last_word_connector } }
0
   end
0
 end

Comments