]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
Allow concat to take non-array second parameters
authorMartin Foot <martin@modeltwozero.com>
Fri, 21 Feb 2014 14:32:32 +0000 (14:32 +0000)
committerMartin Foot <martin@modeltwozero.com>
Fri, 21 Feb 2014 15:48:27 +0000 (15:48 +0000)
Also improve and extend concat tests to lock down functionality

README.markdown
lib/puppet/parser/functions/concat.rb
spec/unit/puppet/parser/functions/concat_spec.rb

index 1e70f39049ee128b4d20b459c24170037611edd5..3a6c0cf4c89b99235205d2e5d83799a4f8bef7a7 100644 (file)
@@ -145,6 +145,11 @@ Would result in:
 
   ['1','2','3','4','5','6']
 
+  concat(['1','2','3'],'4')
+
+Would result in:
+
+  ['1','2','3','4']
 
 - *Type*: rvalue
 
index c86aa0057c1c0af26ef43c4cb8c5e1d12047b704..6c8638222ef00aeffbd3473bbed6aee2a51e268b 100644 (file)
@@ -23,12 +23,16 @@ Would result in:
     a = arguments[0]
     b = arguments[1]
 
-    # Check that both args are arrays.
-    unless a.is_a?(Array) and b.is_a?(Array)
+    # Check that the first parameter is an array
+    unless a.is_a?(Array)
       raise(Puppet::ParseError, 'concat(): Requires array to work with')
     end
 
-    result = a.concat(b)
+    if b.is_a?(Array)
+      result = a.concat(b)
+    else
+      result = a << b
+    end
 
     return result
   end
index 123188bd478e7422f3b342aca6e75164f3555540..6e67620966b025147bbbc6ce8eeaf12ca36cdd59 100644 (file)
@@ -4,12 +4,27 @@ require 'spec_helper'
 describe "the concat function" do
   let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
 
-  it "should raise a ParseError if there is less than 1 arguments" do
-    lambda { scope.function_concat([]) }.should( raise_error(Puppet::ParseError))
+  it "should raise a ParseError if the client does not provide two arguments" do
+    lambda { scope.function_concat([]) }.should(raise_error(Puppet::ParseError))
+  end
+
+  it "should raise a ParseError if the first parameter is not an array" do
+    lambda { scope.function_concat([1, []])}.should(raise_error(Puppet::ParseError))
   end
 
   it "should be able to concat an array" do
     result = scope.function_concat([['1','2','3'],['4','5','6']])
     result.should(eq(['1','2','3','4','5','6']))
   end
+
+  it "should be able to concat a primitive to an array" do
+    result = scope.function_concat([['1','2','3'],'4'])
+    result.should(eq(['1','2','3','4']))
+  end
+
+  it "should not accidentally flatten nested arrays" do
+    result = scope.function_concat([['1','2','3'],[['4','5'],'6']])
+    result.should(eq(['1','2','3',['4','5'],'6']))
+  end
+
 end