diff options
author | Ashley Penney <ashley.penney@puppetlabs.com> | 2014-04-24 13:41:42 -0400 |
---|---|---|
committer | Ashley Penney <ashley.penney@puppetlabs.com> | 2014-04-24 13:41:42 -0400 |
commit | 0b59dfe64299abd0c7e9a72dd381341cb9a5c260 (patch) | |
tree | 99cc4528510d943bd201ef0579e1e7598f2d0042 | |
parent | f42fc4bfd8a689ad28a20f976cb3fdc4a889477c (diff) | |
parent | 35bf5fd8c93d5052ecf5284ed3194a92cab838d5 (diff) |
Merge pull request #222 from mfoo/fix/master/concat-primitives
Allow concat to take non-array second parameters
-rw-r--r-- | README.markdown | 5 | ||||
-rw-r--r-- | lib/puppet/parser/functions/concat.rb | 10 | ||||
-rw-r--r-- | spec/unit/puppet/parser/functions/concat_spec.rb | 19 |
3 files changed, 29 insertions, 5 deletions
diff --git a/README.markdown b/README.markdown index 3723173..e9ad53b 100644 --- a/README.markdown +++ b/README.markdown @@ -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 diff --git a/lib/puppet/parser/functions/concat.rb b/lib/puppet/parser/functions/concat.rb index c86aa00..6c86382 100644 --- a/lib/puppet/parser/functions/concat.rb +++ b/lib/puppet/parser/functions/concat.rb @@ -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 diff --git a/spec/unit/puppet/parser/functions/concat_spec.rb b/spec/unit/puppet/parser/functions/concat_spec.rb index 123188b..6e67620 100644 --- a/spec/unit/puppet/parser/functions/concat_spec.rb +++ b/spec/unit/puppet/parser/functions/concat_spec.rb @@ -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 |