Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / count.rb
index 52de1b8..c302aa1 100644 (file)
@@ -1,22 +1,41 @@
+#
+# count.rb
+#
 module Puppet::Parser::Functions
-  newfunction(:count, :type => :rvalue, :arity => -2, :doc => <<-EOS
-Takes an array as first argument and an optional second argument.
-Count the number of elements in array that matches second argument.
-If called with only an array it counts the number of elements that are not nil/undef.
-    EOS
-  ) do |args|
-
-    if (args.size > 2) then
-      raise(ArgumentError, "count(): Wrong number of arguments "+
-        "given #{args.size} for 1 or 2.")
+  newfunction(:count, :type => :rvalue, :arity => -2, :doc => <<-DOC
+    @summary
+      Counts the number of elements in array.
+
+    Takes an array as first argument and an optional second argument. Counts the number of elements in array that is equal to the second argument.
+    If called with only an array, it counts the number of elements that are not nil/undef/empty-string.
+
+    > *Note:*
+      equality is tested with a Ruby method and it is therefore subject to what Ruby considers
+      to be equal. For strings this means that equality is case sensitive.
+
+    In Puppet core, counting can be done in general by using a combination of the core functions
+    filter() (since Puppet 4.0.0) and length() (since Puppet 5.5.0, before that in stdlib).
+
+    Example below shows counting values that are not undef.
+
+      ```notice([42, "hello", undef].filter |$x| { $x =~ NotUndef }.length)```
+
+    Would notice the value 2.
+
+    @return [Integer] The amount of elements counted within the array
+  DOC
+             ) do |args|
+
+    if args.size > 2
+      raise(ArgumentError, "count(): Wrong number of arguments given #{args.size} for 1 or 2.")
     end
 
     collection, item = args
 
-    if item then
+    if item
       collection.count item
     else
-      collection.count { |obj| obj != nil && obj != :undef && obj != '' }
+      collection.count { |obj| !obj.nil? && obj != :undef && obj != '' }
     end
   end
 end