Class: Hiera::Filecache

### Home Classes Methods

### In Files

- lib/hiera/filecache.rb

### Parent

Object

### Methods

- ::new
- #path_metadata
- #read
- #stale?

### Class/Module Index

Quicksearch

- Hiera
- Hiera::Backend
- Hiera::Backend::Json_backend
- Hiera::Backend::Yaml_backend
- Hiera::Config
- Hiera::Console_logger
- Hiera::FallbackLogger
- Hiera::Filecache
- Hiera::Noop_logger
- Hiera::Puppet_logger
- Hiera::RecursiveLookup
- Hiera::Util

No matching classes.

# Hiera::Filecache

### Public Class Methods

new() click to toggle source

    # File lib/hiera/filecache.rb, line 3
    def initialize
      @cache = {}
    end

### Public Instance Methods

path_metadata(path) click to toggle source

This is based on the old caching in the YAML backend and has a resolution of 1 second, changes made within the same second of a previous read will be ignored

    # File lib/hiera/filecache.rb, line 69
    def path_metadata(path)
      stat = File.stat(path)
      {:inode => stat.ino, :mtime => stat.mtime, :size => stat.size}
    end

read(path, expected_type=nil, default=nil) click to toggle source

Reads a file, optionally parse it in some way check the output type and set a default

Simply invoking it this way will return the file contents

    data = read("/some/file")

But as most cases of file reading in hiera involves some kind of parsing through a serializer there's some help for those cases:

    data = read("/some/file", Hash, {}) do |data|
       JSON.parse(data)
    end

In this case it will read the file, parse it using JSON then check that the end result is a Hash, if it's not a hash or if reading/parsing fails it will return {} instead

Prior to calling this method you should be sure the file exist

    # File lib/hiera/filecache.rb, line 27
    def read(path, expected_type=nil, default=nil)
      @cache[path] ||= {:data => nil, :meta => path_metadata(path)}

      if File.exist?(path) && !@cache[path][:data] || stale?(path)
        if block_given?
          begin
            @cache[path][:data] = yield(File.read(path))
          rescue => e
            Hiera.debug("Reading data from %s failed: %s: %S" % [path, e.class, e.to_s])
            @cache[path][:data] = default
          end
        else
          @cache[path][:data] = File.read(path)
        end
      end

      if block_given? && !expected_type.nil?
        unless @cache[path][:data].is_a?(expected_type)
          Hiera.debug("Data retrieved from %s is not a %s, setting defaults" % [path, expected_type])
          @cache[path][:data] = default
        end
      end

      @cache[path][:data]
    end

stale?(path) click to toggle source

    # File lib/hiera/filecache.rb, line 53
    def stale?(path)
      meta = path_metadata(path)

      @cache[path] ||= {:data => nil, :meta => nil}

      if @cache[path][:meta] == meta
        return false
      else
        @cache[path][:meta] = meta
        return true
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.