X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fstdlib%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fdelete_at.rb;h=992d7d8d6d77410812c741939c41c66291f5b476;hb=30caaa85aed7015ca0d77216bff175eebd917eb7;hp=3eb4b53756a097f53adcbe3f678b51965d3b06bb;hpb=ad88f67c13ae0f1a08936dad643f1e3509ab5f40;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/stdlib/lib/puppet/parser/functions/delete_at.rb b/3rdparty/modules/stdlib/lib/puppet/parser/functions/delete_at.rb index 3eb4b5375..992d7d8d6 100644 --- a/3rdparty/modules/stdlib/lib/puppet/parser/functions/delete_at.rb +++ b/3rdparty/modules/stdlib/lib/puppet/parser/functions/delete_at.rb @@ -1,21 +1,35 @@ # # delete_at.rb # - module Puppet::Parser::Functions - newfunction(:delete_at, :type => :rvalue, :doc => <<-EOS -Deletes a determined indexed value from an array. + newfunction(:delete_at, :type => :rvalue, :doc => <<-DOC) do |arguments| + @summary + Deletes a determined indexed value from an array. + + For example + ```delete_at(['a','b','c'], 1)``` + + Would return: `['a','c']` + + > *Note:* + Since Puppet 4 this can be done in general with the built-in + [`filter`](https://puppet.com/docs/puppet/latest/function.html#filter) function: + + ```['a', 'b', 'c'].filter |$pos, $val | { $pos != 1 }``` -*Examples:* + Or if a delete is wanted from the beginning or end of the array, by using the slice operator [ ]: + ``` + $array[0, -1] # the same as all the values + $array[2, -1] # all but the first 2 elements + $array[0, -3] # all but the last 2 elements + $array[1, -2] # all but the first and last element + ``` - delete_at(['a','b','c'], 1) + @return [Array] The given array, now missing the target value -Would return: ['a','c'] - EOS - ) do |arguments| + DOC - raise(Puppet::ParseError, "delete_at(): Wrong number of arguments " + - "given (#{arguments.size} for 2)") if arguments.size < 2 + raise(Puppet::ParseError, "delete_at(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 array = arguments[0] @@ -25,9 +39,8 @@ Would return: ['a','c'] index = arguments[1] - if index.is_a?(String) and not index.match(/^\d+$/) - raise(Puppet::ParseError, 'delete_at(): You must provide ' + - 'non-negative numeric index') + if index.is_a?(String) && !index.match(%r{^\d+$}) + raise(Puppet::ParseError, 'delete_at(): You must provide non-negative numeric index') end result = array.clone @@ -36,8 +49,7 @@ Would return: ['a','c'] index = index.to_i if index > result.size - 1 # First element is at index 0 is it not? - raise(Puppet::ParseError, 'delete_at(): Given index ' + - 'exceeds size of array given') + raise(Puppet::ParseError, 'delete_at(): Given index exceeds size of array given') end result.delete_at(index) # We ignore the element that got deleted ...