The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More tests => 6;
use Test::HTTP::Router;
use HTTP::Router::Declare;

my $router = router {
    resource 'Admin', {
        controller => 'User::Admin',
        member     => { settings => 'GET' },
    };

    resource 'Account', { except => [qw(new edit delete)] };

    resource 'User', { only => [qw(show update)] };
};

is scalar @{[ $router->routes ]} => 28; # admin => 16, account => 8, user => 4

params_ok $router, '/admin/settings', { method => 'GET' },
    { controller => 'User::Admin', action => 'settings' };
params_ok $router, '/admin/settings.html', { method => 'GET' },
    { controller => 'User::Admin', action => 'settings', format => 'html' };

match_not_ok $router, '/account/edit', { method => 'GET' }, 'not matched excepted action';

params_ok $router, '/user', { method => 'GET' }, { controller => 'User', action => 'show' };
match_not_ok $router, '/user', { method => 'DELETE' }, 'not matched !only action';