(MAINT) validate_re: Clarify docs and error message

This commit is contained in:
David Schmitt 2015-09-17 18:48:32 +01:00
parent 399ce03f68
commit 55ece7815a
3 changed files with 31 additions and 2 deletions

View file

@ -1054,6 +1054,13 @@ test, and the second argument should be a stringified regular expression (withou
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
~~~
Note: Compilation will also abort, if the first argument is not a String. Always use
quotes to force stringification:
~~~
validate_re("${::operatingsystemmajrelease}", '^[57]$')
~~~
*Type*: statement.
#### `validate_slength`

View file

@ -23,16 +23,23 @@ module Puppet::Parser::Functions
validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
Note: Compilation will also abort, if the first argument is not a String. Always use
quotes to force stringification:
validate_re("${::operatingsystemmajrelease}", '^[57]$')
ENDHEREDOC
if (args.length < 2) or (args.length > 3) then
raise Puppet::ParseError, ("validate_re(): wrong number of arguments (#{args.length}; must be 2 or 3)")
raise Puppet::ParseError, "validate_re(): wrong number of arguments (#{args.length}; must be 2 or 3)"
end
raise Puppet::ParseError, "validate_re(): input needs to be a String, not a #{args[0].class}" unless args[0].is_a? String
msg = args[2] || "validate_re(): #{args[0].inspect} does not match #{args[1].inspect}"
# We're using a flattened array here because we can't call String#any? in
# Ruby 1.9 like we can in Ruby 1.8
raise Puppet::ParseError, (msg) unless [args[1]].flatten.any? do |re_str|
raise Puppet::ParseError, msg unless [args[1]].flatten.any? do |re_str|
args[0] =~ Regexp.compile(re_str)
end

View file

@ -41,6 +41,21 @@ describe 'validate_re' do
it { is_expected.to run.with_params('notone', '^one').and_raise_error(Puppet::ParseError, /does not match/) }
it { is_expected.to run.with_params('notone', [ '^one', '^two' ]).and_raise_error(Puppet::ParseError, /does not match/) }
it { is_expected.to run.with_params('notone', [ '^one', '^two' ], 'custom error').and_raise_error(Puppet::ParseError, /custom error/) }
describe 'non-string inputs' do
[
1, # Fixnum
3.14, # Float
nil, # NilClass
true, # TrueClass
false, # FalseClass
["10"], # Array
:key, # Symbol
{:key=>"val"}, # Hash
].each do |input|
it { is_expected.to run.with_params(input, '.*').and_raise_error(Puppet::ParseError, /needs to be a String/) }
end
end
end
end
end