# class FileServing::Metadata

A class that handles retrieving file metadata.

### Constants

PARAM_ORDER

### Attributes

checksum[R]
checksum_type[R]
destination[R]
ftype[R]
group[R]
mode[R]
owner[R]
path[R]

### Public Class Methods

from_pson(data) click to toggle source

    # File lib/puppet/file_serving/metadata.rb, line 137
    def self.from_pson(data)
      new(data.delete('path'), data)
    end

new(path,data={}) click to toggle source
Calls superclass method

    # File lib/puppet/file_serving/metadata.rb, line 95
    def initialize(path,data={})
      @owner       = data.delete('owner')
      @group       = data.delete('group')
      @mode        = data.delete('mode')
      if checksum = data.delete('checksum')
        @checksum_type = checksum['type']
        @checksum      = checksum['value']
      end
      @checksum_type ||= "md5"
      @ftype       = data.delete('type')
      @destination = data.delete('destination')
      super(path,data)
    end

### Public Instance Methods

checksum_type=(type) click to toggle source

    # File lib/puppet/file_serving/metadata.rb, line 19
    def checksum_type=(type)
      raise(ArgumentError, "Unsupported checksum type #{type}") unless respond_to?("#{type}_file")

      @checksum_type = type
    end

collect() click to toggle source

Retrieve the attributes for this file, relative to a base directory. Note that Object#stat raises Errno::ENOENT if the file is absent and this method does not catch that exception.

    # File lib/puppet/file_serving/metadata.rb, line 70
    def collect
      real_path = full_path

      stat = collect_stat(real_path)
      @owner = stat.owner
      @group = stat.group
      @ftype = stat.ftype

      # We have to mask the mode, yay.
      @mode = stat.mode & 007777

      case stat.ftype
      when "file"
        @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", real_path).to_s
      when "directory" # Always just timestamp the directory.
        @checksum_type = "ctime"
        @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", path).to_s
      when "link"
        @destination = File.readlink(real_path)
        @checksum = ("{#{@checksum_type}}") + send("#{@checksum_type}_file", real_path).to_s rescue nil
      else
        raise ArgumentError, "Cannot manage files of type #{stat.ftype}"
      end
    end

collect_stat(path) click to toggle source

    # File lib/puppet/file_serving/metadata.rb, line 57
    def collect_stat(path)
      stat = stat()

      if Puppet.features.microsoft_windows?
        WindowsStat.new(stat, path)
      else
        MetaStat.new(stat)
      end
    end

to_pson(*args) click to toggle source

    # File lib/puppet/file_serving/metadata.rb, line 133
    def to_pson(*args)
      to_pson_data_hash.to_pson(*args)
    end

to_pson_data_hash() click to toggle source
Calls superclass method

    # File lib/puppet/file_serving/metadata.rb, line 110
    def to_pson_data_hash
      {
        'document_type' => 'FileMetadata',

          'data'       => super['data'].update(
            {
            'owner'        => owner,
            'group'        => group,
            'mode'         => mode,
            'checksum'     => {
              'type'   => checksum_type,
              'value'  => checksum
          },
          'type'         => ftype,
          'destination'  => destination,

          }),
        'metadata' => {
          'api_version' => 1
          }
      }
    end