]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(MAINT) validate_re: Clarify docs and error message
authorDavid Schmitt <david.schmitt@puppetlabs.com>
Thu, 17 Sep 2015 17:48:32 +0000 (18:48 +0100)
committerDavid Schmitt <david.schmitt@puppetlabs.com>
Thu, 17 Sep 2015 17:48:32 +0000 (18:48 +0100)
README.markdown
lib/puppet/parser/functions/validate_re.rb
spec/functions/validate_re_spec.rb

index 8dd57f1ef2f73a17e1fdf2868a77bd184c50d693..1cf7b326c8df60d65536d1d8e035b0beb90f4c43 100644 (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`
index ca25a702c58a9881a695882bb1bec3e85f8f15c3..efee7f8cb0772cfa697258ac2bc4b3729b0f35a4 100644 (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
 
index 42b10491713feb6e67ce3afcd255305ffe2b0797..3f9014370c5923681bc1d73141401f37f4ceb619 100755 (executable)
@@ -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