diff options
-rw-r--r-- | lib/generate/generator.js | 5 | ||||
-rw-r--r-- | lib/generate/plugin.js | 30 | ||||
-rw-r--r-- | test/plugin.js | 20 |
3 files changed, 54 insertions, 1 deletions
diff --git a/lib/generate/generator.js b/lib/generate/generator.js index 13022a5..d9ec286 100644 --- a/lib/generate/generator.js +++ b/lib/generate/generator.js @@ -1,9 +1,14 @@ +var _ = require("lodash"); var path = require("path"); var Q = require("q"); var fs = require("./fs"); +var Plugin = require("./plugin"); + var BaseGenerator = function(options) { this.options = options; + + this.options.plugins = Plugin.normalizeNames(this.options.plugins); }; BaseGenerator.prototype.convertFile = function(content, input) { diff --git a/lib/generate/plugin.js b/lib/generate/plugin.js index a39fc65..27c1cc9 100644 --- a/lib/generate/plugin.js +++ b/lib/generate/plugin.js @@ -88,6 +88,36 @@ Plugin.fromList = function(names) { }); }; + +// Normalize a list of plugin name to use +Plugin.normalizeNames = function(names) { + // Normalize list to an array + names = _.isString(names) ? names.split(":") : (names || []); + + // List plugins to remove + var toremove = _.chain(names) + .filter(function(name) { + return name.length > 0 && name[0] == "-"; + }) + .map(function(name) { + return name.slice(1) + }) + .value(); + + // Merge with defaults + names = _.chain(names) + .concat(Plugin.defaults) + .uniq() + .value(); + + // Remove plugins starting with + names = _.filter(names, function(name) { + return !_.contains(toremove, name) && !(name.length > 0 && name[0] == "-"); + }); + + return names; +}; + // Default plugins Plugin.defaults = [ "mixpanel" diff --git a/test/plugin.js b/test/plugin.js index b4e2102..1a27f80 100644 --- a/test/plugin.js +++ b/test/plugin.js @@ -1,4 +1,4 @@ -var fs = require('fs'); +var _ = require('lodash'); var path = require('path'); var assert = require('assert'); @@ -12,6 +12,24 @@ describe('Plugin validation', function () { }); }); +describe('Plugin list of names', function () { + var firstDefault = _.first(Plugin.defaults); + + it('should convert string to array', function() { + var _name = "test"; + assert(_.contains(Plugin.normalizeNames(_name), _name)); + }); + + it('should contains default plugins', function() { + console.log(firstDefault, Plugin.normalizeNames([])); + assert(_.contains(Plugin.normalizeNames([]), firstDefault)); + }); + + it('should remove name starting with -', function() { + assert(!_.contains(Plugin.normalizeNames(["-"+firstDefault]), firstDefault)); + }); +}); + describe('Plugin defaults loading', function () { var ret = true; |