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
|
package t::lib::TestApp;
use Dancer2;
# this app is intended to cover 100% of the DSL!
# set some MIME aliases...
mime->add_type( foo => 'text/foo' );
mime->add_alias( f => 'foo' );
set 'default_mime_type' => 'text/bar';
# hello route
get '/' => sub { app->name };
# /haltme should bounce to /
hook 'before' => sub {
if ( request->path_info eq '/haltme' ) {
redirect '/';
halt;
}
};
get '/haltme' => sub {"should not be there"};
hook 'after' => sub {
my $response = shift;
if ( request->path_info eq '/rewrite_me' ) {
$response->content("rewritten!");
}
};
get '/rewrite_me' => sub {"body should not be this one"};
# some settings
set some_var => 1;
setting some_other_var => 1;
set multiple_vars => 4, can_be_set => 2;
get '/config' => sub {
return
config->{some_var} . ' '
. config->{some_other_var} . ' and '
. setting('multiple_vars')
. setting('can_be_set');
};
if ( $] >= 5.010 ) {
# named captures
get
qr{/(?<class> usr | content | post )/(?<action> delete | find )/(?<id> \d+ )}x
=> sub {
join( ":", sort %{ captures() } );
};
}
# chained routes with pass
get '/user/**' => sub {
my $user = params->{splat};
var user => $user->[0][0];
pass;
};
get '/user/*/home' => sub {
my $user = var('user'); # should be set by the previous route
"hello $user";
};
# post & dirname
post '/dirname' => sub {
dirname('/etc/passwd');
};
# header
get '/header/:name/:value' => sub {
response_header param('name') => param('value');
1;
};
# push_header
get '/header/:name/:valueA/:valueB' => sub {
push_response_header param('name') => param('valueA');
push_response_header param('name') => param('valueB');
1;
};
# header
get '/header_twice/:name/:valueA/:valueB' => sub {
response_header param('name') => param('valueA');
response_header param('name') => param('valueB');
1;
};
# any
any [ 'get', 'post' ], '/any' => sub {
"Called with method " . request->method;
};
# true and false
get '/booleans' => sub {
join( ":", true, false );
};
# mimes
get '/mime/:name' => sub {
mime->for_name( param('name') );
};
# content_type
get '/content_type/:type' => sub {
content_type param('type');
1;
};
# prefix
prefix '/prefix' => sub {
get '/bar' => sub {'/prefix/bar'};
prefix '/prefix1' => sub {
get '/bar' => sub {'/prefix/prefix1/bar'};
};
prefix '/prefix2';
get '/foo' => sub {'/prefix/prefix2/foo'};
};
1;
|