Skip to content

Commit f68a306

Browse files
committed
Commiting #9 for testing.
1 parent 91febb4 commit f68a306

15 files changed

Lines changed: 196 additions & 63 deletions

File tree

.eslintrc.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@ var config = {
1616
}
1717
},
1818
env: {
19-
browser: true,
2019
node: true,
21-
es6: true,
22-
commonjs: true,
23-
amd: true
20+
es6: true
2421
},
2522
rules: {
2623
// ----------------------------

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## v2.2.0 2017 April 3
44
- Conversion from Coffeescript to ES6 (ES5 included through Babel)
5+
- New api loading system. You can use multiple isolated apis. (Sorry for breaking changes)
56

67
## v2.1.5 2017 March 6
78
- Load multiple API Javascript files and configurable API base URL

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
<span class="badge-travisci"><a href="http://travis-ci.org/UnivUnix/docpad-plugin-api" title="Check this project's build status on TravisCI"><img src="https://img.shields.io/travis/UnivUnix/docpad-plugin-api/master.svg" alt="Travis CI Build Status" /></a></span>
66
<span class="badge-npmversion"><a href="https://npmjs.org/package/docpad-plugin-api" title="View this project on NPM"><img src="https://img.shields.io/npm/v/docpad-plugin-api.svg" alt="NPM version" /></a></span>
77
<span class="badge-npmdownloads"><a href="https://npmjs.org/package/docpad-plugin-api" title="View this project on NPM"><img src="https://img.shields.io/npm/dm/docpad-plugin-api.svg" alt="NPM downloads" /></a></span>
8-
<span class="badge-daviddm"><a href="https://david-dm.org/univunix/docpad-plugin-api" title="View the status of this project's dependencies on DavidDM"><img src="https://img.shields.io/david/univunix/docpad-plugin-api.svg" alt="Dependency Status" /></a></span>
9-
<span class="badge-daviddmdev"><a href="https://david-dm.org/univunix/docpad-plugin-api#info=devDependencies" title="View the status of this project's development dependencies on DavidDM"><img src="https://img.shields.io/david/dev/univunix/docpad-plugin-api.svg" alt="Dev Dependency Status" /></a></span>
8+
<span class="badge-daviddm"><a href="https://david-dm.org/UnivUnix/docpad-plugin-api" title="View the status of this project's dependencies on DavidDM"><img src="https://img.shields.io/david/UnivUnix/docpad-plugin-api.svg" alt="Dependency Status" /></a></span>
9+
<span class="badge-daviddmdev"><a href="https://david-dm.org/UnivUnix/docpad-plugin-api#info=devDependencies" title="View the status of this project's development dependencies on DavidDM"><img src="https://img.shields.io/david/dev/Univunix/docpad-plugin-api.svg" alt="Dev Dependency Status" /></a></span>
1010

1111
<!-- /BADGES -->
1212

13+
1314
## How to use the plugin
1415

1516
* First, you need to create a Javascript file inside your Docpad project.

es2015/api.plugin.js

Lines changed: 93 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,82 @@ module.exports = function (BasePlugin) {
2626
_createClass(ApiPlugin, [{
2727
key: 'serverExtend',
2828
value: function serverExtend(opts) {
29+
// Error types
30+
var DPA_CONFIG_ERROR = 'DPAConfigError';
31+
var DPA_SRC_ERROR = 'DPASrcError';
32+
2933
// Extract server from options.
3034
var server = opts.server;
3135

3236
var docpad = this.docpad;
3337
var rootPath = docpad.getConfig().rootPath;
34-
var customApis = [];
35-
var src = void 0;
38+
var apis = [];
39+
var configSrc = void 0,
40+
configJson = void 0,
41+
func = void 0;
3642
var _iteratorNormalCompletion = true;
3743
var _didIteratorError = false;
3844
var _iteratorError = undefined;
3945

4046
try {
41-
for (var _iterator = this.config.source[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
42-
src = _step.value;
47+
for (var _iterator = this.config.cfgSrc[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
48+
configSrc = _step.value;
4349

4450
try {
45-
customApis.push(require(path.join(rootPath, src.file)));
46-
} catch (error) {
47-
docpad.log('error', 'Api - Error: ' + error.message);
51+
// Variables inside try block.
52+
var jsSrc = void 0;
53+
var _api = {};
54+
// Load config file.
55+
configJson = require(path.join(rootPath, configSrc));
56+
// Check if baseApiUrl is set.
57+
if (!configJson.baseApiUrl) {
58+
var dpaError = new Error('No baseApiUrl set in config file.\n\tIn ' + path.join(rootPath, configSrc));
59+
dpaError.name = DPA_CONFIG_ERROR;
60+
throw dpaError;
61+
}
62+
_api.baseApiUrl = configJson.baseApiUrl;
63+
// Check if there's any source set.
64+
if (!configJson.src || configJson.src.length === 0) {
65+
var _dpaError = new Error('The src parameter is\'nt properly configured.\n\tIn ' + path.join(rootPath, configSrc));
66+
_dpaError.name = DPA_CONFIG_ERROR;
67+
throw _dpaError;
68+
}
69+
_api.src = [];
70+
var _iteratorNormalCompletion3 = true;
71+
var _didIteratorError3 = false;
72+
var _iteratorError3 = undefined;
73+
74+
try {
75+
for (var _iterator3 = configJson.src[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
76+
jsSrc = _step3.value;
77+
78+
try {
79+
_api.src.push(require(path.join(rootPath, jsSrc)));
80+
} catch (err) {
81+
var _dpaError2 = new Error(err.name + ': ' + err.message + '\n\tIn ' + path.join(rootPath, jsSrc));
82+
_dpaError2.name = DPA_SRC_ERROR;
83+
throw _dpaError2;
84+
}
85+
}
86+
// When all configuration is ok, insert in apis array.
87+
} catch (err) {
88+
_didIteratorError3 = true;
89+
_iteratorError3 = err;
90+
} finally {
91+
try {
92+
if (!_iteratorNormalCompletion3 && _iterator3.return) {
93+
_iterator3.return();
94+
}
95+
} finally {
96+
if (_didIteratorError3) {
97+
throw _iteratorError3;
98+
}
99+
}
100+
}
101+
102+
apis.push(_api);
103+
} catch (err) {
104+
docpad.log('error', 'Api - ' + err.name + ': ' + err.message);
48105
}
49106
}
50107
} catch (err) {
@@ -62,28 +119,50 @@ module.exports = function (BasePlugin) {
62119
}
63120
}
64121

65-
docpad.log('info', 'Api - Loaded files: ' + customApis.length);
122+
docpad.log('info', 'Api - Loaded files: ' + apis.length);
66123

67124
// Default route.
68-
server.get(this.config.baseApiUrl + '/engine/version', function (req, res) {
125+
server.get('/engine/version', function (req, res) {
69126
return res.json({
70127
name: packJson.name,
71128
dev: packJson.author,
72129
version: packJson.version
73130
});
74131
});
75132

133+
var api = void 0;
76134
// Go to custom API routes.
77-
var func = void 0;
78135
var _iteratorNormalCompletion2 = true;
79136
var _didIteratorError2 = false;
80137
var _iteratorError2 = undefined;
81138

82139
try {
83-
for (var _iterator2 = customApis[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
84-
func = _step2.value;
140+
for (var _iterator2 = apis[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
141+
api = _step2.value;
142+
var _iteratorNormalCompletion4 = true;
143+
var _didIteratorError4 = false;
144+
var _iteratorError4 = undefined;
85145

86-
func(opts, this.config.baseApiUrl);
146+
try {
147+
for (var _iterator4 = api.src[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
148+
func = _step4.value;
149+
150+
func(opts, api.baseApiUrl);
151+
}
152+
} catch (err) {
153+
_didIteratorError4 = true;
154+
_iteratorError4 = err;
155+
} finally {
156+
try {
157+
if (!_iteratorNormalCompletion4 && _iterator4.return) {
158+
_iterator4.return();
159+
}
160+
} finally {
161+
if (_didIteratorError4) {
162+
throw _iteratorError4;
163+
}
164+
}
165+
}
87166
}
88167
} catch (err) {
89168
_didIteratorError2 = true;
@@ -109,10 +188,7 @@ module.exports = function (BasePlugin) {
109188
key: 'initialConfig',
110189
get: function get() {
111190
return {
112-
baseApiUrl: '/api',
113-
source: [{
114-
file: ''
115-
}]
191+
cfgSrc: []
116192
};
117193
}
118194
}]);

es2015/api.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
// Test our plugin using DocPad's testers
4+
var path = require('path');
45
require('docpad').require('testers').test({
5-
pluginPath: __dirname + '/..',
6-
testerClass: 'ServerTester'
6+
pluginPath: path.join(__dirname, '..')
77
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
"our:meta": "npm run our:meta:projectz",
101101
"our:meta:projectz": "projectz compile",
102102
"our:verify": "npm run our:verify:eslint",
103-
"our:verify:eslint": "eslint ./src",
103+
"our:verify:eslint": "./node_modules/.bin/eslint ./src",
104104
"our:test": "npm run our:verify && npm test",
105105
"our:release": "npm run our:release:prepare && npm run our:release:check && npm run our:release:tag && npm run our:release:push",
106106
"our:release:prepare": "npm run our:clean && npm run our:compile && npm run our:test && npm run our:meta",

src/api.plugin.js

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,43 +12,76 @@ module.exports = function (BasePlugin) {
1212

1313
get initialConfig () {
1414
return {
15-
baseApiUrl: '/api',
16-
source: [{
17-
file: ''
18-
}]
15+
cfgSrc: []
1916
};
2017
}
2118

2219
serverExtend (opts) {
20+
// Error types
21+
const DPA_CONFIG_ERROR = 'DPAConfigError';
22+
const DPA_SRC_ERROR = 'DPASrcError';
23+
2324
// Extract server from options.
2425
const {server} = opts;
2526
const docpad = this.docpad;
2627
const rootPath = docpad.getConfig().rootPath;
27-
const customApis = [];
28-
let src;
29-
for (src of this.config.source) {
28+
const apis = [];
29+
let configSrc, configJson, func;
30+
for (configSrc of this.config.cfgSrc) {
3031
try {
31-
customApis.push(require(path.join(rootPath, src.file)));
32+
// Variables inside try block.
33+
let jsSrc;
34+
const api = {};
35+
// Load config file.
36+
configJson = require(path.join(rootPath, configSrc));
37+
// Check if baseApiUrl is set.
38+
if (!configJson.baseApiUrl) {
39+
const dpaError = new Error('No baseApiUrl set in config file.\n\tIn ' + path.join(rootPath, configSrc));
40+
dpaError.name = DPA_CONFIG_ERROR;
41+
throw dpaError;
42+
}
43+
api.baseApiUrl = configJson.baseApiUrl;
44+
// Check if there's any source set.
45+
if (!configJson.src || configJson.src.length === 0) {
46+
const dpaError = new Error('The src parameter is\'nt properly configured.\n\tIn ' + path.join(rootPath, configSrc));
47+
dpaError.name = DPA_CONFIG_ERROR;
48+
throw dpaError;
49+
}
50+
api.src = [];
51+
for (jsSrc of configJson.src) {
52+
try {
53+
api.src.push(require(path.join(rootPath, jsSrc)));
54+
}
55+
catch (err) {
56+
const dpaError = new Error(err.name + ': ' + err.message + '\n\tIn ' + path.join(rootPath, jsSrc));
57+
dpaError.name = DPA_SRC_ERROR;
58+
throw dpaError;
59+
}
60+
}
61+
// When all configuration is ok, insert in apis array.
62+
apis.push(api);
3263
}
33-
catch (error) {
34-
docpad.log('error', 'Api - Error: ' + error.message);
64+
catch (err) {
65+
docpad.log('error', 'Api - ' + err.name + ': ' + err.message);
3566
}
3667
}
37-
docpad.log('info', 'Api - Loaded files: ' + customApis.length);
68+
docpad.log('info', 'Api - Loaded files: ' + apis.length);
3869

3970
// Default route.
40-
server.get(`${this.config.baseApiUrl}/engine/version`, (req, res) =>
71+
server.get('/engine/version', (req, res) =>
4172
res.json({
4273
name: packJson.name,
4374
dev: packJson.author,
4475
version: packJson.version
4576
})
4677
);
4778

79+
let api;
4880
// Go to custom API routes.
49-
let func;
50-
for (func of customApis) {
51-
func(opts, this.config.baseApiUrl);
81+
for (api of apis) {
82+
for (func of api.src) {
83+
func(opts, api.baseApiUrl);
84+
}
5285
}
5386
}
5487
};

src/api.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Test our plugin using DocPad's testers
2+
const path = require('path');
23
require('docpad').require('testers').test({
3-
pluginPath: `${__dirname}/..`,
4-
testerClass: 'ServerTester'
4+
pluginPath: path.join(__dirname, '..')
55
});

test/api/api-test.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

test/docpad.coffee

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ docpadConfig = {
66
# Plugins configuration
77
plugins:
88
api:
9-
baseApiUrl: '/APIURLTEST'
10-
source: [{
11-
file: 'api/api-test.js'
12-
},{
13-
file: 'api/missing.js'
14-
}]
9+
cfgSrc: [
10+
'testapi1/dpaconfig.json',
11+
'testapi2/dpaconfig.json',
12+
'testapi0/dpaconfig.json'
13+
]
1514
}
1615

1716
# Export the DocPad Configuration

0 commit comments

Comments
 (0)