@@ -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