Skip to content

Commit

Permalink
Merge branch 'release/4.0.9'
Browse files Browse the repository at this point in the history
  • Loading branch information
thetutlage committed Aug 11, 2017
2 parents 9886281 + 3cc62d7 commit c0838ff
Show file tree
Hide file tree
Showing 15 changed files with 347 additions and 14 deletions.
18 changes: 18 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,21 @@
<a name="4.0.9"></a>
## [4.0.9](https://github.com/adonisjs/adonis-framework/compare/v4.0.8...v4.0.9) (2017-08-11)


### Bug Fixes

* **env:** load .env file on providers boot ([9282a83](https://github.com/adonisjs/adonis-framework/commit/9282a83))


### Features

* **response:** enhance redirect method & add route redirects ([e7bf506](https://github.com/adonisjs/adonis-framework/commit/e7bf506))
* **route:** route.render accepts data with view now ([b9812b9](https://github.com/adonisjs/adonis-framework/commit/b9812b9))
* **Route:** add brisk route for quick routes ([dbc1618](https://github.com/adonisjs/adonis-framework/commit/dbc1618))
* **Route:** make routes macroable ([16e35bb](https://github.com/adonisjs/adonis-framework/commit/16e35bb))



<a name="4.0.8"></a>
## [4.0.8](https://github.com/adonisjs/adonis-framework/compare/v4.0.7...v4.0.8) (2017-08-08)

Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "@adonisjs/framework",
"version": "4.0.8",
"version": "4.0.9",
"description": "Adonis framework makes it easy for you to write webapps with less code",
"main": "index.js",
"scripts": {
Expand Down Expand Up @@ -55,6 +55,7 @@
"node-exceptions": "^2.0.2",
"node-req": "^2.0.1",
"node-res": "^4.0.0",
"parseurl": "^1.3.1",
"path-to-regexp": "^1.7.0",
"require-all": "^2.2.0",
"resetable": "^1.0.2",
Expand Down
5 changes: 5 additions & 0 deletions providers/AppProvider.js
Expand Up @@ -282,6 +282,11 @@ class AppProvider extends ServiceProvider {
const Request = this.app.use('Adonis/Src/Request')
const Response = this.app.use('Adonis/Src/Response')

/**
* Gets the provider load the env file.
*/
this.app.use('Adonis/Src/Env')

Context.getter('request', function () {
return new Request(this.req, this.res, use('Adonis/Src/Config'))
}, true)
Expand Down
33 changes: 32 additions & 1 deletion src/Response/index.js
Expand Up @@ -13,6 +13,9 @@ const nodeRes = require('node-res')
const nodeReq = require('node-req')
const nodeCookie = require('node-cookie')
const Macroable = require('macroable')
const parseurl = require('parseurl')

const RouteManager = require('../Route/Manager')

const SECRET = 'app.secret'

Expand Down Expand Up @@ -253,15 +256,25 @@ class Response extends Macroable {
* @method redirect
*
* @param {String} url
* @param {Boolean} [sendParams = false]
* @param {Number} [status = 302]
*
* @return {void}
*/
redirect (url, status) {
redirect (url, sendParams = false, status = 302) {
if (url === 'back') {
url = nodeReq.header(this.request, 'referrer') || '/'
}

/**
* Send query params of the current URL back when
* redirect to a new url
*/
if (sendParams) {
const { query } = parseurl(this.request)
url = `${url}?${query}`
}

if (!this.implicitEnd) {
nodeRes.redirect(this.request, this.response, url, status)
return
Expand All @@ -274,6 +287,24 @@ class Response extends Macroable {
}
}

/**
* Redirect to a specific route
*
* @method route
*
* @param {String} routeNameOrHandler
* @param {Object} [data = {}]
* @param {String} [domain]
* @param {Boolean} [sendParams = false]
* @param {Number} [status = 302]
*
* @return {void}
*/
route (routeNameOrHandler, data, domain, sendParams = false, status = 302) {
const url = RouteManager.url(routeNameOrHandler, data, domain) || routeNameOrHandler
return this.redirect(url, sendParams, status)
}

/**
* Add the HTTP `Vary` header
*
Expand Down
73 changes: 73 additions & 0 deletions src/Route/Brisk.js
@@ -0,0 +1,73 @@
'use strict'

/*
* adonis-framework
*
* (c) Harminder Virk <virk@adonisjs.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

const GE = require('@adonisjs/generic-exceptions')
const Macroable = require('macroable')
const RouteStore = require('./Store')
const Route = require('./index')

class BriskRoute extends Macroable {
constructor (routePath) {
super()
this.routePath = routePath
this._handlerDefined = false
}

/**
* Sets the handler for brisk route.
*
* @method setHandler
*
* @param {Function|String} handler
* @param {Array} verbs
*
* @return {Route}
*
* @throws {RuntimeException} If trying to re-define handler for the route
*/
setHandler (handler, verbs) {
if (this._handlerDefined) {
throw GE.RuntimeException.invoke('Cannot re-define handler for brisk route')
}

const routeInstance = new Route(this.routePath, handler, verbs)
RouteStore.add(routeInstance)
this._handlerDefined = true
return routeInstance
}

/**
* Render a view from the route
*
* @method render
*
* @param {String} template
* @param {Object} data
*
* @return {Route}
*/
render (template, data = {}) {
return this.setHandler(({ view }) => {
return view.render(template, data)
}, ['GET', 'HEAD'])
}
}

/**
* Defining _macros and _getters property
* for Macroable class
*
* @type {Object}
*/
BriskRoute._macros = {}
BriskRoute._getters = {}

module.exports = BriskRoute
14 changes: 13 additions & 1 deletion src/Route/Group.js
Expand Up @@ -9,6 +9,8 @@
* file that was distributed with this source code.
*/

const Macroable = require('macroable')

/**
* Route Group class is used to group routes with
* common behavior. For example prefixing a bunch
Expand All @@ -28,8 +30,9 @@
* const group = new RouteGroup([arrayOfRoutes], optionalName)
* ```
*/
class RouteGroup {
class RouteGroup extends Macroable {
constructor (routes, name = null) {
super()
this._routes = routes
this._name = name
}
Expand Down Expand Up @@ -123,4 +126,13 @@ class RouteGroup {
}
}

/**
* Defining _macros and _getters property
* for Macroable class
*
* @type {Object}
*/
RouteGroup._macros = {}
RouteGroup._getters = {}

module.exports = RouteGroup
45 changes: 38 additions & 7 deletions src/Route/Manager.js
Expand Up @@ -15,6 +15,7 @@ const Route = require('./index')
const RouteGroup = require('./Group')
const RouteStore = require('./Store')
const RouteResource = require('./Resource')
const BriskRoute = require('./Brisk')
const GE = require('@adonisjs/generic-exceptions')

/**
Expand Down Expand Up @@ -63,6 +64,42 @@ class RouteManager {
}
}

/**
* Reference to @ref('Route') class
*
* @attribute Route
*/
get Route () {
return Route
}

/**
* Reference to @ref('RouteGroup') class
*
* @attribute RouteGroup
*/
get RouteGroup () {
return RouteGroup
}

/**
* Reference to @ref('RouteResource') class
*
* @attribute RouteResource
*/
get RouteResource () {
return RouteResource
}

/**
* Reference to @ref('BriskRoute') class
*
* @attribute BriskRoute
*/
get BriskRoute () {
return BriskRoute
}

/**
* Create a new route and push it to the
* routes store.
Expand Down Expand Up @@ -220,13 +257,7 @@ class RouteManager {
* ```
*/
on (route) {
return {
render: (template) => {
return this.route(route, ({ view }) => {
return view.render(template)
}, ['HEAD', 'GET'])
}
}
return new BriskRoute(route)
}

/**
Expand Down
13 changes: 12 additions & 1 deletion src/Route/Resource.js
Expand Up @@ -10,6 +10,7 @@
*/

const _ = require('lodash')
const Macroable = require('macroable')
const GE = require('@adonisjs/generic-exceptions')
const Route = require('./index')
const RouteStore = require('./Store')
Expand All @@ -23,8 +24,9 @@ const RouteStore = require('./Store')
* @group Http
* @constructor
*/
class RouteResource {
class RouteResource extends Macroable {
constructor (resource, controller, namePrefix = null) {
super()
this._validateResourceName(resource)
this._validateController(controller)
this._resourceUrl = this._makeResourceUrl(resource)
Expand Down Expand Up @@ -311,4 +313,13 @@ class RouteResource {
}
}

/**
* Defining _macros and _getters property
* for Macroable class
*
* @type {Object}
*/
RouteResource._macros = {}
RouteResource._getters = {}

module.exports = RouteResource
13 changes: 12 additions & 1 deletion src/Route/index.js
Expand Up @@ -12,6 +12,7 @@
const _ = require('lodash')
const pathToRegexp = require('path-to-regexp')
const GE = require('@adonisjs/generic-exceptions')
const Macroable = require('macroable')

/**
* This class defines a single route. It supports dynamic
Expand All @@ -33,8 +34,9 @@ const GE = require('@adonisjs/generic-exceptions')
* const route = new Route('users', 'HomeController.index', ['GET'])
* ```
*/
class Route {
class Route extends Macroable {
constructor (route, handler, verbs = ['HEAD', 'GET']) {
super()
this._instantiate(route, verbs, handler)
this._makeRoutePattern()
}
Expand Down Expand Up @@ -402,4 +404,13 @@ class Route {
}
}

/**
* Defining _macros and _getters property
* for Macroable class
*
* @type {Object}
*/
Route._macros = {}
Route._getters = {}

module.exports = Route
1 change: 1 addition & 0 deletions test/integration/resources/views/user.edge
@@ -0,0 +1 @@
Hello {{ name }}
1 change: 1 addition & 0 deletions test/integration/setup.js
Expand Up @@ -10,6 +10,7 @@ const providers = [
]

module.exports = function () {
process.env.ENV_SILENT = true
ioc.bind('Adonis/Src/Helpers', function () {
return new Helpers(path.join(__dirname, './'))
})
Expand Down
10 changes: 10 additions & 0 deletions test/integration/specs/route.spec.js
Expand Up @@ -31,6 +31,10 @@ class UserController {
}

test.group('Route', (group) => {
group.after(() => {
delete process.env.ENV_SILENT
})

group.beforeEach(() => {
ioc.restore()
RouteStore.clear()
Expand Down Expand Up @@ -216,4 +220,10 @@ test.group('Route', (group) => {
assert.equal((await supertest(appUrl).put('/users/1').expect(200)).text, 'updated via middleware')
assert.equal((await supertest(appUrl).delete('/users/1').expect(200)).text, 'destroyed via middleware')
})

test('render view with data via brisk route', async (assert) => {
const Route = use('Route')
Route.on('/').render('user', { name: 'virk' })
assert.equal((await supertest(appUrl).get('/').expect(200)).text.trim(), 'Hello virk')
})
})

0 comments on commit c0838ff

Please sign in to comment.