@@ -36,13 +36,13 @@ function middlewareFactory($injector, $q) {
3636 /**
3737 * Initialize $middleware
3838 *
39- * @param {object } toRoute
40- * @param {mixed } toParams
39+ * @param {object } toRoute
40+ * @param {mixed } toParams
4141 * @returns {promise }
4242 */
4343 return function initialize ( toRoute , toParams ) {
44- // Return early if the toRoute doesn't have middleware
45- if ( _bypassAll || ! hasMiddleware ( _globalMiddleware ) && ! hasMiddleware ( toRoute ) ) {
44+ // Return if we should bypass
45+ if ( shouldBypass ( toRoute ) ) {
4646 return $q . resolve ( ) ;
4747 }
4848
@@ -54,9 +54,7 @@ function middlewareFactory($injector, $q) {
5454
5555 // Set the middleware names.
5656 // Make sure the globals are first, then concat toRoute
57- middleware . names =
58- getMiddlewareNames ( _globalMiddleware )
59- . concat ( getMiddlewareNames ( toRoute ) ) ;
57+ middleware . names = concatMiddlwareNames ( [ _globalMiddleware , toRoute ] ) ;
6058
6159 // Create a deferred promise
6260 middleware . resolution = $q . defer ( ) ;
@@ -68,30 +66,98 @@ function middlewareFactory($injector, $q) {
6866 return middleware . resolution . promise ;
6967 } ;
7068
69+ /**
70+ * Determine if we should bypass the middleware
71+ *
72+ * @param {object } route
73+ * @returns {boolean }
74+ */
75+ function shouldBypass ( route ) {
76+ // If the bypassAll flag is set,
77+ // then we should bypass all - duh
78+ if ( _bypassAll ) {
79+ return true ;
80+ }
81+
82+ // We can only bypass at this point
83+ // if there is no middleware to process
84+ return ! middlewareExists ( route ) ;
85+ }
86+
87+ /**
88+ * Determine if any middleware exists
89+ *
90+ * @param {object } route
91+ * @returns {boolean }
92+ */
93+ function middlewareExists ( route ) {
94+ return hasMiddleware ( _globalMiddleware )
95+ || hasMiddleware ( route ) ;
96+ }
97+
7198 /**
7299 * Determine if the given route has middleware
73100 *
74- * @param {object } toRoute
101+ * @param {object } route
75102 * @returns {boolean }
76103 */
77104 function hasMiddleware ( route ) {
78- return ! ! route . middleware && ! ! route . middleware . length ;
105+ var middleware = getRouteMiddleware ( route ) ;
106+ return ! ! middleware && ! ! middleware . length ;
107+ }
108+
109+ /**
110+ * Gets the route middleware property
111+ *
112+ * @param {object } route
113+ * @returns {array|string }
114+ */
115+ function getRouteMiddleware ( route ) {
116+ return route . middleware
117+ || ( ( route . data || { } ) . vars || { } ) . middleware ;
118+ }
119+
120+ /**
121+ * Concat the middleware names of the given routes
122+ *
123+ * @param {array } routes
124+ * @return {array }
125+ */
126+ function concatMiddlewareNames ( routes ) {
127+ var output = [ ] ;
128+
129+ // Concat each route's middleware names
130+ for ( var i = 0 ; i < routes . length ; i ++ ) {
131+ output . concat (
132+ getMiddlewareNames ( routes [ i ] )
133+ ) ;
134+ }
135+
136+ return output ;
79137 }
80138
81139 /**
82140 * Get the middleware names
83141 * from an array or a piped string
84142 *
85- * @param {object } route
143+ * @param {object } route
86144 * @returns {array }
87145 */
88146 function getMiddlewareNames ( route ) {
89- // Return the middleware names as an array
90- return route . middleware instanceof Array
91- ? route . middleware
92- : typeof route . middleware === 'undefined'
93- ? [ ]
94- : route . middleware . split ( '|' ) ;
147+ var middleware = getRouteMiddleware ( route ) ;
148+
149+ // If the middleware is an array, just return it
150+ if ( middleware instanceof Array ) {
151+ return middleware ;
152+ }
153+
154+ // If there is no middleware, then return an empty array
155+ if ( typeof middleware === 'undefined' ) {
156+ return [ ] ;
157+ }
158+
159+ // Otherwise, split the pipes & return an array
160+ return middleware . split ( '|' ) ;
95161 }
96162
97163 /**
0 commit comments