module Enumerable

Public Instance Methods

conjoin(*args) { |i, *slice(i, 2)| ... } click to toggle source

This method is an advanced version of join allowing fine control of separators:

[1,2,3].conjoin(', ', ' and ')
=> "1, 2 and 3

[1,2,3,4].conjoin{ |i, a, b| i % 2 == 0 ? '.' : '-' }
=> "1.2-3.4"

Code lifted from the ruby facets project: <facets.rubyforge.org> git-rev: c8b7395255b977d3c7de268ff563e3c5bc7f1441 file: lib/core/facets/array/conjoin.rb

# File lib/rbot/core/utils/extends.rb, line 154
def conjoin(*args, &block)
  num = count - 1

  return first.to_s if num < 1

  sep = []

  if block_given?
    num.times do |i|
      sep << yield(i, *slice(i, 2))
    end
  else
    options = (Hash === args.last) ? args.pop : {}
    separator = args.shift || ""
    options[-1] = args.shift unless args.empty?

    sep = [separator] * num

    if options.key?(:last)
      options[-1] = options.delete(:last)
    end
    options[-1] ||= _(" and ")

    options.each{ |i, s| sep[i] = s }
  end

  zip(sep).join
end