lib/librarian/chef/source/local.rb in librarian-0.0.20 vs lib/librarian/chef/source/local.rb in librarian-0.0.21

- old
+ new

@@ -1,13 +1,61 @@ -require 'librarian/chef/source/local/manifest' +require 'librarian/chef/manifest_reader' module Librarian module Chef module Source module Local - def manifest_class - Manifest + def install!(manifest) + manifest.source == self or raise ArgumentError + + debug { "Installing #{manifest}" } + + name, version = manifest.name, manifest.version + found_path = found_path(name) + + install_path = environment.install_path.join(name) + if install_path.exist? + debug { "Deleting #{relative_path_to(install_path)}" } + install_path.rmtree + end + + debug { "Copying #{relative_path_to(found_path)} to #{relative_path_to(install_path)}" } + FileUtils.cp_r(found_path, install_path) + end + + def fetch_version(name, extra) + manifest_data(name)["version"] + end + + def fetch_dependencies(name, version, extra) + manifest_data(name)["dependencies"] + end + + private + + def manifest_data(name) + @manifest_data ||= { } + @manifest_data[name] ||= fetch_manifest_data(name) + end + + def fetch_manifest_data(name) + expect_manifest!(name) + + found_path = found_path(name) + manifest_path = ManifestReader.manifest_path(found_path) + ManifestReader.read_manifest(name, manifest_path) + end + + def manifest?(name, path) + ManifestReader.manifest?(name, path) + end + + def expect_manifest!(name) + found_path = found_path(name) + return if found_path && ManifestReader.manifest_path(found_path) + + raise Error, "No metadata file found for #{name} from #{self}! If this should be a cookbook, you might consider contributing a metadata file upstream or forking the cookbook to add your own metadata file." end end end end