lib/berkshelf/locations/path.rb
module Berkshelf
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 ||= CachedCookbook.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
# 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
@relative_path ||= expanded_path.relative_path_from(Pathname.new(File.dirname(dependency.berksfile.filepath)))
end
# The fully expanded path of this cookbook on disk, relative to the
# Berksfile.
#
# @return [Pathname]
def expanded_path
@expanded_path ||= Pathname.new File.expand_path(options[:path], File.dirname(dependency.berksfile.filepath))
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
"#<Berkshelf::PathLocation metadata: #{metadata?}, path: #{relative_path}>"
end
end
end