remove Logger class, resolve logger object on Ajv ctor instead
parent
e0c7eac50d
commit
5ba22a36aa
16
lib/ajv.js
16
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() {}
|
|
@ -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);
|
||||
});
|
||||
|
||||
});
|
|
@ -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/);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue