From 735db82bef56bf939c971ab76a66647269d6ae35 Mon Sep 17 00:00:00 2001 From: Tomas Doran Date: Tue, 19 Nov 2013 18:38:12 +0000 Subject: Allow a single argument, rather than an array --- lib/puppet/parser/functions/ensure_packages.rb | 3 +-- spec/functions/ensure_packages_spec.rb | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/puppet/parser/functions/ensure_packages.rb b/lib/puppet/parser/functions/ensure_packages.rb index 450ea02..371d63a 100644 --- a/lib/puppet/parser/functions/ensure_packages.rb +++ b/lib/puppet/parser/functions/ensure_packages.rb @@ -11,8 +11,7 @@ Takes a list of packages and only installs them if they don't already exist. raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments " + "given (#{arguments.size} for 1)") if arguments.size != 1 - raise(Puppet::ParseError, "ensure_packages(): Requires array " + - "given (#{arguments[0].class})") if !arguments[0].kind_of?(Array) + arguments[0] = [ arguments[0] ] unless arguments[0].kind_of?(Array) Puppet::Parser::Functions.function(:ensure_resource) arguments[0].each { |package_name| diff --git a/spec/functions/ensure_packages_spec.rb b/spec/functions/ensure_packages_spec.rb index 6fd56d5..f6272af 100644 --- a/spec/functions/ensure_packages_spec.rb +++ b/spec/functions/ensure_packages_spec.rb @@ -13,8 +13,9 @@ describe 'ensure_packages' do it 'requires an array' do lambda { scope.function_ensure_packages([['foo']]) }.should_not raise_error end - it 'fails when given a string' do - should run.with_params('foo').and_raise_error(Puppet::ParseError) + + it 'accepts a single package name as a string' do + scope.function_ensure_packages(['foo']) end end -- cgit v1.2.3 From 686a05aea20eb45560698caaad5c9f2f01821ae6 Mon Sep 17 00:00:00 2001 From: Adrien Thebo Date: Wed, 15 Jan 2014 11:03:49 -0800 Subject: (maint) refactor ensure_packages for clarity --- lib/puppet/parser/functions/ensure_packages.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/puppet/parser/functions/ensure_packages.rb b/lib/puppet/parser/functions/ensure_packages.rb index 371d63a..1e0f225 100644 --- a/lib/puppet/parser/functions/ensure_packages.rb +++ b/lib/puppet/parser/functions/ensure_packages.rb @@ -1,7 +1,6 @@ # # ensure_packages.rb # -require 'puppet/parser/functions' module Puppet::Parser::Functions newfunction(:ensure_packages, :type => :statement, :doc => <<-EOS @@ -9,12 +8,15 @@ Takes a list of packages and only installs them if they don't already exist. EOS ) do |arguments| - raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments " + - "given (#{arguments.size} for 1)") if arguments.size != 1 - arguments[0] = [ arguments[0] ] unless arguments[0].kind_of?(Array) + if arguments.size != 1 + raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments " + + "given (#{arguments.size} for 1)") + end + + packages = Array(arguments[0]) Puppet::Parser::Functions.function(:ensure_resource) - arguments[0].each { |package_name| + packages.each { |package_name| function_ensure_resource(['package', package_name, {'ensure' => 'present' } ]) } end -- cgit v1.2.3 From 75341f01d921352caf98caaff7ac30dcb6b626ed Mon Sep 17 00:00:00 2001 From: Adrien Thebo Date: Wed, 15 Jan 2014 11:04:03 -0800 Subject: (maint) Update ensure_package specs to confirm expected behavior The previous behavior of the tests checked the behavior of the underlying functions library when called with no arguments; this commit updates the tests to conform to the functions API and test what happens when a function is called with no args. --- spec/functions/ensure_packages_spec.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spec/functions/ensure_packages_spec.rb b/spec/functions/ensure_packages_spec.rb index f6272af..a13c282 100644 --- a/spec/functions/ensure_packages_spec.rb +++ b/spec/functions/ensure_packages_spec.rb @@ -8,10 +8,13 @@ describe 'ensure_packages' do describe 'argument handling' do it 'fails with no arguments' do - should run.with_params().and_raise_error(Puppet::ParseError) + expect { + scope.function_ensure_packages([]) + }.to raise_error(Puppet::ParseError, /0 for 1/) end - it 'requires an array' do - lambda { scope.function_ensure_packages([['foo']]) }.should_not raise_error + + it 'accepts an array of values' do + scope.function_ensure_packages([['foo']]) end it 'accepts a single package name as a string' do -- cgit v1.2.3