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.
Does our file exist?
# File lib/puppet/file_serving/base.rb, line 15 def exist? stat return true rescue 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 == "." full_path = path else full_path = File.join(path, relative_path) end if Puppet.features.microsoft_windows? # Replace multiple slashes as long as they aren't at the beginning of a filename full_path.gsub(%r{(./)/+}, '\1') else full_path.gsub(%r{//+}, '/') end end
# File lib/puppet/file_serving/base.rb, line 46 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 55 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 63 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 69 def stat @stat_method ||= self.links == :manage ? :lstat : :stat Puppet::FileSystem.send(@stat_method, full_path) end
# File lib/puppet/file_serving/base.rb, line 74 def to_data_hash { 'path' => @path, 'relative_path' => @relative_path, 'links' => @links } end
# File lib/puppet/file_serving/base.rb, line 82 def to_pson_data_hash { # No 'document_type' since we don't send these bare 'data' => to_data_hash, 'metadata' => { 'api_version' => 1 } } end
# File lib/puppet/file_serving/base.rb, line 92 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 38 def initialize(path, options = {}) self.path = path @links = :manage set_options(options) end