From 8cf011d7a27d696ebfac728cafc4f26e6d009fdd Mon Sep 17 00:00:00 2001 From: Eli Young Date: Tue, 5 May 2015 15:44:08 -0700 Subject: Revert "range: remove dead code" This reverts commit 063c58a992c1b5441b7e7b2a2e4886531035bb25, which actually removed non-dead code. Specifically, it removed the ability to make calls such as `range('2..3')`, `range('2...3')`, and `range('2-3')`. cf. https://github.com/puppetlabs/puppetlabs-stdlib/pull/443#commitcomment-11055565 --- lib/puppet/parser/functions/range.rb | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/parser/functions/range.rb b/lib/puppet/parser/functions/range.rb index 16d189f..49fba21 100644 --- a/lib/puppet/parser/functions/range.rb +++ b/lib/puppet/parser/functions/range.rb @@ -41,9 +41,29 @@ Will return: [0,2,4,6,8] raise(Puppet::ParseError, "range(): Wrong number of " + "arguments given (#{arguments.size} for 1)") if arguments.size < 1 - start = arguments[0] - stop = arguments[1] - step = arguments[2].nil? ? 1 : arguments[2].to_i.abs + if arguments.size > 1 + start = arguments[0] + stop = arguments[1] + step = arguments[2].nil? ? 1 : arguments[2].to_i.abs + + type = '..' # We select simplest type for Range available in Ruby ... + + elsif arguments.size > 0 + value = arguments[0] + + if m = value.match(/^(\w+)(\.\.\.?|\-)(\w+)$/) + start = m[1] + stop = m[3] + + type = m[2] + + elsif value.match(/^.+$/) + raise(Puppet::ParseError, 'range(): Unable to compute range ' + + 'from the value given') + else + raise(Puppet::ParseError, 'range(): Unknown format of range given') + end + end # Check whether we have integer value if so then make it so ... if start.to_s.match(/^\d+$/) @@ -54,10 +74,14 @@ Will return: [0,2,4,6,8] stop = stop.to_s end - # We select simplest type for Range available in Ruby ... - range = (start .. stop) + range = case type + when /^(\.\.|\-)$/ then (start .. stop) + when /^(\.\.\.)$/ then (start ... stop) # Exclusive of last element ... + end + + result = range.step(step).collect { |i| i } # Get them all ... Pokemon ... - range.step(step).collect { |i| i } # Get them all ... Pokemon ... + return result end end -- cgit v1.2.3