X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Fstdlib%2Flib%2Fpuppet%2Fparser%2Ffunctions%2Fmember.rb;h=7efcb1f63ede779674f3509219840481af73cde9;hb=30caaa85aed7015ca0d77216bff175eebd917eb7;hp=fb93452181ebea0e60c2dd3cc669170a05860e70;hpb=6963202b4b62c2816655ac9532521b018fdf83bd;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/stdlib/lib/puppet/parser/functions/member.rb b/3rdparty/modules/stdlib/lib/puppet/parser/functions/member.rb index fb9345218..7efcb1f63 100644 --- a/3rdparty/modules/stdlib/lib/puppet/parser/functions/member.rb +++ b/3rdparty/modules/stdlib/lib/puppet/parser/functions/member.rb @@ -1,34 +1,40 @@ +# TODO(Krzysztof Wilczynski): We need to add support for regular expression ... +# TODO(Krzysztof Wilczynski): Support for strings and hashes too ... # # member.rb # - -# TODO(Krzysztof Wilczynski): We need to add support for regular expression ... -# TODO(Krzysztof Wilczynski): Support for strings and hashes too ... - module Puppet::Parser::Functions - newfunction(:member, :type => :rvalue, :doc => <<-EOS -This function determines if a variable is a member of an array. -The variable can be a string, fixnum, or array. - -*Examples:* - - member(['a','b'], 'b') - -Would return: true - - member(['a', 'b', 'c'], ['a', 'b']) - -would return: true - - member(['a','b'], 'c') - -Would return: false - - member(['a', 'b', 'c'], ['d', 'b']) - -would return: false - EOS - ) do |arguments| + newfunction(:member, :type => :rvalue, :doc => <<-DOC + @summary + This function determines if a variable is a member of an array. + + The variable can be a string, fixnum, or array. + + > **Note**: This function does not support nested arrays. If the first argument contains + nested arrays, it will not recurse through them. + + @example **Usage** + member(['a','b'], 'b') # Returns: true + member(['a', 'b', 'c'], ['a', 'b']) # Returns: true + member(['a','b'], 'c') # Returns: false + member(['a', 'b', 'c'], ['d', 'b']) # Returns: false + + > *Note:* + Since Puppet 4.0.0 the same can be performed in the Puppet language. + For single values the operator `in` can be used: + `'a' in ['a', 'b'] # true` + For arrays by using operator `-` to compute a diff: + `['d', 'b'] - ['a', 'b', 'c'] == [] # false because 'd' is not subtracted` + `['a', 'b'] - ['a', 'b', 'c'] == [] # true because both 'a' and 'b' are subtracted` + + @return + Returns whether the given value was a member of the array + + > **Note** that since Puppet 5.2.0, the general form to test the content of an array or + hash is to use the built-in [`any`](https://puppet.com/docs/puppet/latest/function.html#any) + and [`all`](https://puppet.com/docs/puppet/latest/function.html#all) functions. + DOC + ) do |arguments| raise(Puppet::ParseError, "member(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2 @@ -38,16 +44,15 @@ would return: false raise(Puppet::ParseError, 'member(): Requires array to work with') end - unless arguments[1].is_a? String or arguments[1].is_a? Fixnum or arguments[1].is_a? Array + unless arguments[1].is_a?(String) || arguments[1].is_a?(Integer) || arguments[1].is_a?(Array) raise(Puppet::ParseError, 'member(): Item to search for must be a string, fixnum, or array') end - if arguments[1].is_a? String or arguments[1].is_a? Fixnum - item = [arguments[1]] - else - item = arguments[1] - end - + item = if arguments[1].is_a?(String) || arguments[1].is_a?(Integer) + [arguments[1]] + else + arguments[1] + end raise(Puppet::ParseError, 'member(): You must provide item to search for within array given') if item.respond_to?('empty?') && item.empty?