From 5ba22a36aa98910c57574b3745a63dd6bd2e1ea3 Mon Sep 17 00:00:00 2001 From: Meir Rotstein Date: Sun, 19 Nov 2017 23:02:08 +0200 Subject: [PATCH] remove Logger class, resolve logger object on Ajv ctor instead --- lib/ajv.js | 16 +++--- lib/compile/logger.js | 41 ---------------- spec/logger.spec.js | 110 ------------------------------------------ spec/options.spec.js | 33 ++++++------- 4 files changed, 25 insertions(+), 175 deletions(-) delete mode 100644 lib/compile/logger.js delete mode 100644 spec/logger.spec.js diff --git a/lib/ajv.js b/lib/ajv.js index 2fe5e7e..6f6b00f 100644 --- a/lib/ajv.js +++ b/lib/ajv.js @@ -10,7 +10,6 @@ var compileSchema = require('./compile') , $dataMetaSchema = require('./$data') , patternGroups = require('./patternGroups') , util = require('./compile/util') - , Logger = require('./compile/logger') , co = require('co'); module.exports = Ajv; @@ -479,10 +478,15 @@ function getMetaSchemaOptions(self) { } function setLogger(self) { - var loggerObj; + var noop = function(){}; - if(self._opts.logger === false) loggerObj = null; - if(typeof self._opts.logger === 'object') loggerObj = self._opts.logger; - - self.logger = new Logger(loggerObj); + if(self._opts.logger === false) { + self.logger = {log: noop, warn: noop, error: noop}; + } else if(typeof self._opts.logger === 'object') { + if (!(self._opts.logger.log && self._opts.logger.warn && self._opts.logger.error)) + throw new Error('logger must implement log, warn and error functions'); + self.logger = self._opts.logger; + } else { + self.logger = console; + } } diff --git a/lib/compile/logger.js b/lib/compile/logger.js deleted file mode 100644 index 133b824..0000000 --- a/lib/compile/logger.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -module.exports = Logger; - -/** - * @constructor - * @this Logger - * @param {*=} loggerObj logger object, expected to implement log, warn and error, if not given global console will be taken. - */ -function Logger(loggerObj) { - if(loggerObj && typeof loggerObj === 'object') - this.logger = loggerObj; - else if(typeof loggerObj === 'undefined') - this.logger = typeof console === 'object' ? console : {log: noop, warn: noop, error: noop}; - else - this.logger = null; -} - -Logger.prototype.log = function() { - _logFunc.call(this, 'log', arguments); -}; - -Logger.prototype.warn = function() { - _logFunc.call(this, 'warn', arguments); -}; - -Logger.prototype.error = function() { - _logFunc.call(this, 'error', arguments); -}; - -/** - * @this Logger - * @param {String} level log level - log, warn or error - * @param {Array} args log argumets - * @private - */ -function _logFunc(level, args) { - if(this.logger && this.logger[level]) this.logger[level].apply(this, args); -} - -function noop() {} \ No newline at end of file diff --git a/spec/logger.spec.js b/spec/logger.spec.js deleted file mode 100644 index c6bb2fb..0000000 --- a/spec/logger.spec.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -var Logger = require('../lib/compile/logger') - , should = require('./chai').should(); - -describe('logger object tests', function() { - - var logger; - - var origConsoleWarn = console.warn; - var origConsoleLog = console.log; - var origConsoleError = console.error; - - var consoleWarnCalled = false; - var consoleLogCalled = false; - var consoleErrorCalled = false; - - beforeEach(function() { - console.warn = function() { - consoleWarnCalled = true; - origConsoleWarn.apply(console, arguments); - }; - console.log = function() { - consoleLogCalled = true; - origConsoleLog.apply(console, arguments); - }; - console.error = function() { - consoleErrorCalled = true; - origConsoleError.apply(console, arguments); - return 'boo'; - }; - }); - - afterEach(function() { - console.warn = origConsoleWarn; - console.log = origConsoleLog; - console.error = origConsoleError; - consoleErrorCalled = consoleLogCalled = consoleWarnCalled = false; - }); - - it('logger should log into global console by default', function() { - - logger = new Logger(); - - logger.log('42'); - logger.warn('42'); - logger.error('42'); - - should.equal(consoleWarnCalled, true); - should.equal(consoleLogCalled, true); - should.equal(consoleErrorCalled, true); - }); - - it('logger should log only into a custom logger if given', function() { - var customWarnCalled = false; - var customLogCalled = false; - var customErrorCalled = false; - - var customLogger = { - warn: function() { - customWarnCalled = true; - }, - log: function() { - customLogCalled = true; - }, - error: function() { - customErrorCalled = true; - } - }; - - logger = new Logger(customLogger); - - logger.log('42'); - logger.warn('42'); - logger.error('42'); - - should.equal(consoleWarnCalled, false); - should.equal(consoleLogCalled, false); - should.equal(consoleErrorCalled, false); - - should.equal(customWarnCalled, true); - should.equal(customLogCalled, true); - should.equal(customErrorCalled, true); - }); - - it('if a custom logger is given without basic logging functions implementations it should not leads to an exception', function() { - logger = new Logger({}); - - logger.log('42'); - logger.warn('42'); - logger.error('42'); - - should.equal(consoleWarnCalled, false); - should.equal(consoleLogCalled, false); - should.equal(consoleErrorCalled, false); - }); - - it('if a custom logger is set to null logging should be disabled', function() { - logger = new Logger(null); - - logger.log('42'); - logger.warn('42'); - logger.error('42'); - - should.equal(consoleWarnCalled, false); - should.equal(consoleLogCalled, false); - should.equal(consoleErrorCalled, false); - }); - -}); \ No newline at end of file diff --git a/spec/options.spec.js b/spec/options.spec.js index ea30f94..0f5ba02 100644 --- a/spec/options.spec.js +++ b/spec/options.spec.js @@ -1261,6 +1261,12 @@ describe('Ajv Options', function () { var logger = { warn: function() { loggerCalled = true; + }, + log: function() { + loggerCalled = true; + }, + error: function() { + loggerCalled = true; } }; @@ -1278,25 +1284,7 @@ describe('Ajv Options', function () { should.equal(consoleCalled, false); }); - it('custom logger is an object but not implements the basic functions - make sure that it not leads to an error', function() { - - var logger = {}; - - var ajv = new Ajv({ - meta: false, - logger: logger - }); - - ajv.compile({ - schema: { type: 'number' }, - minimum: 1 - }); - - should.equal(consoleCalled, false); - }); - it('logger option is false - no logs should be reported', function() { - var ajv = new Ajv({ meta: false, logger: false @@ -1310,5 +1298,14 @@ describe('Ajv Options', function () { should.equal(consoleCalled, false); }); + it('logger option is an object but not implmemting the console functions - an error should be raised', function() { + (function(){ + new Ajv({ + meta: false, + logger: {} + }); + }).should.throw(Error, /logger must implement log, warn and error function/); + }); + }); });