summaryrefslogtreecommitdiffstats
path: root/lib/puppet/file_serving/file_base.rb
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-10-24 17:50:36 -0500
committerLuke Kanies <luke@madstop.com>2007-10-24 17:50:36 -0500
commitc0a07ac724c27fce8d2673e4466e42d46d68f145 (patch)
tree902f2ac332a037af3e56039b757836deef5cfe1c /lib/puppet/file_serving/file_base.rb
parent1746751ddc0e5dd5c5d32abe2ddb4d8305d739fc (diff)
downloadpuppet-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.rb33
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