class Array
def to_sentence(options = {})
['uno', 'dos', 'tres'].to_sentence(locale: :es)
# => "uno y dos"
['uno', 'dos'].to_sentence(locale: :es)
# last_word_connector: " o al menos "
# two_words_connector: " y "
# words_connector: " o "
# array:
# support:
# es:
#
# Given this locale dictionary:
Using :locale option:
# => "one or two or at least three"
['one', 'two', 'three'].to_sentence(words_connector: ' or ', last_word_connector: ' or at least ')
# => "one-two"
['one', 'two'].to_sentence(two_words_connector: '-')
# => ArgumentError: Unknown key: :passing. Valid keys are: :words_connector, :two_words_connector, :last_word_connector, :locale
['one', 'two'].to_sentence(passing: 'invalid option')
['one', 'two', 'three'].to_sentence # => "one, two, and three"
['one', 'two'].to_sentence # => "one and two"
['one'].to_sentence # => "one"
[].to_sentence # => ""
==== Examples
corresponding dictionary file.
the connector options defined on the 'support.array' namespace in the
* :locale - If +i18n+ is available, you can set a locale and use
in arrays with two elements (default: " and ").
* :two_words_connector - The sign or word used to join the elements
in arrays with three or more elements (default: ", and ").
* :last_word_connector - The sign or word used to join the last element
element in arrays with three or more elements (default: ", ").
* :words_connector - The sign or word used to join all but the last
==== Options
ArgumentError.
pass an option key that doesn't exist in the list below, it will raise an
You can pass the following options to change the default behavior. If you
joined by the connector word.
Converts the array to a comma-separated sentence where the last element is
def to_sentence(options = {}) options.assert_valid_keys(:words_connector, :two_words_connector, :last_word_connector, :locale) default_connectors = { words_connector: ", ", two_words_connector: " and ", last_word_connector: ", and " } if options[:locale] != false && defined?(I18n) i18n_connectors = I18n.translate(:'support.array', locale: options[:locale], default: {}) default_connectors.merge!(i18n_connectors) end options = default_connectors.merge!(options) case length when 0 +"" when 1 +"#{self[0]}" when 2 +"#{self[0]}#{options[:two_words_connector]}#{self[1]}" else +"#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}" end end