Skip to content

Commit

Permalink
Merge pull request #25811 from oss92/to_sentence_fallback_string
Browse files Browse the repository at this point in the history
Added :fallback_string option to Array#to_sentence
  • Loading branch information
rafaelfranca committed Jul 17, 2016
2 parents 2384317 + b937c24 commit bad3a12
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
6 changes: 6 additions & 0 deletions activesupport/CHANGELOG.md
@@ -1,3 +1,9 @@
* Add `:fallback_string` option to `Array#to_sentence`. If an empty array
calls the function and a fallback string option is set then it returns the
fallback string other than an empty string.

*Mohamed Osama*

* Fix `ActiveSupport::TimeZone#strptime`. Now raises `ArgumentError` when the
given time doesn't match the format. The error is the same as the one given
by Ruby's `Date.strptime`. Previously it raised
Expand Down
10 changes: 8 additions & 2 deletions activesupport/lib/active_support/core_ext/array/conversions.rb
Expand Up @@ -40,6 +40,12 @@ class Array
# ['one', 'two', 'three'].to_sentence(words_connector: ' or ', last_word_connector: ' or at least ')
# # => "one or two or at least three"
#
# [].to_sentence(fallback_string: 'none')
# # => "none"
#
# ['one', 'two'].to_sentence(fallback_string: 'none')
# # => "one and two"
#
# Using <tt>:locale</tt> option:
#
# # Given this locale dictionary:
Expand All @@ -57,7 +63,7 @@ class Array
# ['uno', 'dos', 'tres'].to_sentence(locale: :es)
# # => "uno o dos o al menos tres"
def to_sentence(options = {})
options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale)
options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale, :fallback_string)

default_connectors = {
:words_connector => ', ',
Expand All @@ -72,7 +78,7 @@ def to_sentence(options = {})

case length
when 0
''
"#{options[:fallback_string] || ''}"
when 1
"#{self[0]}"
when 2
Expand Down
7 changes: 6 additions & 1 deletion activesupport/test/core_ext/array/conversions_test.rb
Expand Up @@ -25,6 +25,11 @@ def test_to_sentence_with_last_word_connector
assert_equal "one, two and three", ['one', 'two', 'three'].to_sentence(last_word_connector: ' and ')
end

def test_to_sentence_with_fallback_string
assert_equal "none", [].to_sentence(fallback_string: 'none')
assert_equal "one, two, and three", ['one', 'two', 'three'].to_sentence(fallback_string: 'none')
end

def test_two_elements
assert_equal "one and two", ['one', 'two'].to_sentence
assert_equal "one two", ['one', 'two'].to_sentence(two_words_connector: ' ')
Expand Down Expand Up @@ -58,7 +63,7 @@ def test_with_invalid_options
['one', 'two'].to_sentence(passing: 'invalid option')
end

assert_equal exception.message, "Unknown key: :passing. Valid keys are: :words_connector, :two_words_connector, :last_word_connector, :locale"
assert_equal exception.message, "Unknown key: :passing. Valid keys are: :words_connector, :two_words_connector, :last_word_connector, :locale, :fallback_string"
end

def test_always_returns_string
Expand Down

0 comments on commit bad3a12

Please sign in to comment.