diff options
Diffstat (limited to 'lib/generate')
-rw-r--r-- | lib/generate/generator.js | 5 | ||||
-rw-r--r-- | lib/generate/plugin.js | 30 |
2 files changed, 35 insertions, 0 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" |