1package Dancer2::Plugin::FooPlugin; 2use Dancer2::Plugin; 3 4on_plugin_import { 5 my $dsl = shift; 6 $dsl->get( '/sitemap' => sub { _html_sitemap($dsl) } ); 7}; 8 9sub _html_sitemap { 10 join( ', ', _retrieve_get_urls(@_) ); 11} 12 13register foo_wrap_request => sub { 14 my ($self) = @_; 15 return $self->app->request; 16}, { is_global => 0 }; 17 18register foo_route => sub { 19 my ($self) = @_; 20 $self->get( '/foo', sub {'foo'} ); 21} => { is_global => 1, prototype => '$@' }; 22 23register p_config => sub { 24 my $dsl = shift; 25 my $config = plugin_setting; 26 return $config; 27}; 28 29# taken from SiteMap 30sub _retrieve_get_urls { 31 my $dsl = shift; 32 my ( $route, @urls ); 33 34 for my $app ( @{ $dsl->runner->apps } ) { 35 my $routes = $app->routes; 36 37 # push the static get routes into an array. 38 get_route: 39 for my $get_route ( @{ $routes->{get} } ) { 40 my $regexp = $get_route->regexp; 41 42 # If the pattern is a true comprehensive regexp or the route 43 # has a :variable element to it, then omit it. 44 next get_route if ( $regexp =~ m/[()[\]|]|:\w/ ); 45 46 # If there is a wildcard modifier, then drop it and have the 47 # full route. 48 $regexp =~ s/\?//g; 49 50 # Other than that, its cool to be added. 51 push( @urls, $regexp ) 52 if !grep { $regexp =~ m/$_/i } 53 @$Dancer2::Plugin::SiteMap::OMIT_ROUTES; 54 } 55 } 56 57 return sort(@urls); 58} 59 60 61register_plugin; 621; 63