def initialize(*args)
if args.first.is_a?(Base) || args.first.nil?
@environment = args.shift
end
@dir, @path = args[0], args[1]
@dir = File.expand_path(@dir) if @dir
@path = File.expand_path(@path) if @path
if @dir && File.extname(@dir) != ""
@dir, @path = nil, @dir
end
@dir ||= File.dirname(@path) if @path
if @dir && @path.nil?
paths = Dir[File.join(@dir, "manifest*.json")]
if paths.any?
@path = paths.first
else
@path = File.join(@dir, "manifest-#{SecureRandom.hex(16)}.json")
end
end
unless @dir && @path
raise ArgumentError, "manifest requires output path"
end
data = nil
begin
if File.exist?(@path)
data = json_decode(File.read(@path))
end
rescue MultiJson::DecodeError => e
logger.error "#{@path} is invalid: #{e.class} #{e.message}"
end
@data = data.is_a?(Hash) ? data : {}
end