Skip to content

Commit

Permalink
Merge pull request #499 from MasoniteFramework/add-redirect-name
Browse files Browse the repository at this point in the history
Adds several new options to the redirect method
  • Loading branch information
josephmancuso committed Dec 11, 2018
2 parents fc0e30b + 76e3e61 commit c91a885
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 6 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ Contributing to Masonite is simple:
* Hop on [Slack Channel](http://slack.masoniteproject.com/)! to ask any questions you need.
* Read the [How To Contribute](https://masoniteframework.gitbook.io/docs/prologue/how-to-contribute) documentation to see ways to contribute to the project.
* Read the [Contributing Guide](https://masoniteframework.gitbook.io/docs/prologue/contributing-guide) to learn how to contribute to the core source code development of the project.
* Read the [Installation](https://masoniteframework.gitbook.io/docs/prologue/introduction-and-installaton) documentation on how to get started creating a Masonite project.
* Read the [Installation](https://docs.masoniteproject.com/#installation) documentation on how to get started creating a Masonite project.
* Check the open issues and milestones.
* If you have any questions just open up an issue to discuss with the core maintainers.
16 changes: 11 additions & 5 deletions masonite/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ def user(self):
"""
return self.user_model

def redirect(self, route, params={}):
def redirect(self, route=None, params={}, name=None, controller=None, status=302):
"""Redirect the user based on the route specified.
Arguments:
Expand All @@ -597,11 +597,17 @@ def redirect(self, route, params={}):
Returns:
self
"""
self.redirect_url = self.compile_route_to_url(route, params)
self.status(302)
if name:
return self.redirect_to(name, params, status=status)
elif route:
self.redirect_url = self.compile_route_to_url(route, params)
elif controller:
self.redirect_url = self.url_from_controller(controller, params)

self.status(status)
return self

def redirect_to(self, route_name, params={}):
def redirect_to(self, route_name, params={}, status=302):
"""Redirect to a named route.
Arguments:
Expand All @@ -616,7 +622,7 @@ def redirect_to(self, route_name, params={}):
self
"""
self.redirect_url = self._get_named_route(route_name, params)
self.status(302)
self.status(status)

return self

Expand Down
1 change: 1 addition & 0 deletions masonite/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ def redirect(self, location=None, status=302):
if not location:
location = self.request.redirect_url

self.request.reset_headers()
self.request.header('Location', location)
self.app.bind('Response', 'redirecting ...')

Expand Down
22 changes: 22 additions & 0 deletions tests/test_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,28 @@ def test_request_route_returns_url(self):
assert request.route('test.url') == '/test/url'
assert request.route('test.id', {'id': 1}) == '/test/url/1'

def test_request_redirection(self):
app = App()
app.bind('Request', self.request)
app.bind('WebRoutes', [
get('/test/url', 'TestController@show').name('test.url'),
get('/test/url/@id', 'TestController@testing').name('test.id'),
get('/test/url/object', TestController.show).name('test.object')
])
request = app.make('Request').load_app(app)

assert request.redirect('/test/url/@id', {'id': 1}).redirect_url == '/test/url/1'
request.redirect_url = None
assert request.redirect(name='test.url').redirect_url == '/test/url'
request.redirect_url = None
assert request.redirect(name='test.id', params={'id': 1}).redirect_url == '/test/url/1'
request.redirect_url = None
assert request.redirect(controller='TestController@show').redirect_url == '/test/url'
request.redirect_url = None
assert request.redirect(controller=TestController.show).redirect_url == '/test/url/object'
request.redirect_url = None
assert request.redirect('some/url').redirect_url == '/some/url'

def test_request_route_returns_full_url(self):
app = App()
app.bind('Request', self.request)
Expand Down

0 comments on commit c91a885

Please sign in to comment.