require 'cookbook-omnifetch/base' module CookbookOmnifetch class PathLocation < BaseLocation # Technically path locations are always installed, but this method # intentionally returns +false+ to force validation of the cookbook at the # path. # # @see BaseLocation#installed? def installed? false end # The installation for a path location is actually just a noop # # @see BaseLocation#install def install validate_cached!(expanded_path) end # @see BaseLocation#cached_cookbook def cached_cookbook @cached_cookbook ||= CookbookOmnifetch.cached_cookbook_class.from_path(expanded_path) end # Returns true if the location is a metadata location. By default, no # locations are the metadata location. # # @return [Boolean] def metadata? !!options[:metadata] end def install_path relative_path end # Return this PathLocation's path relative to the associated Berksfile. It # is actually the path reative to the associated Berksfile's parent # directory. # # @return [Pathname] # the relative path relative to the target def relative_path # TODO: this requires Berkshelf::Dependency to provide a delegate (ish) method that does # # def relative_paths_root # File.dirname(berksfile.filepath) # end @relative_path ||= expanded_path.relative_path_from(Pathname.new(dependency.relative_paths_root)) end # The fully expanded path of this cookbook on disk, relative to the # Berksfile. # # @return [Pathname] def expanded_path # TODO: this requires Berkshelf::Dependency to provide a delegate (ish) method that does # # def relative_paths_root # File.dirname(berksfile.filepath) # end @expanded_path ||= Pathname.new File.expand_path(options[:path], dependency.relative_paths_root) end def ==(other) other.is_a?(PathLocation) && other.metadata? == metadata? && other.relative_path == relative_path end def to_lock out = " path: #{relative_path}\n" out << " metadata: true\n" if metadata? out end def to_s "source at #{relative_path}" end def inspect "#" end end end