summaryrefslogtreecommitdiff
path: root/lib/puppet/parser/functions/validate_re.rb
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2012-03-07 15:01:11 -0800
committerJeff McCune <jeff@puppetlabs.com>2012-03-07 15:33:27 -0800
commit41b07232e464f25403a8f9c786ec0061bf6dc40e (patch)
tree44dccf99e8f7ebbcf3d8a061ee3a467689385d94 /lib/puppet/parser/functions/validate_re.rb
parent898ff80fa762dbbe52f50b872dd1bf3b04c254c9 (diff)
(#12357) Add ability to display an error message from validate_re
I've seen a number of times the following error displayed to the end user: validate_re(): "" does not match "^true$|^false$" at /p/t/f.pp:40 This is an absolutely horrific error message. I'm to blame for it. Users stumble over this quite often and they shouldn't have to go read the code to sort out what's happening. This patch makes an effort to fix the problem by adding a third, optional, argument to validate_re(). This third argument will be the message thrown back in the exception which will be displayed to the end user. This sets the stage for nicer error messages coming from modules we write. This patch is backwards compatible but is a new feature.
Diffstat (limited to 'lib/puppet/parser/functions/validate_re.rb')
-rw-r--r--lib/puppet/parser/functions/validate_re.rb15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/puppet/parser/functions/validate_re.rb b/lib/puppet/parser/functions/validate_re.rb
index 8033ca3..9c216d8 100644
--- a/lib/puppet/parser/functions/validate_re.rb
+++ b/lib/puppet/parser/functions/validate_re.rb
@@ -1,5 +1,4 @@
module Puppet::Parser::Functions
-
newfunction(:validate_re, :doc => <<-'ENDHEREDOC') do |args|
Perform simple validation of a string against one or more regular
expressions. The first argument of this function should be a string to
@@ -8,6 +7,9 @@ module Puppet::Parser::Functions
of the regular expressions match the string passed in, compilation will
abort with a parse error.
+ If a third argument is specified, this will be the error message raised and
+ seen by the user.
+
The following strings will validate against the regular expressions:
validate_re('one', '^one$')
@@ -17,17 +19,20 @@ module Puppet::Parser::Functions
validate_re('one', [ '^two', '^three' ])
+ A helpful error message can be returned like this:
+
+ validate_re($::puppetversion, '^2.7', 'The $puppetversion fact value does not match 2.7')
+
ENDHEREDOC
- if args.length != 2 then
- raise Puppet::ParseError, ("validate_re(): wrong number of arguments (#{args.length}; must be 2)")
+ 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)")
end
- msg = "validate_re(): #{args[0].inspect} does not match #{args[1].inspect}"
+ msg = args[2] || "validate_re(): #{args[0].inspect} does not match #{args[1].inspect}"
raise Puppet::ParseError, (msg) unless args[1].any? do |re_str|
args[0] =~ Regexp.compile(re_str)
end
end
-
end