All files Group.js

100% Statements 14/14
50% Branches 1/2
100% Functions 9/9
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130                                                      9x                                           2x 2x 2x       2x                                           3x 2x                                           5x 3x                                           1x 1x          
/*
 * Next Avenues
 *
 * (c) Samuel Joos
 *
 * Based on the work of
 * (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.
*/
 
/**
 * Group class is used to group routes with
 * common behavior. For example prefixing a bunch
 * of routes.
 *
 * An instance of group is obtained by calling the
 * `router.group` method on [Router](https://github.com/samueljoos/next-avenues/blob/master/docs/router.md)
 * class.
 *
 * @class Group
 * @constructor
 *
 */
class Group {
    constructor(routes) {
        this._routes = routes;
    }
 
    /**
     * @description
     * Give a name to a group of routes.
     * This will prefix all routes name.
     * Also see [Route.as](https://github.com/samueljoos/next-avenues/blob/master/docs/route.md#asname)
     *
     * @function as
     * @param {string} name Prefix for the route names seperated by a '.'.
     * @returns {Group}
     *
     * @example
     * router
     *   .group(() => {
     *      router.add('/', 'dashboard').as('dashboard');
     *      // the route name will be admin.dashboard
     *   })
     *   .as('admin')
     */
    as(name) {
        this._routes.forEach((route) => {
            Eif (route.name.length > 0) {
                route.name = `${name}.${route.name}`;
            }
        });
 
        return this;
    }
 
    /**
     * @description
     * Prefix group of routes.
     * Also see [Route.prefix](https://github.com/samueljoos/next-avenues/blob/master/docs/route.md#prefixprefix)
     *
     * @function prefix
     *
     * @param {string} prefix Prefix for the route paths.
     * @returns {Group}
     *
     * @example
     * router
     *   .group(() => {
     *      router.add('/articles', 'articles').as('articles');
     *      // the resolved route path will be /api/v1/articles
     *   })
     *   .prefix('api/v1')
     */
    prefix(prefix) {
        this._routes.forEach((route) => route.prefix(prefix));
        return this;
    }
 
    /**
     * @description
     * Add domain to a group of routes.
     * Also see [Route.domain](https://github.com/samueljoos/next-avenues/blob/master/docs/route.md#domaindomain)
     *
     * @function domain
     *
     * @param  {string} domain Domain for the routes.
     * @returns {Group}
     *
     * @example
     * router
     *   .group(() => {
     *      router.add('/', 'home').as('home');
     *      // the resolved route path will be http://next-avenues.com/
     *   })
     *   .domain('next-avenues.com')
     */
    domain(domain) {
        this._routes.forEach((route) => route.domain(domain));
        return this;
    }
 
    /**
     * @description
     * Add data to a group of routes.
     * Also see [Route.data](https://github.com/samueljoos/next-avenues/blob/master/docs/route.md#datadata)
     *
     * @function data
     *
     * @param  {Object} data Data for the routes.
     * @returns {Group}
     *
     * @example
     * router
     *   .group(() => {
     *      router.add('/', 'home').as('home');
     *      // the data object will be provided on the currentRoute object
     *   })
     *   .data({ lang: 'nl' })
     */
    data(data) {
        this._routes.forEach((route) => route.data(data));
        return this;
    }
}
 
export default Group;