From b1c91b74194d58cff6f065a3badacc3373d2050c Mon Sep 17 00:00:00 2001 From: Andrew Stewart Date: Mon, 22 Jun 2015 19:08:15 -0700 Subject: [PATCH] Logger should subscribe to updates, not be told what to do --- lib/cylon.js | 13 +------------ lib/logger.js | 13 ++++++------- spec/lib/cylon.spec.js | 19 ++----------------- spec/lib/logger.spec.js | 10 +++++++++- 4 files changed, 18 insertions(+), 37 deletions(-) diff --git a/lib/cylon.js b/lib/cylon.js index 71a9f44..18527f7 100644 --- a/lib/cylon.js +++ b/lib/cylon.js @@ -120,18 +120,7 @@ Cylon.start = function start() { // // Returns the current config Cylon.config = function(opts) { - var loggingChanged = ( - opts.logging && Config.logging !== _.extend(Config.logging, opts.logging) - ); - - if (_.isObject(opts)) { - Config = _.extend(Config, opts); - } - - if (loggingChanged) { - Logger.setup(); - } - + if (_.isObject(opts)) { Config.update(opts); } return Config; }; diff --git a/lib/logger.js b/lib/logger.js index fd27ad7..9f03bff 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -9,9 +9,7 @@ var BasicLogger = require("./logger/basic_logger"), var Logger = module.exports = { setup: function(opts) { - if (_.isObject(opts)) { - Config.logging = _.extend(Config.logging, opts); - } + if (_.isObject(opts)) { _.extend(Config.logging, opts); } var logger = Config.logging.logger, level = Config.logging.level || "info"; @@ -23,18 +21,19 @@ var Logger = module.exports = { logger = (logger == null) ? BasicLogger : logger; - this.logger = logger || NullLogger; - this.level = level; + Logger.logger = logger || NullLogger; + Logger.level = level; - return this; + return Logger; }, toString: function() { - return this.logger.toString(); + return Logger.logger.toString(); } }; Logger.setup(); +Config.subscribe(Logger.setup); levels.forEach(function(level) { Logger[level] = function() { diff --git a/spec/lib/cylon.spec.js b/spec/lib/cylon.spec.js index 78ee96e..a8b1aa3 100644 --- a/spec/lib/cylon.spec.js +++ b/spec/lib/cylon.spec.js @@ -111,15 +111,8 @@ describe("Cylon", function() { describe("#config", function() { beforeEach(function() { - for (var c in Config) { - delete Config[c]; - } - - stub(Logger, "setup"); - }); - - afterEach(function() { - Logger.setup.restore(); + delete Config.a; + delete Config.b; }); it("sets config variables", function() { @@ -146,14 +139,6 @@ describe("Cylon", function() { Cylon.config("hello world"); expect(Config).to.be.eql(config); }); - - it("updates the Logger setup if that changed", function() { - Cylon.config({ a: 1 }); - expect(Logger.setup).to.not.be.called; - - Cylon.config({ a: 1, logging: { logger: false } }); - expect(Logger.setup).to.be.called; - }); }); describe("#halt", function() { diff --git a/spec/lib/logger.spec.js b/spec/lib/logger.spec.js index e23fc96..69aeb70 100644 --- a/spec/lib/logger.spec.js +++ b/spec/lib/logger.spec.js @@ -1,7 +1,8 @@ "use strict"; var Logger = lib("logger"), - Config = lib("config"); + Config = lib("config"), + NullLogger = lib("logger/null_logger"); describe("Logger", function() { afterEach(function() { @@ -146,4 +147,11 @@ describe("Logger", function() { expect(logger.info).to.be.calledWith("info message"); }); }); + + it("automatically updates if configuration changed", function() { + var custom = spy(); + expect(Logger.logger).to.be.eql(NullLogger); + Config.update({ logging: { logger: custom } }); + expect(Logger.logger).to.be.eql(custom); + }); });