diff options
author | Luke Kanies <luke@madstop.com> | 2007-10-24 17:50:36 -0500 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2007-10-24 17:50:36 -0500 |
commit | c0a07ac724c27fce8d2673e4466e42d46d68f145 (patch) | |
tree | 902f2ac332a037af3e56039b757836deef5cfe1c /lib/puppet/file_serving/file_base.rb | |
parent | 1746751ddc0e5dd5c5d32abe2ddb4d8305d739fc (diff) | |
download | puppet-c0a07ac724c27fce8d2673e4466e42d46d68f145.tar.gz puppet-c0a07ac724c27fce8d2673e4466e42d46d68f145.tar.xz puppet-c0a07ac724c27fce8d2673e4466e42d46d68f145.zip |
File serving should work now, both recursive and
single files, across modules, local file system,
and the traditional file server.
This work revolves around making sure that the termini
produce functional file instances, meaning that they
know how to find their content or metadata, which largely
comes down to setting their paths correctly.
I also created a new terminus base class for the local
filesystem, since there was so much common code between
content and metadata.
Diffstat (limited to 'lib/puppet/file_serving/file_base.rb')
-rw-r--r-- | lib/puppet/file_serving/file_base.rb | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/lib/puppet/file_serving/file_base.rb b/lib/puppet/file_serving/file_base.rb index b2e9a0656..7f169d1ea 100644 --- a/lib/puppet/file_serving/file_base.rb +++ b/lib/puppet/file_serving/file_base.rb @@ -7,18 +7,19 @@ require 'puppet/file_serving' # The base class for Content and Metadata; provides common # functionality like the behaviour around links. class Puppet::FileServing::FileBase - attr_accessor :path, :base_path + attr_accessor :key - def full_path(base = nil) - base ||= base_path || raise(ArgumentError, "You must set or provide a base path") + # Return the full path to our file. Fails if there's no path set. + def full_path + raise(ArgumentError, "You must set a path to get a file's path") unless self.path - full = File.join(base, self.path) + relative_path ? File.join(path, relative_path) : path end - def initialize(path, options = {}) + def initialize(key, options = {}) raise ArgumentError.new("Files must not be fully qualified") if path =~ /^#{::File::SEPARATOR}/ - @path = path + @key = key @links = :manage options.each do |param, value| @@ -30,17 +31,33 @@ class Puppet::FileServing::FileBase end end + # Determine how we deal with links. attr_reader :links def links=(value) raise(ArgumentError, ":links can only be set to :manage or :follow") unless [:manage, :follow].include?(value) @links = value end + # Set our base path. + attr_reader :path + def path=(path) + raise ArgumentError.new("Paths must be fully qualified") unless path =~ /^#{::File::SEPARATOR}/ + @path = path + end + + # Set a relative path; this is used for recursion, and sets + # the file's path relative to the initial recursion point. + attr_reader :relative_path + def relative_path=(path) + raise ArgumentError.new("Relative paths must not be fully qualified") if path =~ /^#{::File::SEPARATOR}/ + @relative_path = path + end + # Stat our file, using the appropriate link-sensitive method. - def stat(base = nil) + def stat unless defined?(@stat_method) @stat_method = self.links == :manage ? :lstat : :stat end - File.send(@stat_method, full_path(base)) + File.send(@stat_method, full_path()) end end |