Sha256: 326973719f23abd28bc1eeecb1cccfb93da04dc7296e660810fbd8bec3ecbf00

Contents?: true

Size: 1.17 KB

Versions: 10

Compression:

Stored size: 1.17 KB

Contents

require "berkshelf/api_client/remote_cookbook"
require "ridley/chef/cookbook"

module Berkshelf
  # Shim to look like a Berkshelf::APIClient but for a chef repo folder.
  #
  # @since 6.1
  class ChefRepoUniverse
    def initialize(uri, **options)
      @uri = uri
      @path = options[:path]
      @options = options
    end

    def universe
      Dir.entries(cookbooks_path).sort.each_with_object([]) do |entry, cookbooks|
        next if entry[0] == "." # Skip hidden folders.
        entry_path = "#{cookbooks_path}/#{entry}"
        next unless File.directory?(entry_path) # Skip non-dirs.
        cookbook = begin
          Ridley::Chef::Cookbook.from_path(entry_path)
        rescue IOError
          next # It wasn't a cookbook.
        end
        cookbooks << Berkshelf::APIClient::RemoteCookbook.new(
          cookbook.cookbook_name,
          cookbook.version,
          location_type: "file_store",
          location_path: entry_path,
          dependencies: cookbook.metadata.dependencies
        )
      end
    end

    private

    def cookbooks_path
      if File.exist?("#{@path}/cookbooks")
        "#{@path}/cookbooks"
      else
        @path
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
berkshelf-6.3.4 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.3.3 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.3.2 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.3.1 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.3.0 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.2.2 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.2.1 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.2.0 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.1.1 lib/berkshelf/chef_repo_universe.rb
berkshelf-6.1.0 lib/berkshelf/chef_repo_universe.rb