summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parameter
diff options
context:
space:
mode:
authorMax Martin <max@puppetlabs.com>2011-03-30 13:00:56 -0700
committerMax Martin <max@puppetlabs.com>2011-03-30 13:00:56 -0700
commit9d17809e5b240aa80d2c30f4d9625d4812802b8f (patch)
treef2c9101dbf36c9fcbf51454c9baca9a7d92cb667 /lib/puppet/parameter
parent76b3ee6822f52b100c45cd8921f13739f12ddf38 (diff)
parentf5170fc2dbcbb4202b9b08e8944aa35f7a7bf7b8 (diff)
Merge branch '2.6.next' into 2.6.x
* 2.6.next: (23 commits) (#5908) Add support for new update-rc.d disable API (#6862) Add a default subject for the mail_patches rake task Fixed #6256 - Creation of rrd directory. (#5477) Allow watch_file to watch non-existent files, especially site.pp (#5221) Add test for fix to fileset with trailing separator (#5221) Fix fileset path absoluteness checking with trailing slash (#4769) Fix negative timeout support for newer rubies Fixed #6562 - Minor kick documentation fix (#6658) Propagate ENC connection errors to the agent (#4884) Remove typo from spec test (#4884) Modify tests to pass on non-OS X systems (#4884) Revise new exec tests, add a few more (4576) - if ENC declares invalid class, it is logged at warning. (#4884) Add an shell provider for execs (#4884) Fix Test::Unit exec tests (#4884) Break the exec type out to have a posix provider (#4884) Add consistent path validation and behavior (#4884) Add expand_path to requiring the spec_helper (#4884) Autorequire shared behaviors and method to silence warnings (#4884) Fix whitespace ...
Diffstat (limited to 'lib/puppet/parameter')
-rw-r--r--lib/puppet/parameter/path.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/puppet/parameter/path.rb b/lib/puppet/parameter/path.rb
new file mode 100644
index 000000000..44886afd0
--- /dev/null
+++ b/lib/puppet/parameter/path.rb
@@ -0,0 +1,42 @@
+require 'puppet/parameter'
+
+class Puppet::Parameter::Path < Puppet::Parameter
+ def self.accept_arrays(bool = true)
+ @accept_arrays = !!bool
+ end
+ def self.arrays?
+ @accept_arrays
+ end
+
+ def validate_path(paths)
+ if paths.is_a?(Array) and ! self.class.arrays? then
+ fail "#{name} only accepts a single path, not an array of paths"
+ end
+
+ # We *always* support Unix path separators, as Win32 does now too.
+ absolute = "[/#{::Regexp.quote(::File::SEPARATOR)}]"
+ win32 = Puppet.features.microsoft_windows?
+
+ Array(paths).each do |path|
+ next if path =~ %r{^#{absolute}}
+ next if win32 and path =~ %r{^(?:[a-zA-Z]:)?#{absolute}}
+ fail("#{name} must be a fully qualified path")
+ end
+
+ paths
+ end
+
+ # This will be overridden if someone uses the validate option, which is why
+ # it just delegates to the other, useful, method.
+ def unsafe_validate(paths)
+ validate_path(paths)
+ end
+
+ # Likewise, this might be overridden, but by default...
+ def unsafe_munge(paths)
+ if paths.is_a?(Array) and ! self.class.arrays? then
+ fail "#{name} only accepts a single path, not an array of paths"
+ end
+ paths
+ end
+end