1
0
Fork 0
mirror of https://github.com/kbparagua/paloma synced 2023-03-27 23:21:17 -04:00

Paloma.Agent

This commit is contained in:
kbparagua 2016-03-13 22:35:02 +08:00
parent 1c5f0c0483
commit a3a2d6bc9e
4 changed files with 55 additions and 50 deletions

View file

@ -0,0 +1,45 @@
Paloma.Agent = function(controller){
this.controller = controller;
};
Paloma.Agent.prototype = {
perform: function(action){
var callbacks = this._getCallbacksFor(action);
this._executeCallbacks.call(callbacks);
},
_getCallbacksFor: function(action){
var callbacks = [];
for (var i = 0, n = this.controller.before.length; i < n; i++){
var entry = parseEntry( this.before[i] );
if ( entry.methods.indexOf(methodName) != -1 )
callbacks = callbacks.concat(entry.callbacks);
}
return callbacks;
},
_parseEntry: function(beforeEntry){
var parts = beforeEntry.split('->'),
data = {methods: [], callbacks: []};
if (parts[0]) data.methods = parts[0].trim().split(' ');
if (parts[1]) data.callbacks = parts[1].trim().split(' ');
return data;
},
_executeCallbacks: function(callbacks){
for (var i = 0, n = callbacks.length; i < n; i++){
var name = callbacks[i],
callback = this.controller[name];
callback.call(this.controller);
}
};
};

View file

@ -1,51 +1,8 @@
(function(){
Paloma.BaseController = function(params){
this.params = params;
};
Paloma.BaseController = function(params){
this.params = params;
};
Paloma.BaseController.prototype = {
before: [],
execute: function(methodName){
var callbacks = getCallbacksFor.call(this, methodName);
executeCallbacks.call(this, callbacks);
}
};
function getCallbacksFor(methodName){
var callbacks = [];
for (var i = 0, n = this.before.length; i < n; i++){
var entry = parseEntry( this.before[i] );
if ( entry.methods.indexOf(methodName) != -1 )
callbacks = callbacks.concat(entry.callbacks);
}
return callbacks;
}
function parseEntry(beforeEntry){
var parts = beforeEntry.split('->'),
data = {methods: [], callbacks: []};
if (parts[0]) data.methods = parts[0].trim().split(' ');
if (parts[1]) data.callbacks = parts[1].trim().split(' ');
return data;
}
function executeCallbacks(callbacks){
for (var i = 0, n = callbacks.length; i < n; i++){
var name = callbacks[i],
callback = this[name];
callback.call(this);
}
};
})();
Paloma.BaseController.prototype = {
before: []
};

View file

@ -43,7 +43,9 @@ Paloma.Engine.prototype = {
var action = controller[ this._request.action ];
if (action){
controller.execute( this._request.action );
var agent = Paloma.Agent(controller);
agent.perform( this._request.action );
this._lastRequest.executed = true;
}
},

View file

@ -1,5 +1,6 @@
//= require ./init.js
//= require ./base_controller.js
//= require ./controller_builder.js
//= require ./agent.js
//= require ./engine.js
//= require ./paloma.js