| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
/* utils.coffee */(function() {  var async, extend, fileExists, fileExistsSync, fs, path, pump, readJSON, readJSONSync, readdirRecursive, rfc822, stripExtension, util;  util = require('util');  fs = require('fs');  path = require('path');  async = require('async');  fileExists = fs.exists || path.exists;  fileExistsSync = fs.existsSync || path.existsSync;  extend = function(obj, mixin) {    var method, name;    for (name in mixin) {      method = mixin[name];      obj[name] = method;    }  };  stripExtension = function(filename) {    /* Remove the file-extension from *filename* */    return filename.replace(/(.+)\.[^.]+$/, '$1');  };  readJSON = function(filename, callback) {    /* Read and try to parse *filename* as JSON, *callback* with parsed object or error on fault. */    return async.waterfall([      function(callback) {        return fs.readFile(filename, callback);      }, function(buffer, callback) {        var error, rv;        try {          rv = JSON.parse(buffer.toString());          return callback(null, rv);        } catch (error1) {          error = error1;          error.filename = filename;          error.message = "parsing " + (path.basename(filename)) + ": " + error.message;          return callback(error);        }      }    ], callback);  };  readJSONSync = function(filename) {    /* Synchronously read and try to parse *filename* as json. */    var buffer;    buffer = fs.readFileSync(filename);    return JSON.parse(buffer.toString());  };  readdirRecursive = function(directory, callback) {    /* Returns an array representing *directory*, including subdirectories. */    var result, walk;    result = [];    walk = function(dir, callback) {      return async.waterfall([        async.apply(fs.readdir, path.join(directory, dir)), function(filenames, callback) {          return async.forEach(filenames, function(filename, callback) {            var relname;            relname = path.join(dir, filename);            return async.waterfall([              async.apply(fs.stat, path.join(directory, relname)), function(stat, callback) {                if (stat.isDirectory()) {                  return walk(relname, callback);                } else {                  result.push(relname);                  return callback();                }              }            ], callback);          }, callback);        }      ], callback);    };    return walk('', function(error) {      return callback(error, result);    });  };  pump = function(source, destination, callback) {    /* Pipe *source* stream to *destination* stream calling *callback* when done */    source.pipe(destination);    source.on('error', function(error) {      if (typeof callback === "function") {        callback(error);      }      return callback = null;    });    return destination.on('finish', function() {      if (typeof callback === "function") {        callback();      }      return callback = null;    });  };  rfc822 = function(date) {    /* return a rfc822 representation of a javascript Date object        http://www.w3.org/Protocols/rfc822/#z28     */    var days, months, pad, time, tzoffset;    pad = function(i) {      if (i < 10) {        return '0' + i;      } else {        return i;      }    };    tzoffset = function(offset) {      var direction, hours, minutes;      hours = Math.floor(offset / 60);      minutes = Math.abs(offset % 60);      direction = hours > 0 ? '-' : '+';      return direction + pad(Math.abs(hours)) + pad(minutes);    };    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', ' Aug', 'Sep', 'Oct', 'Nov', 'Dec'];    days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];    time = [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds())].join(':');    return [days[date.getDay()] + ',', pad(date.getDate()), months[date.getMonth()], date.getFullYear(), time, tzoffset(date.getTimezoneOffset())].join(' ');  };  /* Exports */  module.exports = {    fileExists: fileExists,    fileExistsSync: fileExistsSync,    extend: extend,    stripExtension: stripExtension,    readJSON: readJSON,    readJSONSync: readJSONSync,    readdirRecursive: readdirRecursive,    pump: pump,    rfc822: rfc822  };}).call(this);
 |