summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/generate/generator.js5
-rw-r--r--lib/generate/plugin.js30
-rw-r--r--test/plugin.js20
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;