Skip to content

Commit a896192

Browse files
author
Karl Hepler
committed
A fair amount of refactoring
1 parent 94adaa0 commit a896192

File tree

2 files changed

+77
-22
lines changed

2 files changed

+77
-22
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular-middleware",
3-
"version": "2.1.4",
3+
"version": "2.1.5",
44
"description": "Laravel-like middleware for angular uiRouter",
55
"main": "dist/angular-middleware.js",
66
"scripts": {

src/middleware.factory.js

Lines changed: 76 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ function middlewareFactory($injector, $q) {
3333
/**
3434
* Initialize $middleware
3535
*
36-
* @param {object} toRoute
37-
* @param {mixed} toParams
36+
* @param {object} toRoute
37+
* @param {mixed} toParams
3838
* @returns {promise}
3939
*/
4040
return function initialize(toRoute, toParams) {
41-
// Return early if the toRoute doesn't have middleware
42-
if ( _bypassAll || !hasMiddleware(_globalMiddleware) && !hasMiddleware(toRoute) ) {
41+
// Return if we should bypass
42+
if ( shouldBypass(toRoute) ) {
4343
return $q.resolve();
4444
}
4545

@@ -51,9 +51,7 @@ function middlewareFactory($injector, $q) {
5151

5252
// Set the middleware names.
5353
// Make sure the globals are first, then concat toRoute
54-
middleware.names =
55-
getMiddlewareNames(_globalMiddleware)
56-
.concat(getMiddlewareNames(toRoute));
54+
middleware.names = concatMiddlwareNames([_globalMiddleware, toRoute]);
5755

5856
// Create a deferred promise
5957
middleware.resolution = $q.defer();
@@ -66,40 +64,97 @@ function middlewareFactory($injector, $q) {
6664
};
6765

6866
/**
69-
* Gets the route middleware property
70-
* @param {object} toRoute
71-
* @returns {array|string}
72-
*/
73-
function getRouteMiddleware(route) {
74-
return route.middleware || ((route.data || {}).vars || {}).middleware;
67+
* Determine if we should bypass the middleware
68+
*
69+
* @param {object} route
70+
* @returns {boolean}
71+
*/
72+
function shouldBypass(route) {
73+
// If the bypassAll flag is set,
74+
// then we should bypass all - duh
75+
if ( _bypassAll ) {
76+
return true;
77+
}
78+
79+
// We can only bypass at this point
80+
// if there is no middleware to process
81+
return !middlewareExists(route);
82+
}
83+
84+
/**
85+
* Determine if any middleware exists
86+
*
87+
* @param {object} route
88+
* @returns {boolean}
89+
*/
90+
function middlewareExists(route) {
91+
return hasMiddleware(_globalMiddleware)
92+
|| hasMiddleware(route);
7593
}
7694

7795
/**
7896
* Determine if the given route has middleware
7997
*
80-
* @param {object} toRoute
98+
* @param {object} route
8199
* @returns {boolean}
82100
*/
83101
function hasMiddleware(route) {
84102
var middleware = getRouteMiddleware(route);
85103
return !!middleware && !!middleware.length;
86104
}
87105

106+
/**
107+
* Gets the route middleware property
108+
*
109+
* @param {object} route
110+
* @returns {array|string}
111+
*/
112+
function getRouteMiddleware(route) {
113+
return route.middleware
114+
|| ((route.data || {}).vars || {}).middleware;
115+
}
116+
117+
/**
118+
* Concat the middleware names of the given routes
119+
*
120+
* @param {array} routes
121+
* @return {array}
122+
*/
123+
function concatMiddlewareNames(routes) {
124+
var output = [];
125+
126+
// Concat each route's middleware names
127+
for (var i = 0; i < routes.length; i++) {
128+
output.concat(
129+
getMiddlewareNames(routes[i])
130+
);
131+
}
132+
133+
return output;
134+
}
135+
88136
/**
89137
* Get the middleware names
90138
* from an array or a piped string
91139
*
92-
* @param {object} route
140+
* @param {object} route
93141
* @returns {array}
94142
*/
95143
function getMiddlewareNames(route) {
96144
var middleware = getRouteMiddleware(route);
97-
// Return the middleware names as an array
98-
return middleware instanceof Array
99-
? middleware
100-
: typeof middleware === 'undefined'
101-
? []
102-
: middleware.split('|');
145+
146+
// If the middleware is an array, just return it
147+
if ( middleware instanceof Array ) {
148+
return middleware;
149+
}
150+
151+
// If there is no middleware, then return an empty array
152+
if ( typeof middleware === 'undefined' ) {
153+
return [];
154+
}
155+
156+
// Otherwise, split the pipes & return an array
157+
return middleware.split('|');
103158
}
104159

105160
/**

0 commit comments

Comments
 (0)