Skip to content

Commit 95ce974

Browse files
committed
Improve error gestion and add support for promise for loading plugins
1 parent 2c39fe3 commit 95ce974

3 files changed

Lines changed: 22 additions & 8 deletions

File tree

lib/application.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ var Application = function(config, basePlugins) {
5050
// Emit event
5151
that.emit("plugin", plugin);
5252
});
53-
}, Q({}));
53+
}, Q({})).fail(function(err) {
54+
// Emit error
55+
that.emit("error", err);
56+
return Q.reject(err);
57+
});
5458
};
5559

5660
// Check dependencies

lib/plugin.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,38 @@ var Plugin = function(config, app) {
2121
}
2222

2323
var register = function(err, services) {
24-
if (err) return that.emit("error", err);
24+
if (err) {
25+
deferred.reject(err);
26+
return;
27+
}
2528

2629
// check services provided
30+
var failed = false;
2731
_.each(that.provides, function(toProvide) {
2832
if (!services[toProvide]) {
2933
var err = new Error("Plugin failed to provide " + toProvide + " service.");
30-
that.emit("error", err);
34+
failed = true;
3135
deferred.reject(err);
3236
return;
3337
}
3438
that.app.services[toProvide] = services[toProvide];
3539

3640
that.app.emit("service", toProvide, services[toProvide]);
3741
});
38-
deferred.resolve(that);
39-
}
42+
if (!failed) deferred.resolve(that);
43+
};
4044

4145
var setup = require(that.packagePath);
4246
try {
43-
setup(that, imports, register, that.app);
47+
var r = setup(that, imports, register, that.app);
48+
if (Q.isPromise(r)) {
49+
r.then(function(provides) {
50+
register(null, provides);
51+
}, function(err) {
52+
register(err);
53+
});
54+
}
4455
} catch(e) {
45-
app.emit("error", e);
4656
deferred.reject(e);
4757
}
4858

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "engineer",
33
"description": "Powerful plugin system for writing large and extensible NodeJS applications",
4-
"version": "0.0.8",
4+
"version": "0.0.9",
55
"author": "FriendCode <contact@friendco.de>",
66
"contributors": [
77
{

0 commit comments

Comments
 (0)