From 74d7d02ed07740e50c3f87da9ecedf13397729ea Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Tue, 30 Jun 2009 00:41:58 +0200 Subject: 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(). --- lib/rbot/core/utils/extends.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'lib') 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) -- cgit v1.2.3