summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2009-06-30 00:41:58 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2009-06-30 00:41:58 +0200
commit74d7d02ed07740e50c3f87da9ecedf13397729ea (patch)
tree997bcef26d27af87cf4181f843fec84511fc389a
parent561f183fb8c91867bade293c340a90a87a3b8c84 (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().
-rw-r--r--lib/rbot/core/utils/extends.rb10
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)