Made dependencies to be registered before composition stage

This commit is contained in:
Borys Levytskyi
2015-04-11 18:29:06 +03:00
parent 400f742fef
commit 7016b8a04b
3 changed files with 86 additions and 88 deletions

View File

@@ -1,9 +1,8 @@
app.compose(function() {
app.set('calc', function() {
"use strict";
var should = app.get('should')
app.set('calc', {
var should = app.get('should');
return {
numberOfBits: function (num) {
should.bePositiveInteger(num);
@@ -24,5 +23,5 @@ app.compose(function() {
calcExpression: function (expr) {
return eval(expr.string);
}
});
});
}
});

View File

@@ -1,8 +1,9 @@
app.compose(function() {
app.set("formatter", function() {
"use strict";
var should = app.get('should');
app.set("formatter", {
return {
toBinaryString: function(num, totalLength) {
var binaryStr = num.toString(2),
@@ -23,5 +24,5 @@ app.compose(function() {
return formatted.join('');
}
});
})
}
});

View File

@@ -1,94 +1,92 @@
app.compose(function() {
app.set('cmd', function() {
"use strict";
app.set('cmd', function() {
var handlers = [];
var is = app.get('is');
var cmdController = app.controller('cmdController');
var handlers = [];
var is = app.get('is');
var cmdController = app.controller('cmdController');
return {
execute: function(rawInput) {
var input = rawInput.trim().toLowerCase();
var handler = findHandler(input);
return {
execute: function(rawInput) {
var input = rawInput.trim().toLowerCase();
var handler = findHandler(input);
if(handler != null) {
if(app.debugMode) {
if(handler != null) {
if(app.debugMode) {
invokeHandler(input, handler);
} else {
try {
invokeHandler(input, handler);
} else {
try {
invokeHandler(input, handler);
} catch (e) {
displayCommandError(input, "Error: " + e);
}
} catch (e) {
displayCommandError(input, "Error: " + e);
}
}
else {
displayCommandError(input, "Unsupported expression: " + input.trim());
}
},
commands: function(catalog) {
for(var key in catalog) {
if(catalog.hasOwnProperty(key)) {
this.command(key, catalog[key]);
}
}
},
command: function(cmd, handler) {
var h = createHandler(cmd, handler);
if(h == null){
console.warn('unexpected set of arguments: ', Array.prototype.splice.call(arguments));
return;
}
if(!is.aFunction(h.canHandle)) {
console.warn('handler is missing "canHandle" function. registration denied.');
return;
}
if(!is.aFunction(h.handle)) {
console.warn('handler is missing "handle" function. registration denied.');
return;
}
handlers.push(h);
},
clear: function() {
cmdController.clear();
}
};
else {
displayCommandError(input, "Unsupported expression: " + input.trim());
}
},
commands: function(catalog) {
for(var key in catalog) {
if(catalog.hasOwnProperty(key)) {
this.command(key, catalog[key]);
}
}
},
command: function(cmd, handler) {
var h = createHandler(cmd, handler);
if(h == null){
console.warn('unexpected set of arguments: ', Array.prototype.splice.call(arguments));
return;
}
function displayCommandError(input, message) {
var error = new app.models.ErrorResult(message);
cmdController.display(new app.models.DisplayResult(input, error));
if(!is.aFunction(h.canHandle)) {
console.warn('handler is missing "canHandle" function. registration denied.');
return;
}
if(!is.aFunction(h.handle)) {
console.warn('handler is missing "handle" function. registration denied.');
return;
}
handlers.push(h);
},
clear: function() {
cmdController.clear();
}
};
function displayCommandError(input, message) {
var error = new app.models.ErrorResult(message);
cmdController.display(new app.models.DisplayResult(input, error));
}
function invokeHandler (input, handler) {
var cmdResult = handler.handle(input);
if(cmdResult != null) {
var r = new app.models.DisplayResult(input, cmdResult);
cmdController.display(r);
}
}
function createHandler (cmd, handler) {
if(is.plainObject(cmd)) {
return cmd;
}
function invokeHandler (input, handler) {
var cmdResult = handler.handle(input);
if(cmdResult != null) {
var r = new app.models.DisplayResult(input, cmdResult);
cmdController.display(r);
}
if(is.string(cmd)) {
return { canHandle: function (input) { return input === cmd; }, handle: handler };
}
function createHandler (cmd, handler) {
if(is.plainObject(cmd)) {
return cmd;
}
return null;
}
if(is.string(cmd)) {
return { canHandle: function (input) { return input === cmd; }, handle: handler };
}
return null;
}
function findHandler (input) {
var i= 0;
for(i;i<handlers.length; i++) {
if(handlers[i].canHandle(input)) {
return handlers[i];
}
function findHandler (input) {
var i= 0;
for(i;i<handlers.length; i++) {
if(handlers[i].canHandle(input)) {
return handlers[i];
}
}
});
});
}
});