diff options
author | Guido Günther <agx@sigxcpu.org> | 2014-04-15 20:34:54 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2014-04-15 21:29:38 +0200 |
commit | 6150e33e8c377089d7f05f18df015921dcc5e09d (patch) | |
tree | 22b6d6226bdd4b7f28afc76de5bc71205ea259b3 | |
parent | c0eab58bc6bcfb26275349d817bf8746902a221a (diff) |
Add validate_nonemptyarray
-rw-r--r-- | README.markdown | 24 | ||||
-rw-r--r-- | lib/puppet/parser/functions/validate_nonemptyarray.rb | 36 | ||||
-rw-r--r-- | spec/unit/puppet/parser/functions/validate_nonemptyarray_spec.rb | 55 |
3 files changed, 113 insertions, 2 deletions
diff --git a/README.markdown b/README.markdown index 447ef7f..fb8298e 100644 --- a/README.markdown +++ b/README.markdown @@ -7,8 +7,9 @@ of the standard library. It's called "stdlib minus minus". validate_nonemptystring ----------------------- -Validate that all passed values are strings with a length greater 0 and not undef. Abort catalog -compilation if any value fails this check. +Validate that all passed values are strings with a length greater 0 +and not undef. Abort catalog compilation if any value fails this +check. The following values will pass: @@ -22,3 +23,22 @@ The following values will fail, causing compilation to abort: $undefined = undef validate_nonemptystring($undefined) +validate_nonemptyarray +---------------------- +Validate that all passed values are array data structures. Abort +catalog compilation if any value fails this check. Also abort if any +of the arrays is empty. + +The following values will pass: + + $my_array = [ 'one', 'two' ] + validate_nonemptyarray($my_array) + +The following values will fail, causing compilation to abort: + + validate_nonemptyarray(true) + validate_nonemptyarray([]) + validate_nonemptyarray('some_string') + $undefined = undef + validate_nonemptyarray($undefined) + diff --git a/lib/puppet/parser/functions/validate_nonemptyarray.rb b/lib/puppet/parser/functions/validate_nonemptyarray.rb new file mode 100644 index 0000000..f9b3940 --- /dev/null +++ b/lib/puppet/parser/functions/validate_nonemptyarray.rb @@ -0,0 +1,36 @@ +module Puppet::Parser::Functions + + newfunction(:validate_nonemptyarray, :doc => <<-'ENDHEREDOC') do |args| + Validate that all passed values are array data structures. Abort catalog + compilation if any value fails this check. Also abort if any of the arrays + is empty. + + The following values will pass: + + $my_array = [ 'one', 'two' ] + validate_nonemptyarray($my_array) + + The following values will fail, causing compilation to abort: + + validate_nonemptyarray(true) + validate_nonemptyarray([]) + validate_nonemptyarray('some_string') + $undefined = undef + validate_nonemptyarray($undefined) + + ENDHEREDOC + + unless args.length > 0 then + raise Puppet::ParseError, ("validate_nonemptyarray(): wrong number of arguments (#{args.length}; must be > 0)") + end + + args.each do |arg| + unless arg.is_a?(Array) + raise Puppet::ParseError, ("#{arg.inspect} is not an Array. It looks to be a #{arg.class}") + end + unless arg.length > 0 + raise Puppet::ParseError, ("#{arg.inspect} is an empty Array.") + end + end + end +end diff --git a/spec/unit/puppet/parser/functions/validate_nonemptyarray_spec.rb b/spec/unit/puppet/parser/functions/validate_nonemptyarray_spec.rb new file mode 100644 index 0000000..706323b --- /dev/null +++ b/spec/unit/puppet/parser/functions/validate_nonemptyarray_spec.rb @@ -0,0 +1,55 @@ +#! /usr/bin/env ruby -S rspec + +require 'spec_helper' + +describe Puppet::Parser::Functions.function(:validate_nonemptyarray) do + let(:scope) { PuppetlabsSpec::PuppetInternals.scope } + describe 'when calling validate_nonemptyarray from puppet' do + + %w{ true false }.each do |the_string| + it "should not compile when #{the_string} is a string" do + Puppet[:code] = "validate_nonemptyarray('#{the_string}')" + expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/) + end + + it "should not compile when #{the_string} is a bare word" do + Puppet[:code] = "validate_nonemptyarray(#{the_string})" + expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/) + end + end + + it "should compile when multiple array arguments are passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = [ 'foo', 'bar' ] + $bar = [ 'one', 'two' ] + validate_nonemptyarray($foo, $bar) + ENDofPUPPETcode + scope.compiler.compile + end + + it "should not compile when an undef variable is passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = undef + validate_nonemptyarray($foo) + ENDofPUPPETcode + expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/) + end + + it "should not compile when with an empty array" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = [] + validate_nonemptyarray($foo) + ENDofPUPPETcode + expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is an empty Array/) + end + + it "should not compile when multiple arrays are padded and one is empty" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = [ 'not', 'empty' ] + $bar = [] + validate_nonemptyarray($foo, $bar) + ENDofPUPPETcode + expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is an empty Array/) + end + end +end |