underscore.logger/0000755000175000017500000000000011675044273013524 5ustar jonasjonasunderscore.logger/README.md0000644000175000017500000000614011675043747015011 0ustar jonasjonas# underscore.logger > Cross-browser and Node.js empowered logging. ## Install ``` npm install underscore.logger ``` ### Browser ``` html ``` ### Node.js ``` coffeescript _console = require('underscore.logger') ``` If you want to make it useable everywhere in node: ``` coffeescript global._console ||= require('underscore.logger') ``` ### Underscore Mixin ``` coffeescript _.mixin require('underscore.logger').toObject() # _.mixin(_console.toObject()) _.log "It works!" _.error "Log %s in RED", "something" ``` ## Api ``` coffeescript # set the log level so anything above this won't show up _console.level = _console.constructor.DEBUG # you can access the constructor helpers like this as well: Logger = _console.constructor _console.level = Logger.DEBUG # override default colors for any of the log levels _console.colors[Logger.WARN] = Logger.ANSI.RED # the first parameter is the message, any following parameters are variables. _console.trace "I'm a trace" _console.debug "Debug message" _console.info "%s %s!", "Hello", "World" #=> "Hello World!" _console.error "ERROR!" _console.fatal "oh man..." # set a custom `out` method, which defaults to `console.log` _console.out = (message) -> alert(message) # customize the format too if you'd like, which defaults to `[date] level message` _console.format = (date, level, message) -> message # watch the fps to see how your app is performing (`this` is the `Logger.Timer` object) _console.on "frame" -> $("#log-line-template").tmpl(@fps).appendTo("#log-panel") ``` To create a new one, maybe because you want two separate loggers (the edge case), you can use the constructor: ``` coffeescript myLogger = new _console.constructor ``` ## Resources - http://en.wikipedia.org/wiki/Common_Log_Format ## Development ``` ./node_modules/coffee-script/bin/coffee -o lib -w src ./node_modules/jasmine-node/bin/jasmine-node --coffee ./spec ``` ## License (The MIT License) Copyright © 2011 [Lance Pollard](http://twitter.com/viatropos) <lancejpollard@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. underscore.logger/.gitignore0000644000175000017500000000035611675043747015525 0ustar jonasjonas## MAC OS .DS_Store *.gem ## TEXTMATE *.tmproj tmtags ## EMACS *~ \#* .\#* ## VIM *.swp ## PROJECT::GENERAL coverage rdoc pkg ## PROJECT::SPECIFIC doc doc/* doc/**/* node_modules node_modules/* node_modules/**/* spec/secrets.coffeeunderscore.logger/lib/0000755000175000017500000000000011675043747014277 5ustar jonasjonasunderscore.logger/lib/underscore.logger.js0000644000175000017500000001420511675043747020266 0ustar jonasjonas(function() { var Logger; Logger = (function() { Logger.FATAL = 0; Logger.ERROR = 1; Logger.WARN = 2; Logger.INFO = 3; Logger.DEBUG = 4; Logger.TRACE = 5; Logger.levels = ["FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"]; Logger.ANSI = { OFF: 0, BOLD: 1, ITALIC: 3, UNDERLINE: 4, BLINK: 5, INVERSE: 7, HIDDEN: 8, BLACK: 30, RED: 31, GREEN: 32, YELLOW: 33, BLUE: 34, MAGENTA: 35, CYAN: 36, WHITE: 37, BLACK_BG: 40, RED_BG: 41, GREEN_BG: 42, YELLOW_BG: 43, BLUE_BG: 44, MAGENTA_BG: 45, CYAN_BG: 46, WHITE_BG: 47 }; Logger.colors = [Logger.ANSI.MAGENTA, Logger.ANSI.RED, Logger.ANSI.YELLOW, Logger.ANSI.GREEN, Logger.ANSI.CYAN, Logger.ANSI.BLUE]; function Logger(options) { if (options == null) options = {}; this.level = options.level || Logger.DEBUG; if (options.out) this.out = options.out; this.colorized = options.hasOwnProperty("colorized") ? options.colorized : false; this.colors = Logger.colors.concat(); } Logger.prototype.out = function(message) { return console.log(message); }; Logger.prototype.colorize = function() { var color, colors, i, result, string; colors = Array.prototype.slice.call(arguments); string = colors.shift(); result = ""; i = 0; while (color = colors[i]) { result += "\033[" + color + "m"; i++; } result += "" + string + "\033[" + Logger.ANSI.OFF + "m"; return result; }; Logger.prototype.format = function(date, level, message) { return "[" + (date.toUTCString()) + "] " + Logger.levels[level] + " " + message; }; Logger.prototype._log = function(level, args) { var i, message; if (level <= this.level) { i = 0; message = args[0].replace(/%s/g, function() { return args[i++]; }); message = this.format(new Date(), level, message); if (this.colorized) message = this.colorize(message, this.colors[level]); return this.out(message); } }; Logger.prototype.log = function() { return this.info.apply(this, arguments); }; Logger.prototype.fatal = function() { return this._log(Logger.FATAL, arguments); }; Logger.prototype.error = function() { return this._log(Logger.ERROR, arguments); }; Logger.prototype.warn = function() { return this._log(Logger.WARN, arguments); }; Logger.prototype.info = function() { return this._log(Logger.INFO, arguments); }; Logger.prototype.debug = function() { return this._log(Logger.DEBUG, arguments); }; Logger.prototype.trace = function() { return this._log(Logger.TRACE, arguments); }; Logger.prototype.group = function() {}; Logger.prototype.on = function(event, callback) { var _ref; switch (event) { case "message": this; break; case "line": this; break; case "frame": if ((_ref = this.timer) == null) this.timer = new Logger.Timer(); this.timer.on(event, callback); break; case "bench": this; } return this; }; Logger.prototype.toObject = function() { var logger; logger = this; return { log: function() { return logger.log.apply(logger, arguments); }, fatal: function() { return logger.fatal.apply(logger, arguments); }, error: function() { return logger.error.apply(logger, arguments); }, warn: function() { return logger.warn.apply(logger, arguments); }, info: function() { return logger.info.apply(logger, arguments); }, debug: function() { return logger.debug.apply(logger, arguments); }, trace: function() { return logger.trace.apply(logger, arguments); } }; }; Logger.Timer = (function() { function Timer() { this.now = Date.now(); this.time_last_frame = this.now; this.time_last_second = this.now; this.fps = 0; this.fps_min = 1000; this.fps_max = 0; this.ms = 0; this.ms_min = 0; this.ms_max = 0; this.frames = 0; this.handlers = []; } Timer.prototype.on = function(event, callback) { this.handlers.push(callback); return this.start(); }; Timer.prototype.start = function() { var self; if (this.timer) return this; self = this; this.timer = setInterval((function() { return self.update(); }), 1000 / 60); return this; }; Timer.prototype.stop = function() { clearInterval(this.timer); this.timer = null; return this; }; Timer.prototype.update = function() { var handler, _i, _len, _ref, _results; this.now = Date.now(); this.ms = this.now - this.time_last_frame; this.ms_min = Math.min(this.ms_min, this.ms); this.ms_max = Math.max(this.ms_max, this.ms); this.time_last_frame = this.now; this.frames += 1; if (this.now > (this.time_last_second + 1000)) { this.fps = Math.round((this.frames * 1000) / (this.now - this.time_last_second)); this.fps_min = Math.min(this.fps_min, this.fps); this.fps_max = Math.max(this.fps_max, this.fps); this.time_last_second = this.now; this.frames = 0; _ref = this.handlers; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { handler = _ref[_i]; _results.push(handler.apply(this)); } return _results; } }; return Timer; })(); return Logger; })(); if (typeof module === 'undefined' || typeof window !== 'undefined') { window["_console"] = new Logger({ colorized: false }); } else { module.exports = new Logger({ colorized: true }); } }).call(this); underscore.logger/spec/0000755000175000017500000000000011675043747014463 5ustar jonasjonasunderscore.logger/spec/index.html0000644000175000017500000000032311675043747016456 0ustar jonasjonas Common Logger Spec underscore.logger/spec/loggerSpec.coffee0000644000175000017500000000454711675043747017740 0ustar jonasjonas_console = require('../lib/underscore.logger') Logger = _console.constructor _ = require 'underscore' describe 'common-logger', -> describe 'levels', -> it "should default to debug", -> expect(_console.level).toEqual Logger.DEBUG it "should accept a new log level", -> _console.level = Logger.ERROR expect(_console.level).toEqual Logger.ERROR _console.level = Logger.DEBUG describe 'color', -> it "should have default colors", -> expect(_console.colors[Logger.TRACE]).toEqual Logger.ANSI.BLUE expect(_console.colors[Logger.DEBUG]).toEqual Logger.ANSI.CYAN describe 'format', -> beforeEach -> _console.colorized = false _console.out = (m) -> m afterEach -> _console.colorized = true _console.out = (m) -> console.log m it 'should default to a date format', -> now = new Date().toUTCString() expect(_console.info('format')).toEqual "[#{now}] INFO format" describe 'file', -> describe 'stream', -> describe 'grouping', -> describe 'benchmarking', -> describe 'fps', -> beforeEach -> _console.colorized = false afterEach -> _console.colorized = true it "should clock it!", -> _console.on "frame", -> expect(@fps).toEqual 60 @stop() describe 'cross-browser', -> describe 'underscore mixin', -> beforeEach -> _console.colorized = false _console.out = (m) -> m afterEach -> _console.colorized = true _console.out = (m) -> console.log m it 'should become a mixin!', -> expect(_.log).toEqual undefined expect(_.fatal).toEqual undefined expect(_.error).toEqual undefined expect(_.warn).toEqual undefined expect(_.info).toEqual undefined expect(_.debug).toEqual undefined expect(_.trace).toEqual undefined _.mixin _console.toObject() expect(_.log).toNotEqual undefined expect(_.fatal).toNotEqual undefined expect(_.error).toNotEqual undefined expect(_.warn).toNotEqual undefined expect(_.info).toNotEqual undefined expect(_.debug).toNotEqual undefined expect(_.trace).toNotEqual undefined now = new Date().toUTCString() expect(_.info('format')).toEqual "[#{now}] INFO format"underscore.logger/npm-debug.log0000644000175000017500000004350611675043747016122 0ustar jonasjonasinfo it worked if it ends with ok verbose cli [ 'node', '/usr/local/bin/npm', 'publish' ] info using npm@1.0.105 info using node@v0.6.1 verbose /usr/local/bin/node node symlink verbose config file /Users/viatropos/.npmrc verbose config file /usr/local/etc/npmrc verbose config file /usr/local/lib/node_modules/npm/npmrc verbose publish [ '.' ] silly testEngine { name: 'underscore.logger', silly testEngine version: '0.3.0', silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.', silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js', silly testEngine main: 'lib/underscore.logger.js', silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' }, silly testEngine keywords: [ 'logging', 'node', 'browser' ], silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ], silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' }, silly testEngine repository: silly testEngine { type: 'git', silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' }, silly testEngine directories: { test: 'spec' }, silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' }, silly testEngine _id: 'underscore.logger@0.3.0', silly testEngine dependencies: {}, silly testEngine devDependencies: {}, silly testEngine engines: { node: '*' }, silly testEngine _engineSupported: true, silly testEngine _npmVersion: '1.0.105', silly testEngine _nodeVersion: 'v0.6.1', silly testEngine _defaultsLoaded: true, silly testEngine scripts: {} } verbose caching /Users/viatropos/Documents/git/personal/plugins/underscore.logger/package.json verbose loadDefaults underscore.logger@0.3.0 info prepublish underscore.logger@0.3.0 verbose cache add [ '.', null ] silly cache add: name, spec, args [ undefined, '.', [ '.', null ] ] verbose parsed url { pathname: '.', path: '.', href: '.' } silly testEngine { name: 'underscore.logger', silly testEngine version: '0.3.0', silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.', silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js', silly testEngine main: 'lib/underscore.logger.js', silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' }, silly testEngine keywords: [ 'logging', 'node', 'browser' ], silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ], silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' }, silly testEngine repository: silly testEngine { type: 'git', silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' }, silly testEngine directories: { test: 'spec' }, silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' }, silly testEngine _id: 'underscore.logger@0.3.0', silly testEngine dependencies: {}, silly testEngine devDependencies: {}, silly testEngine engines: { node: '*' }, silly testEngine _engineSupported: true, silly testEngine _npmVersion: '1.0.105', silly testEngine _nodeVersion: 'v0.6.1', silly testEngine _defaultsLoaded: true, silly testEngine path: '/Users/viatropos/Documents/git/personal/plugins/underscore.logger', silly testEngine bundleDependencies: [] } verbose caching package.json verbose loadDefaults underscore.logger@0.3.0 verbose pack /Users/viatropos/Documents/git/personal/plugins/underscore.logger /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/tmp.tgz silly makeList /Users/viatropos/Documents/git/personal/plugins/underscore.logger verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687' verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107' verbose mkdir done: /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107 755 verbose mkdir'ed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107 verbose tar about to write tar and gzip it. silly tar args [ '-czvf', '-', '-T', '-' ] silly spawning [ 'tar', silly spawning [ '-czvf', '-', '-T', '-' ], silly spawning '/Users/viatropos/Documents/git/personal/plugins' ] verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents' verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm' verbose mkdir done: /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm 755 verbose unpack_ uid, gid [ undefined, undefined ] verbose unpackTarget /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package silly gunzTarPerm modes [ '755', '644' ] silly spawning [ 'tar', silly spawning [ '-zmvxpf', silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/tmp.tgz' ], silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm' ] silly tar err x underscore.logger/.gitignore silly tar err x underscore.logger/Cakefile silly tar err x underscore.logger/package.json silly tar err x underscore.logger/README.md silly tar err x underscore.logger/lib/underscore.logger.js silly tar err x underscore.logger/spec/index.html silly tar err x underscore.logger/spec/loggerSpec.coffee silly tar err x underscore.logger/src/underscore.logger.coffee silly tar exit 0 silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/.gitignore silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/Cakefile silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/package.json silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/README.md silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/lib silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/lib/underscore.logger.js silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec/index.html silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec/loggerSpec.coffee silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/src silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/src/underscore.logger.coffee verbose gunzed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger verbose rm'ed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package verbose renamed [ '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger', verbose renamed '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package' ] silly testEngine { name: 'underscore.logger', silly testEngine version: '0.3.0', silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.', silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js', silly testEngine main: 'lib/underscore.logger.js', silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' }, silly testEngine keywords: [ 'logging', 'node', 'browser' ], silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ], silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' }, silly testEngine repository: silly testEngine { type: 'git', silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' }, silly testEngine directories: { test: 'spec' }, silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' }, silly testEngine _id: 'underscore.logger@0.3.0', silly testEngine dependencies: {}, silly testEngine devDependencies: {}, silly testEngine engines: { node: '*' }, silly testEngine _engineSupported: true, silly testEngine _npmVersion: '1.0.105', silly testEngine _nodeVersion: 'v0.6.1', silly testEngine _defaultsLoaded: true, silly testEngine path: '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package' } verbose caching /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package/package.json verbose loadDefaults underscore.logger@0.3.0 verbose tarball contents [ 'package' ] verbose from cache /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package/package.json verbose pack /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz silly makeList /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package verbose mkdir'ed /Users/viatropos/.npm/underscore.logger/0.3.0 verbose tar about to write tar and gzip it. silly tar args [ '-czvf', '-', '-T', '-' ] silly spawning [ 'tar', silly spawning [ '-czvf', '-', '-T', '-' ], silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents' ] verbose mkdir (expected) error ENOENT, no such file or directory '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm' verbose mkdir done: /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm 755 verbose unpack_ uid, gid [ undefined, undefined ] verbose unpackTarget /Users/viatropos/.npm/underscore.logger/0.3.0/package silly gunzTarPerm modes [ '755', '644' ] silly spawning [ 'tar', silly spawning [ '-zmvxpf', silly spawning '/Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz' ], silly spawning '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm' ] silly tar err x package/.gitignore silly tar err x package/Cakefile silly tar err x package/package.json silly tar err x package/README.md silly tar err x package/lib/underscore.logger.js silly tar err x package/spec/index.html silly tar err x package/spec/loggerSpec.coffee silly tar err x package/src/underscore.logger.coffee silly tar exit 0 silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/.gitignore silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/Cakefile silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/package.json silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/README.md silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/lib silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/lib/underscore.logger.js silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec/index.html silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec/loggerSpec.coffee silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/src silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/src/underscore.logger.coffee verbose gunzed /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package verbose rm'ed /Users/viatropos/.npm/underscore.logger/0.3.0/package verbose renamed [ '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package', verbose renamed '/Users/viatropos/.npm/underscore.logger/0.3.0/package' ] silly testEngine { name: 'underscore.logger', silly testEngine version: '0.3.0', silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.', silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js', silly testEngine main: 'lib/underscore.logger.js', silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' }, silly testEngine keywords: [ 'logging', 'node', 'browser' ], silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ], silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' }, silly testEngine repository: silly testEngine { type: 'git', silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' }, silly testEngine directories: { test: 'spec' }, silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' }, silly testEngine _id: 'underscore.logger@0.3.0', silly testEngine dependencies: {}, silly testEngine devDependencies: {}, silly testEngine engines: { node: '*' }, silly testEngine _engineSupported: true, silly testEngine _npmVersion: '1.0.105', silly testEngine _nodeVersion: 'v0.6.1', silly testEngine _defaultsLoaded: true, silly testEngine dist: silly testEngine { shasum: '6966a81e1e31bbfa017c2f42655d1d6331b3c9fe', silly testEngine tarball: 'http://registry.npmjs.org/underscore.logger/-/underscore.logger-0.3.0.tgz' } } verbose caching /Users/viatropos/.npm/underscore.logger/0.3.0/package/package.json verbose loadDefaults underscore.logger@0.3.0 silly updated sha bytes 10240 info shasum 6966a81e1e31bbfa017c2f42655d1d6331b3c9fe info shasum /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz verbose from cache /Users/viatropos/.npm/underscore.logger/0.3.0/package/package.json verbose chmod /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz 644 verbose chown [ '/Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz', verbose chown 501, verbose chown 20 ] silly publish { name: 'underscore.logger', silly publish version: '0.3.0', silly publish description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.', silly publish homepage: 'http://github.com/viatropos/underscore.logger.js', silly publish main: 'lib/underscore.logger.js', silly publish author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' }, silly publish keywords: [ 'logging', 'node', 'browser' ], silly publish licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ], silly publish bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' }, silly publish repository: silly publish { type: 'git', silly publish url: 'git://github.com/viatropos/underscore.logger.js.git' }, silly publish directories: { test: 'spec' }, silly publish _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' }, silly publish _id: 'underscore.logger@0.3.0', silly publish dependencies: {}, silly publish devDependencies: {}, silly publish engines: { node: '*' }, silly publish _engineSupported: true, silly publish _npmVersion: '1.0.105', silly publish _nodeVersion: 'v0.6.1', silly publish _defaultsLoaded: true, silly publish dist: silly publish { shasum: '6966a81e1e31bbfa017c2f42655d1d6331b3c9fe', silly publish tarball: 'http://registry.npmjs.org/underscore.logger/-/underscore.logger-0.3.0.tgz' } } verbose PUT underscore.logger verbose raw, before any munging underscore.logger verbose url resolving [ 'https://registry.npmjs.org/', './underscore.logger' ] verbose url resolved https://registry.npmjs.org/underscore.logger verbose GET underscore.logger verbose raw, before any munging underscore.logger verbose url resolving [ 'https://registry.npmjs.org/', './underscore.logger' ] verbose url resolved https://registry.npmjs.org/underscore.logger info Already published underscore.logger@0.3.0 verbose uploading bin dists [] ERR! publish fail Cannot publish over existing version. ERR! publish fail Bump the 'version' field, set the --force flag, or ERR! publish fail npm unpublish 'underscore.logger@0.3.0' ERR! publish fail and try again ERR! ERR! System Darwin 10.7.0 ERR! command "node" "/usr/local/bin/npm" "publish" ERR! cwd /Users/viatropos/Documents/git/personal/plugins/underscore.logger ERR! node -v v0.6.1 ERR! npm -v 1.0.105 ERR! code EPUBLISHCONFLICT verbose exit [ 1, true ] underscore.logger/package.json0000644000175000017500000000130511675043747016016 0ustar jonasjonas{ "name": "underscore.logger", "version": "0.3.0", "description": "Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.", "homepage": "http://github.com/viatropos/underscore.logger.js", "main": "lib/underscore.logger.js", "author": "Lance Pollard ", "keywords": [ "logging", "node", "browser" ], "licenses": [ { "type": "MIT", "url": "http://mths.be/mit" } ], "bugs": { "url": "https://github.com/viatropos/underscore.logger.js/issues" }, "repository": { "type": "git", "url": "https://github.com/viatropos/underscore.logger.js.git" }, "directories": { "test": "spec" } } underscore.logger/Cakefile0000644000175000017500000000131711675043747015161 0ustar jonasjonas{spawn, exec} = require 'child_process' fs = require 'fs' sys = require 'util' task 'coffee', -> coffee = spawn './node_modules/coffee-script/bin/coffee', ['-o', 'lib', '-w', 'src'] coffee.stdout.on 'data', (data) -> console.log data.toString().trim() task 'spec', 'Run jasmine specs', -> spec = spawn './node_modules/jasmine-node/bin/jasmine-node', ['--coffee', './spec'] spec.stdout.on 'data', (data) -> data = data.toString().replace(/^\s*|\s*$/g, '') if data.match(/\u001b\[3\dm[\.F]\u001b\[0m/) sys.print data else data = "\n#{data}" if data.match(/Finished/) console.log data spec.stderr.on 'data', (data) -> console.log data.toString().trim() underscore.logger/src/0000755000175000017500000000000011675043747014320 5ustar jonasjonasunderscore.logger/src/underscore.logger.coffee0000644000175000017500000001014411675043747021120 0ustar jonasjonasclass Logger @FATAL: 0 @ERROR: 1 @WARN: 2 @INFO: 3 @DEBUG: 4 @TRACE: 5 @levels: ["FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"] @ANSI: OFF: 0 BOLD: 1 ITALIC: 3 UNDERLINE: 4 BLINK: 5 INVERSE: 7 HIDDEN: 8 BLACK: 30 RED: 31 GREEN: 32 YELLOW: 33 BLUE: 34 MAGENTA: 35 CYAN: 36 WHITE: 37 BLACK_BG: 40 RED_BG: 41 GREEN_BG: 42 YELLOW_BG: 43 BLUE_BG: 44 MAGENTA_BG: 45 CYAN_BG: 46 WHITE_BG: 47 @colors: [@ANSI.MAGENTA, @ANSI.RED, @ANSI.YELLOW, @ANSI.GREEN, @ANSI.CYAN, @ANSI.BLUE] constructor: (options = {}) -> @level = options.level || Logger.DEBUG @out = options.out if options.out # set to false if you're in the browser @colorized = if options.hasOwnProperty("colorized") then options.colorized else false @colors = Logger.colors.concat() out: (message) -> console.log(message) colorize: -> colors = Array.prototype.slice.call(arguments) string = colors.shift() result = "" i = 0 while color = colors[i] result += "\033[#{color}m" i++ result += "#{string}\033[#{Logger.ANSI.OFF}m" result format: (date, level, message) -> # Common Log Date Format: [10/Oct/2000:13:55:36 -0700] "[#{date.toUTCString()}] #{Logger.levels[level]} #{message}" _log: (level, args) -> if level <= @level i = 0 message = args[0].replace /%s/g, -> args[i++] message = @format(new Date(), level, message) message = @colorize(message, @colors[level]) if @colorized @out message log: -> @info(arguments...) fatal: -> @_log(Logger.FATAL, arguments) error: -> @_log(Logger.ERROR, arguments) warn: -> @_log(Logger.WARN, arguments) info: -> @_log(Logger.INFO, arguments) debug: -> @_log(Logger.DEBUG, arguments) trace: -> @_log(Logger.TRACE, arguments) group: -> on: (event, callback) -> switch event when "message" @ when "line" @ when "frame" @timer ?= new Logger.Timer() @timer.on(event, callback) when "bench" @ @ toObject: -> logger = @ log: -> logger.log(arguments...) fatal: -> logger.fatal(arguments...) error: -> logger.error(arguments...) warn: -> logger.warn(arguments...) info: -> logger.info(arguments...) debug: -> logger.debug(arguments...) trace: -> logger.trace(arguments...) class @Timer constructor: -> @now = Date.now() @time_last_frame = @now @time_last_second = @now @fps = 0 @fps_min = 1000 # set it high so it's calibrated to the lowest @fps_max = 0 @ms = 0 @ms_min = 0 @ms_max = 0 @frames = 0 @handlers = [] on: (event, callback) -> @handlers.push(callback) @start() start: -> return @ if @timer self = @ @timer = setInterval((-> self.update()), 1000 / 60) @ stop: -> clearInterval(@timer) @timer = null @ update: -> @now = Date.now() @ms = @now - @time_last_frame @ms_min = Math.min(@ms_min, @ms) @ms_max = Math.max(@ms_max, @ms) @time_last_frame = @now @frames += 1 if @now > (@time_last_second + 1000) @fps = Math.round((@frames * 1000) / (@now - @time_last_second)) @fps_min = Math.min(@fps_min, @fps) @fps_max = Math.max(@fps_max, @fps) @time_last_second = @now @frames = 0 for handler in @handlers handler.apply(@) if typeof module == 'undefined' || typeof window != 'undefined' window["_console"] = new Logger(colorized: false) else module.exports = new Logger(colorized: true)