X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fstdlib%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Frange.rb;h=a309b78c311e86084ebd54147c2100f1ce617754;hb=30caaa85aed7015ca0d77216bff175eebd917eb7;hp=72c373a9c5434b7c1304676a8f30133a1f100630;hpb=6963202b4b62c2816655ac9532521b018fdf83bd;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb b/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb index 72c373a9c..a309b78c3 100644 --- a/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb +++ b/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb @@ -1,43 +1,50 @@ # # range.rb # - # TODO(Krzysztof Wilczynski): We probably need to approach numeric values differently ... - module Puppet::Parser::Functions - newfunction(:range, :type => :rvalue, :doc => <<-EOS -When given range in the form of (start, stop) it will extrapolate a range as -an array. + newfunction(:range, :type => :rvalue, :doc => <<-DOC + @summary + When given range in the form of (start, stop) it will extrapolate a range as + an array. -*Examples:* + @return + the range is extrapolated as an array - range("0", "9") + @example **Usage** + range("0", "9") + Will return: [0,1,2,3,4,5,6,7,8,9] -Will return: [0,1,2,3,4,5,6,7,8,9] + range("00", "09") + Will return: [0,1,2,3,4,5,6,7,8,9] + (Zero padded strings are converted to integers automatically) - range("00", "09") + range("a", "c") + Will return: ["a","b","c"] -Will return: [0,1,2,3,4,5,6,7,8,9] (Zero padded strings are converted to -integers automatically) + range("host01", "host10") + Will return: ["host01", "host02", ..., "host09", "host10"] - range("a", "c") + range("0", "9", "2") + Will return: [0,2,4,6,8] -Will return: ["a","b","c"] + NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail. - range("host01", "host10") -Will return: ["host01", "host02", ..., "host09", "host10"] -NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail. + > *Note:* + Passing a third argument will cause the generated range to step by that + interval, e.g. -Passing a third argument will cause the generated range to step by that -interval, e.g. + The Puppet Language support Integer and Float ranges by using the type system. Those are suitable for + iterating a given number of times. - range("0", "9", "2") + @see + the step() function in Puppet for skipping values. -Will return: [0,2,4,6,8] - EOS - ) do |arguments| + Integer[0, 9].each |$x| { notice($x) } # notices 0, 1, 2, ... 9 + DOC + ) do |arguments| - raise(Puppet::ParseError, 'range(): Wrong number of arguments given (0 for 1)') if arguments.size == 0 + raise(Puppet::ParseError, 'range(): Wrong number of arguments given (0 for 1)') if arguments.empty? if arguments.size > 1 start = arguments[0] @@ -49,13 +56,14 @@ Will return: [0,2,4,6,8] else # arguments.size == 1 value = arguments[0] - if m = value.match(/^(\w+)(\.\.\.?|\-)(\w+)$/) + m = value.match(%r{^(\w+)(\.\.\.?|\-)(\w+)$}) + if m start = m[1] stop = m[3] type = m[2] step = 1 - elsif value.match(/^.+$/) + elsif value =~ %r{^.+$} raise(Puppet::ParseError, "range(): Unable to compute range from the value: #{value}") else raise(Puppet::ParseError, "range(): Unknown range format: #{value}") @@ -63,7 +71,7 @@ Will return: [0,2,4,6,8] end # If we were given an integer, ensure we work with one - if start.to_s.match(/^\d+$/) + if start.to_s =~ %r{^\d+$} start = start.to_i stop = stop.to_i else @@ -72,11 +80,11 @@ Will return: [0,2,4,6,8] end range = case type - when /^(\.\.|\-)$/ then (start .. stop) - when '...' then (start ... stop) # Exclusive of last element - end + when %r{^(..|-)$} then (start..stop) + when '...' then (start...stop) # Exclusive of last element + end - result = range.step(step).to_a + result = range.step(step).first(1_000_000).to_a return result end