/* Copyright (c) 2012, Yahoo! Inc. All rights reserved. Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var util = require('util'), EventEmitter = require('events').EventEmitter; function extend(cons, proto) { Object.keys(proto).forEach(function (k) { cons.prototype[k] = proto[k]; }); } /** * abstract interfaces for writing content * @class ContentWriter * @module io * @main io * @constructor */ //abstract interface for writing content function ContentWriter() { } ContentWriter.prototype = { /** * writes the specified string as-is * @method write * @param {String} str the string to write */ write: /* istanbul ignore next: abstract method */ function (/* str */) { throw new Error('write: must be overridden'); }, /** * writes the specified string with a newline at the end * @method println * @param {String} str the string to write */ println: function (str) { this.write(str + '\n'); } }; /** * abstract interface for writing files and assets. The caller is expected to * call `done` on the writer after it has finished writing all the required * files. The writer is an event-emitter that emits a `done` event when `done` * is called on it *and* all files have successfully been written. * * @class Writer * @constructor */ function Writer() { EventEmitter.call(this); } util.inherits(Writer, EventEmitter); extend(Writer, { /** * allows writing content to a file using a callback that is passed a content writer * @method writeFile * @param {String} file the name of the file to write * @param {Function} callback the callback that is called as `callback(contentWriter)` */ writeFile: /* istanbul ignore next: abstract method */ function (/* file, callback */) { throw new Error('writeFile: must be overridden'); }, /** * copies a file from source to destination * @method copyFile * @param {String} source the file to copy, found on the file system * @param {String} dest the destination path */ copyFile: /* istanbul ignore next: abstract method */ function (/* source, dest */) { throw new Error('copyFile: must be overridden'); }, /** * marker method to indicate that the caller is done with this writer object * The writer is expected to emit a `done` event only after this method is called * and it is truly done. * @method done */ done: /* istanbul ignore next: abstract method */ function () { throw new Error('done: must be overridden'); } }); module.exports = { Writer: Writer, ContentWriter: ContentWriter };