Skip to content

Commit

Permalink
Merge f12df43 into 89b98ef
Browse files Browse the repository at this point in the history
  • Loading branch information
josephmancuso committed Jan 29, 2019
2 parents 89b98ef + f12df43 commit 7bcccc7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
7 changes: 6 additions & 1 deletion masonite/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,15 +301,20 @@ def run_middleware(self, type_of_middleware):
"""
# Get the list of middleware to run for a route.
for arg in self.list_middleware:
arguments = []
middleware_to_run = self.request.app().make('RouteMiddleware')[arg]
if not isinstance(middleware_to_run, list):
middleware_to_run = [middleware_to_run]

if ':' in arg:
# Splits "name:value1,value2" into ['value1', 'value2']
arguments = arg.split(':')[1].split(',')

try:
for middleware in middleware_to_run:
located_middleware = self.request.app().resolve(middleware)
if hasattr(located_middleware, type_of_middleware):
getattr(located_middleware, type_of_middleware)()
getattr(located_middleware, type_of_middleware)(*arguments)
except KeyError:
raise RouteMiddlewareNotFound(
"Could not find the '{0}' route middleware".format(arg))
Expand Down
22 changes: 21 additions & 1 deletion tests/test_middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@
from config import application


class MiddlewareValueTest:

def __init__(self, request: Request):
self.request = request

def before(self, value1, value2):
self.request.value1 = value1
self.request.value2 = value2


class TestMiddleware:

def setup_method(self):
Expand All @@ -33,8 +43,10 @@ def setup_method(self):
self.app.bind('HttpMiddleware', [
MiddlewareHttpTest
])

self.app.bind('RouteMiddleware', {
'test': MiddlewareTest
'test': MiddlewareTest,
'throttle:1,2': MiddlewareValueTest
})

self.provider = RouteProvider()
Expand All @@ -48,3 +60,11 @@ def test_http_middleware_runs(self):
self.app.resolve(self.provider.boot)
assert self.app.make('Request').path == '/test/middleware'
assert self.app.make('Request').environ['HTTP_TEST'] == 'test'

def test_route_middleware_can_pass_values(self):
route = self.app.make('WebRoutes')[0]
route.request = self.app.make('Request')
route.list_middleware = ['throttle:1,2']
route.run_middleware('before')
assert route.request.value1 == '1'
assert route.request.value2 == '2'

0 comments on commit 7bcccc7

Please sign in to comment.