-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.js
75 lines (62 loc) · 1.66 KB
/
controller.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*!
* WHISKY
* Copyright(c) 2012 Ben Lin <ben@dreamerslab.com>
* MIT Licensed
*
* @fileOverview
* Controller class adaptor.
*/
$$( function ( require, exports ){
/**
* Module dependencies.
* @private
*/
var Trunk = require( 'Trunk' );
var Class = require( 'Class' );
var Response = require( 'Response' );
var log = require( 'logger' );
/**
* Store session data in a private object in the closure.
* Session can be used accross controllers and actions.
* @private
*/
var session = {};
/**
* Controller class adaptor.
* @public
*/
var Controller = Trunk.extend({
action : function ( action_name, params, query ){
var controller = this.controller;
var req = {
params : params,
query : query,
session : session
};
if( controller[ action_name ] === undefined ){
return log(
'WHISKY::Controller.action( action_name, params, query ) `action_name` not defined', {
action_name : action_name,
params : params,
query : query
});
}
controller[ action ]( req, this.res );
},
get : function ( name , options ){
var self = this;
var actions = this._super( name );
var Controller = Class.extend( actions );
this.controller = new Controller( options );
this.res = new Response( name );
// it's better to give it a wrapper to prevent `this` scope conflict
return function ( action_name, params, query ){
self.action( action_name, params, query );
};
}
});
/**
* Exports module.
*/
exports( 'controller', new Controller( 'WHISKY::controller' ));
});