# class Chef::FileCache

### Public Instance Methods

create_cache_path(path, create_if_missing=true) click to toggle source

Create a full path to a given file in the cache. By default, also creates the path if it does not exist.

### Parameters¶ ↑

path

  The path to create, relative to file_cache_path

create_if_missing

  True by default - whether to create the path if it does not exist

### Returns¶ ↑

String

  The fully expanded path

    # File lib/chef/file_cache.rb, line 203
    def create_cache_path(path, create_if_missing=true)
      cache_dir = File.expand_path(File.join(file_cache_path, path))
      if create_if_missing
        create_path(cache_dir)
      else
        cache_dir
      end
    end

delete(path) click to toggle source

Delete a file from the File Cache

### Parameters¶ ↑

path<String>

  The path to the file you want to delete - should

    be relative to file_cache_path

### Returns¶ ↑

true

    # File lib/chef/file_cache.rb, line 130
    def delete(path)
      validate(
        {
          :path => path
        },
        {
          :path => { :kind_of => String },
        }
      )
      cache_path = create_cache_path(path, false)
      if File.exists?(cache_path)
        File.unlink(cache_path)
      end
      true
    end

find(glob_pattern) click to toggle source

Find files in the cache by `glob_pattern`

### Returns¶ ↑

String

  - An array of file cache keys matching the glob

    # File lib/chef/file_cache.rb, line 158
    def find(glob_pattern)
      keys = Array.new
      Dir[File.join(file_cache_path, glob_pattern)].each do |f|
        if File.file?(f)
          keys << f[/^#{Regexp.escape(Dir[file_cache_path].first) + File::Separator}(.+)/, 1]
        end
      end
      keys
    end

has_key?(path) click to toggle source

Whether or not this file exists in the Cache

### Parameters¶ ↑

path

  The path to the file you want to check - is relative

    to file_cache_path

### Returns¶ ↑

True

  If the file exists

False

  If it does not

    # File lib/chef/file_cache.rb, line 177
    def has_key?(path)
      validate(
        {
          :path => path
        },
        {
          :path => { :kind_of => String },
        }
      )
      full_path = create_cache_path(path, false)
      if File.exists?(full_path)
        true
      else
        false
      end
    end

list() click to toggle source

List all the files in the Cache

### Returns¶ ↑

Array

  An array of files in the cache, suitable for use with load, delete and store

    # File lib/chef/file_cache.rb, line 150
    def list
      find("**#{File::Separator}*")
    end

load(path, read=true) click to toggle source

Read a file from the File Cache

### Parameters¶ ↑

path<String>

  The path to the file you want to load - should

    be relative to file_cache_path

read<True/False>

  Whether to return the file contents, or the path.

    Defaults to true.

### Returns¶ ↑

String

  A string with the file contents, or the path to the file.

### Raises¶ ↑

Chef::Exceptions::FileNotFound

  If it cannot find the file in the cache

    # File lib/chef/file_cache.rb, line 104
    def load(path, read=true)
      validate(
        {
          :path => path
        },
        {
          :path => { :kind_of => String }
        }
      )
      cache_path = create_cache_path(path, false)
      raise Chef::Exceptions::FileNotFound, "Cannot find #{cache_path} for #{path}!" unless File.exists?(cache_path)
      if read
        File.read(cache_path)
      else
        cache_path
      end
    end

move_to(file, path) click to toggle source

Move a file into the cache. Useful with the REST raw file output.

### Parameters¶ ↑

file<String>

  The path to the file you want in the cache

path<String>

  The relative name you want the new file to use

    # File lib/chef/file_cache.rb, line 67
    def move_to(file, path)
      validate(
        {
          :file => file,
          :path => path
        },
        {
          :file => { :kind_of => String },
          :path => { :kind_of => String },
        }
      )

      file_path_array = File.split(path)
      file_name = file_path_array.pop
      if File.exists?(file) && File.writable?(file)
        FileUtils.mv(
          file,
          File.join(create_cache_path(File.join(file_path_array), true), file_name)
        )
      else
        raise RuntimeError, "Cannot move #{file} to #{path}!"
      end
    end

store(path, contents, perm=0640) click to toggle source

Write a file to the File Cache.

### Parameters¶ ↑

path<String>

  The path to the file you want to put in the cache - should

    be relative to file_cache_path

contents<String>

  A string with the contents you want written to the file

perm<String>

  Sets file permission bits. Permission bits are platform

    dependent; on Unix systems, see open(2) for details.

### Returns¶ ↑

true

    # File lib/chef/file_cache.rb, line 41
    def store(path, contents, perm=0640)
      validate(
        {
          :path => path,
          :contents => contents
        },
        {
          :path => { :kind_of => String },
          :contents => { :kind_of => String },
        }
      )

      file_path_array = File.split(path)
      file_name = file_path_array.pop
      cache_path = create_cache_path(File.join(file_path_array))
      File.open(File.join(cache_path, file_name), "w", perm) do |io|
        io.print(contents)
      end
      true
    end