Skip to content

Commit 16f4782

Browse files
committed
Separate directory and module configuration and refactor unit tests
1 parent 73aafbc commit 16f4782

16 files changed

+237
-211
lines changed

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
language: node_js
22
node_js:
3+
- "5.1"
4+
- "5.0"
5+
- "4.2"
36
- "4.1"
47
- "4.0"

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
[![Travis CI](https://travis-ci.org/dragonnodejs/dragonnodejs-async.svg?branch=master "Travis CI")]
22
(https://travis-ci.org/dragonnodejs/dragonnodejs-async)
3+
[![Dependency Status](https://david-dm.org/dragonnodejs/dragonnodejs-async.svg)](https://david-dm.org/dragonnodejs/dragonnodejs-async)
4+
[![devDependency Status](https://david-dm.org/dragonnodejs/dragonnodejs-async/dev-status.svg)](https://david-dm.org/dragonnodejs/dragonnodejs-async#info=devDependencies)
35

46
# DragonNode.js Async
57
Framework to develop modular and testable Node.js applications
@@ -17,4 +19,4 @@ Framework to develop modular and testable Node.js applications
1719
See: [dragonnodejs/app-skeleton](https://github.com/dragonnodejs/app-skeleton.git)
1820

1921
## Create new Bundle
20-
See: [dragonnodejs/app-skeleton](https://github.com/dragonnodejs/bundle-skeleton.git)
22+
See: [dragonnodejs/bundle-skeleton](https://github.com/dragonnodejs/bundle-skeleton.git)

index.js

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

lib.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'use strict';
2+
3+
let Promise = require('bluebird');
4+
5+
/**
6+
* Run the modules with the libraries and the services
7+
* @example
8+
let directory = __dirname + '/modules/';
9+
let modules = [
10+
[require('bundle'), [
11+
['module',
12+
// Configuration for the module
13+
]
14+
]],
15+
['module',
16+
// Configuration for the module
17+
]
18+
];
19+
let libraries = {
20+
library: require('library')
21+
};
22+
require('dragonnodejs')(directory, modules, libraries);
23+
*/
24+
25+
module.exports = (directory, modules, libraries, services) => {
26+
services = services || {};
27+
let fns = [];
28+
for (let module of modules) {
29+
if (!(module[0] instanceof Function)) {
30+
module[0] = require(directory + module[0]);
31+
}
32+
fns.push(() => module[0](module[1], libraries, services));
33+
}
34+
return Promise.each(fns, fn => fn());
35+
};

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
{
22
"name": "dragonnodejs-async",
33
"description": "Framework to develop modular and testable Node.js applications",
4-
"version": "5.0.1",
4+
"version": "6.0.0",
55
"homepage": "http://github.com/dragonnodejs/dragonnodejs-async",
66
"license": "MIT",
77
"readmeFilename": "README.md",
8+
"main": "lib",
89
"scripts": {
910
"test": "mocha -R spec"
1011
},
1112
"dependencies": {
12-
"bluebird": "^2.10.2"
13+
"bluebird": "^3.0.5"
1314
},
1415
"devDependencies": {
15-
"mocha": "^2.3.3"
16+
"mocha": "^2.3.4"
1617
},
1718
"repository": {
1819
"type": "git",

test/index.js

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

test/lib.js

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
'use strict';
2+
3+
let assert = require('assert');
4+
5+
describe('dragonnodejs', () => {
6+
let dragonnodejs = require('../lib');
7+
8+
it('should use a module already required', () => {
9+
let modules = [
10+
[require(__dirname + '/module')]
11+
];
12+
let services = {};
13+
dragonnodejs('', modules, {}, services).then(() => {
14+
assert(Array.isArray(services.args));
15+
assert.equal(services.args.length, 1);
16+
});
17+
});
18+
19+
it('should use an asynchronously module already required', () => {
20+
let modules = [
21+
[require(__dirname + '/module-async')]
22+
];
23+
let libraries = {
24+
Promise: require('bluebird')
25+
};
26+
let services = {};
27+
dragonnodejs('', modules, libraries, services).then(() => {
28+
assert(Array.isArray(services.args));
29+
assert.equal(services.args.length, 1);
30+
});
31+
});
32+
33+
it('should load a module with directory and relative path', () => {
34+
let directory = __dirname + '/';
35+
let modules = [
36+
['module']
37+
];
38+
let services = {};
39+
dragonnodejs(directory, modules, {}, services).then(() => {
40+
assert(Array.isArray(services.args));
41+
assert.equal(services.args.length, 1);
42+
});
43+
});
44+
45+
it('should load an asynchronously module with directory and relative path', () => {
46+
let directory = __dirname + '/';
47+
let modules = [
48+
['module-async']
49+
];
50+
let libraries = {
51+
Promise: require('bluebird')
52+
};
53+
let services = {};
54+
dragonnodejs(directory, modules, libraries, services).then(() => {
55+
assert(Array.isArray(services.args));
56+
assert.equal(services.args.length, 1);
57+
});
58+
});
59+
60+
it('should allow a module to use the config', () => {
61+
let directory = __dirname + '/';
62+
let modules = [
63+
['module', 'config']
64+
];
65+
let services = {};
66+
dragonnodejs(directory, modules, {}, services).then(() => {
67+
assert(Array.isArray(services.args));
68+
assert.equal(services.args.length, 1);
69+
assert.equal(services.args[0].config, 'config');
70+
});
71+
});
72+
73+
it('should allow a module to use the libraries', () => {
74+
let directory = __dirname + '/';
75+
let modules = [
76+
['module']
77+
];
78+
let libraries = 'libraries';
79+
let services = {};
80+
dragonnodejs(directory, modules, libraries, services).then(() => {
81+
assert(Array.isArray(services.args));
82+
assert.equal(services.args.length, 1);
83+
assert.equal(services.args[0].libraries, 'libraries');
84+
});
85+
});
86+
87+
it('should allow a module to use the services', () => {
88+
let directory = __dirname + '/';
89+
let modules = [
90+
['module']
91+
];
92+
let services = { service: 'service' };
93+
dragonnodejs(directory, modules, {}, services).then(() => {
94+
assert(Array.isArray(services.args));
95+
assert.equal(services.args.length, 1);
96+
assert.equal(services.args[0].services.service, 'service');
97+
});
98+
});
99+
100+
it('should use several modules independently', () => {
101+
let directory = __dirname + '/';
102+
let modules = [
103+
['module', 'A'],
104+
['module', 'B']
105+
];
106+
let services = {};
107+
dragonnodejs(directory, modules, {}, services).then(() => {
108+
assert(Array.isArray(services.args));
109+
assert.equal(services.args.length, 2);
110+
assert.equal(services.args[0].config, 'A');
111+
assert.equal(services.args[1].config, 'B');
112+
});
113+
});
114+
115+
it('should not break if use all features together', () => {
116+
let directory = __dirname + '/';
117+
let modules = [
118+
[require(__dirname + '/module'), 'A'],
119+
[require(__dirname + '/module-async'), 'B'],
120+
['module', 'C'],
121+
['module-async', 'D'],
122+
[require(__dirname + '/module'), 'E'],
123+
[require(__dirname + '/module-async'), 'F'],
124+
['module', 'G'],
125+
['module-async', 'H']
126+
];
127+
let libraries = {
128+
libraries: 'libraries',
129+
Promise: require('bluebird')
130+
};
131+
let services = { service: 'service' };
132+
dragonnodejs(directory, modules, libraries, services).then(() => {
133+
assert(Array.isArray(services.args));
134+
assert.equal(services.args.length, 8);
135+
assert.equal(services.args[0].config, 'A');
136+
assert.equal(services.args[0].libraries.libraries, 'libraries');
137+
assert.equal(services.args[0].services.service, 'service');
138+
assert.equal(services.args[1].config, 'B');
139+
assert.equal(services.args[1].libraries.libraries, 'libraries');
140+
assert.equal(services.args[1].services.service, 'service');
141+
assert.equal(services.args[2].config, 'C');
142+
assert.equal(services.args[2].libraries.libraries, 'libraries');
143+
assert.equal(services.args[2].services.service, 'service');
144+
assert.equal(services.args[3].config, 'D');
145+
assert.equal(services.args[3].libraries.libraries, 'libraries');
146+
assert.equal(services.args[3].services.service, 'service');
147+
assert.equal(services.args[4].config, 'E');
148+
assert.equal(services.args[4].libraries.libraries, 'libraries');
149+
assert.equal(services.args[4].services.service, 'service');
150+
assert.equal(services.args[5].config, 'F');
151+
assert.equal(services.args[5].libraries.libraries, 'libraries');
152+
assert.equal(services.args[5].services.service, 'service');
153+
assert.equal(services.args[6].config, 'G');
154+
assert.equal(services.args[6].libraries.libraries, 'libraries');
155+
assert.equal(services.args[6].services.service, 'service');
156+
assert.equal(services.args[7].config, 'H');
157+
assert.equal(services.args[7].libraries.libraries, 'libraries');
158+
assert.equal(services.args[7].services.service, 'service');
159+
});
160+
});
161+
});

0 commit comments

Comments
 (0)