# class Chef::Cookbook::FileSystemFileVendor

## Chef::Cookbook::FileSystemFileVendor¶ ↑

This FileVendor loads files from Chef::Config.cookbook_path. The thing that’s sort of janky about this FileVendor implementation is that it basically takes only the cookbook’s name from the manifest and throws the rest away then re-builds the list of files on the disk. This is due to the manifest not having the on-disk file locations, since in the chef-client case, that information is non-sensical.

### Public Class Methods

new(manifest, *repo_paths) click to toggle source

    # File lib/chef/cookbook/file_system_file_vendor.rb, line 34
    def initialize(manifest, *repo_paths)
      @cookbook_name = manifest[:cookbook_name]
      @repo_paths = repo_paths.flatten
      raise ArgumentError, "You must specify at least one repo path" if @repo_paths.empty?
    end

### Public Instance Methods

get_filename(filename) click to toggle source

Implements abstract base’s requirement. It looks in the Chef::Config.cookbook_path file hierarchy for the requested file.

    # File lib/chef/cookbook/file_system_file_vendor.rb, line 43
    def get_filename(filename)
      location = @repo_paths.inject(nil) do |memo, basepath|
        candidate_location = File.join(basepath, @cookbook_name, filename)
        memo = candidate_location if File.exist?(candidate_location)
        memo
      end
      raise "File #{filename} does not exist for cookbook #{@cookbook_name}" unless location

      location
    end