UriCache.coffee

MkdirP = require 'mkdirp'
Fs     = require 'fs'
Path   = require 'path'
Async  = require 'async'

Utils  = require './Utils'

module.exports =\

##
# Cache data for URIs
class UriCache

	constructor: (@cacheDir) ->

	##
	# Create `cacheDir` unless it exists
	initialize : (cb) ->
		MkdirP @cacheDir, cb

	##
	# Store data in the cache
	#
	# @param {String} uri
	# @param {String} data
	# @param {Function} cb
	put : (uri, data, cb) ->
		Fs.writeFile Path.join(@cacheDir, Utils.uriToFilename(uri)), data, cb

	##
	# Retrieve data for a URI
	#
	# @param {String} uri
	# @param {Function} cb
	get : (uri, cb) ->
		fname = Path.join(@cacheDir, Utils.uriToFilename(uri))
		Fs.readFile fname, {encoding: 'utf-8'}, (err, data) ->
			return cb err if err
			return cb null, data

	##
	# Clear the whole cache
	#
	# @param {Function} cb
	clear : (cb)->
		Fs.readdir @cacheDir, (err, relFiles) =>
			Async.each relFiles, (relFile, done) =>
				Fs.unlink Path.join(@cacheDir, relFile), done
			, cb