]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(MODULES-1329) Allow member function to look for array
authorYanis Guenane <yguenane@gmail.com>
Mon, 15 Sep 2014 18:16:52 +0000 (14:16 -0400)
committerYanis Guenane <yanis.guenane@enovance.com>
Wed, 12 Nov 2014 19:40:34 +0000 (14:40 -0500)
Currently, the member function allows one to only find if a variable
is part of an array. Sometimes it is useful to find if an array is part
of a bigger array for validation purpose.

lib/puppet/parser/functions/member.rb
spec/functions/member_spec.rb

index 11a1d2495725a8c5a8c624dd5a10a3cffa055f52..bb19a86ce17792d20979adb6978389aee73d7f55 100644 (file)
@@ -8,6 +8,7 @@
 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 either be a string or an array.
 
 *Examples:*
 
@@ -15,9 +16,17 @@ This function determines if a variable is a member of an array.
 
 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|
 
@@ -30,13 +39,17 @@ Would return: false
       raise(Puppet::ParseError, 'member(): Requires array to work with')
     end
 
-    item = arguments[1]
+    if arguments[1].is_a? String
+      item = Array(arguments[1])
+    else
+      item = arguments[1]
+    end
 
 
     raise(Puppet::ParseError, 'member(): You must provide item ' +
       'to search for within array given') if item.respond_to?('empty?') && item.empty?
 
-    result = array.include?(item)
+    result = (item - array).empty?
 
     return result
   end
index cee611082fe84ae8b244f9ac59ceb4eb5469ac19..1a1d7c66025b852b37420a652bf3cc038e08e012 100755 (executable)
@@ -21,4 +21,14 @@ describe "the member function" do
     result = scope.function_member([["a","b","c"], "d"])
     expect(result).to(eq(false))
   end
+
+  it "should return true if a member array is in an array" do
+    result = scope.function_member([["a","b","c"], ["a", "b"]])
+    expect(result).to(eq(true))
+  end
+
+  it "should return false if a member array is not in an array" do
+    result = scope.function_member([["a","b","c"], ["d", "e"]])
+    expect(result).to(eq(false))
+  end
 end