diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2009-06-30 00:41:58 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2009-06-30 00:41:58 +0200 |
commit | 74d7d02ed07740e50c3f87da9ecedf13397729ea (patch) | |
tree | 997bcef26d27af87cf4181f843fec84511fc389a /lib | |
parent | 561f183fb8c91867bade293c340a90a87a3b8c84 (diff) |
extends: bring conjoin to Enumerable
Put #conjoin() in the Enumerable module, so that it can be shared by all
enumerables (e.g. ranges). Since #size() is not necessarily present, its
use is replaced by #count(), the result of which is cached because
it can be slow on objects missing #size().
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rbot/core/utils/extends.rb | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/rbot/core/utils/extends.rb b/lib/rbot/core/utils/extends.rb index 332a1629..fc7119fa 100644 --- a/lib/rbot/core/utils/extends.rb +++ b/lib/rbot/core/utils/extends.rb @@ -124,7 +124,9 @@ class ::Array replace shuffle end end +end +module ::Enumerable # This method is an advanced version of #join # allowing fine control of separators: # @@ -139,12 +141,14 @@ class ::Array # git-rev: c8b7395255b977d3c7de268ff563e3c5bc7f1441 # file: lib/core/facets/array/conjoin.rb def conjoin(*args, &block) - return first.to_s if size < 2 + num = count - 1 + + return first.to_s if num < 1 sep = [] if block_given? - (size - 1).times do |i| + num.times do |i| sep << yield(i, *slice(i, 2)) end else @@ -152,7 +156,7 @@ class ::Array separator = args.shift || "" options[-1] = args.shift unless args.empty? - sep = [separator] * (size - 1) + sep = [separator] * num if options.key?(:last) options[-1] = options.delete(:last) |