]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Add support for hashes in the prefix function
authorStefan Goethals <stefan@zipkid.eu>
Wed, 4 Jun 2014 13:12:22 +0000 (06:12 -0700)
committerMorgan Haskel <morgan@puppetlabs.com>
Wed, 4 Mar 2015 00:20:55 +0000 (16:20 -0800)
Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
README.markdown
lib/puppet/parser/functions/prefix.rb
spec/functions/prefix_spec.rb

index ac0cae69f3036c724164fbccf441e8d8280b25b7..3a33d48becacd0b4b7eab689cc96a1106542225d 100644 (file)
@@ -360,7 +360,7 @@ returns the value of the resource's parameter. For example, the following code r
 
  *Type*: rvalue
 
-* `prefix`: This function applies a prefix to all elements in an array. For example, `prefix(['a','b','c'], 'p')` returns ['pa','pb','pc']. *Type*: rvalue
+* `prefix`: This function applies a prefix to all elements in an array or to the keys in a hash. For example, `prefix(['a','b','c'], 'p')` returns ['pa','pb','pc'], and `prefix({'a'=>'b','b'=>'c','c'=>'d'}, 'p')` returns {'pa'=>'b','pb'=>'c','pc'=>'d'}. *Type*: rvalue
 
 
 * `private`: This function sets the current class or definition as private.
@@ -453,7 +453,6 @@ manifests as a valid password attribute. *Type*: rvalue
     * `%Z`: Time zone name
     * `%%`: Literal '%' character
 
-
 * `strip`: This function removes leading and trailing whitespace from a string or from every string inside an array. For example, `strip("    aaa   ")` results in "aaa". *Type*: rvalue
 
 * `suffix`: This function applies a suffix to all elements in an array. For example, `suffix(['a','b','c'], 'p')` returns ['ap','bp','cp']. *Type*: rvalue
index d02286afac344c7e7db1a32b094633b29aa150ff..ac1c58a554e29c7d01fff286321d30af49df8069 100644 (file)
@@ -4,7 +4,7 @@
 
 module Puppet::Parser::Functions
   newfunction(:prefix, :type => :rvalue, :doc => <<-EOS
-This function applies a prefix to all elements in an array.
+This function applies a prefix to all elements in an array or a hash.
 
 *Examples:*
 
@@ -18,10 +18,10 @@ Will return: ['pa','pb','pc']
     raise(Puppet::ParseError, "prefix(): Wrong number of arguments " +
       "given (#{arguments.size} for 1)") if arguments.size < 1
 
-    array = arguments[0]
+    enumerable = arguments[0]
 
-    unless array.is_a?(Array)
-      raise Puppet::ParseError, "prefix(): expected first argument to be an Array, got #{array.inspect}"
+    unless enumerable.is_a?(Array) or enumerable.is_a?(Hash)
+      raise Puppet::ParseError, "prefix(): expected first argument to be an Array or a Hash, got #{enumerable.inspect}"
     end
 
     prefix = arguments[1] if arguments[1]
@@ -32,10 +32,17 @@ Will return: ['pa','pb','pc']
       end
     end
 
-    # Turn everything into string same as join would do ...
-    result = array.collect do |i|
-      i = i.to_s
-      prefix ? prefix + i : i
+    if enumerable.is_a?(Array)
+      # Turn everything into string same as join would do ...
+      result = enumerable.collect do |i|
+        i = i.to_s
+        prefix ? prefix + i : i
+      end
+    else
+      result = Hash[enumerable.map do |k,v|
+        k = k.to_s
+        [ prefix ? prefix + k : k, v ]
+      end]
     end
 
     return result
index 34cac53050485277c86ba88b8518b3c16a468a59..aec8a7d983c09bc6ae911f4fed31fe0b920fccdb 100755 (executable)
@@ -25,4 +25,9 @@ describe "the prefix function" do
     result = scope.function_prefix([['a','b','c'], 'p'])
     expect(result).to(eq(['pa','pb','pc']))
   end
+
+  it "returns a prefixed hash" do
+    result = scope.function_prefix([{'a' => 'b','b' => 'c','c' => 'd'}, 'p'])
+    expect(result).to(eq({'pa'=>'b','pb'=>'c','pc'=>'d'}))
+  end
 end