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=49fba21c803545f10143425c106aa7206f8c0a26;hpb=ad88f67c13ae0f1a08936dad643f1e3509ab5f40;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 49fba21c8..a309b78c3 100644 --- a/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb +++ b/3rdparty/modules/stdlib/lib/puppet/parser/functions/range.rb @@ -1,72 +1,77 @@ # # 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. - -*Examples:* + newfunction(:range, :type => :rvalue, :doc => <<-DOC + @summary + When given range in the form of (start, stop) it will extrapolate a range as + an array. - range("0", "9") + @return + the range is extrapolated as an array -Will return: [0,1,2,3,4,5,6,7,8,9] + @example **Usage** + range("0", "9") + Will return: [0,1,2,3,4,5,6,7,8,9] - range("00", "09") + range("00", "09") + Will return: [0,1,2,3,4,5,6,7,8,9] + (Zero padded strings are converted to integers automatically) -Will return: [0,1,2,3,4,5,6,7,8,9] (Zero padded strings are converted to -integers automatically) + range("a", "c") + Will return: ["a","b","c"] - range("a", "c") + range("host01", "host10") + Will return: ["host01", "host02", ..., "host09", "host10"] -Will return: ["a","b","c"] + range("0", "9", "2") + Will return: [0,2,4,6,8] - range("host01", "host10") + NB Be explicit in including trailing zeros. Otherwise the underlying ruby function will fail. -Will return: ["host01", "host02", ..., "host09", "host10"] + > *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| - # We support more than one argument but at least one is mandatory ... - raise(Puppet::ParseError, "range(): Wrong number of " + - "arguments given (#{arguments.size} for 1)") if arguments.size < 1 + raise(Puppet::ParseError, 'range(): Wrong number of arguments given (0 for 1)') if arguments.empty? 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 ... + type = '..' # Use the simplest type of Range available in Ruby - elsif arguments.size > 0 + 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] - - elsif value.match(/^.+$/) - raise(Puppet::ParseError, 'range(): Unable to compute range ' + - 'from the value given') + step = 1 + elsif value =~ %r{^.+$} + raise(Puppet::ParseError, "range(): Unable to compute range from the value: #{value}") else - raise(Puppet::ParseError, 'range(): Unknown format of range given') + raise(Puppet::ParseError, "range(): Unknown range format: #{value}") end end - # Check whether we have integer value if so then make it so ... - if start.to_s.match(/^\d+$/) + # If we were given an integer, ensure we work with one + if start.to_s =~ %r{^\d+$} start = start.to_i stop = stop.to_i else @@ -75,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).collect { |i| i } # Get them all ... Pokemon ... + result = range.step(step).first(1_000_000).to_a return result end