]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Revert "range: remove dead code"
authorEli Young <elyscape@gmail.com>
Tue, 5 May 2015 22:44:08 +0000 (15:44 -0700)
committerEli Young <elyscape@gmail.com>
Tue, 5 May 2015 23:06:08 +0000 (16:06 -0700)
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

index 16d189ffe1095c496b044dd9485a7c2bdb5a4d74..49fba21c803545f10143425c106aa7206f8c0a26 100644 (file)
@@ -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