The base class for Content and Metadata; provides common functionality like the behaviour around links.
Determine how we deal with links.
Set our base path.
Set a relative path; this is used for recursion, and sets the file’s path relative to the initial recursion point.
This is for external consumers to store the source that was used to retrieve the metadata.
# File lib/puppet/file_serving/base.rb, line 81 def self.absolute?(path) Puppet::Util.absolute_path?(path, :posix) or (Puppet.features.microsoft_windows? and Puppet::Util.absolute_path?(path, :windows)) end
# File lib/puppet/file_serving/base.rb, line 31 def initialize(path, options = {}) self.path = path @links = :manage set_options(options) end
Does our file exist?
# File lib/puppet/file_serving/base.rb, line 15 def exist? stat return true rescue => detail return false end
Return the full path to our file. Fails if there’s no path set.
# File lib/puppet/file_serving/base.rb, line 23 def full_path(dummy_argument=:work_arround_for_ruby_GC_bug) (if relative_path.nil? or relative_path == "" or relative_path == "." path else File.join(path, relative_path) end).gsub(%r{//+}, "/") end
# File lib/puppet/file_serving/base.rb, line 39 def links=(value) value = value.to_sym value = :manage if value == :ignore raise(ArgumentError, ":links can only be set to :manage or :follow") unless [:manage, :follow].include?(value) @links = value end
# File lib/puppet/file_serving/base.rb, line 48 def path=(path) raise ArgumentError.new("Paths must be fully qualified") unless Puppet::FileServing::Base.absolute?(path) @path = path end
# File lib/puppet/file_serving/base.rb, line 56 def relative_path=(path) raise ArgumentError.new("Relative paths must not be fully qualified") if Puppet::FileServing::Base.absolute?(path) @relative_path = path end
Stat our file, using the appropriate link-sensitive method.
# File lib/puppet/file_serving/base.rb, line 62 def stat @stat_method ||= self.links == :manage ? :lstat : :stat File.send(@stat_method, full_path) end
# File lib/puppet/file_serving/base.rb, line 67 def to_pson_data_hash { # No 'document_type' since we don't send these bare 'data' => { 'path' => @path, 'relative_path' => @relative_path, 'links' => @links }, 'metadata' => { 'api_version' => 1 } } end