summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2014-04-19 17:54:15 +0200
committerSamy Pessé <samypesse@gmail.com>2014-04-19 17:54:15 +0200
commitc6a624bc6b8e95d186a268c724031087cca8d681 (patch)
tree56e5cfcdbc27393428c6fe53b8b114743c8f76ba
parent8be8b825eebc95926e7d7c2596f8b789dba0f799 (diff)
downloadgitbook-c6a624bc6b8e95d186a268c724031087cca8d681.zip
gitbook-c6a624bc6b8e95d186a268c724031087cca8d681.tar.gz
gitbook-c6a624bc6b8e95d186a268c724031087cca8d681.tar.bz2
Add method to load a list of plugins from generator options
-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;