class Array

def to_sentence(options = {})

# => "uno o dos o al menos tres"
['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