Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / member.rb
index fb93452..7efcb1f 100644 (file)
@@ -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?