Dancer2-Plugin-Routing
view release on metacpan or search on metacpan
lib/Dancer2/Plugin/Routing.pm view on Meta::CPAN
package Dancer2::Plugin::Routing;
use 5.10.0;
use strict;
use warnings;
use Dancer2::Plugin;
use Ref::Util qw/is_hashref/;
use base qw/Dancer2::Plugin::RootURIFor/;
=head1 NAME
Dancer2::Plugin::Routing - A dancer2 plugin for configurable routing.
=head1 VERSION
Version 0.01
=cut
our $VERSION = '0.01';
my ( $_settings, $_routings, $_packages ) = undef;
# -----------------------------------------------
# Preloaded methods go here.
# -----------------------------------------------
# Encapsulated class data.
{
sub _load_settings {
return $_settings if $_settings;
$_settings = plugin_setting;
return $_settings;
}
sub _routings {
return $_routings if $_routings;
my $stg = _load_settings->{routes};
$_routings->{$_} = is_hashref $stg->{$_} && $stg->{$_}->{route} ? $stg->{$_}->{route} : $stg->{$_} foreach keys %$stg;
return $_routings;
}
sub _packages {
return $_packages if $_packages;
my $stg = _load_settings->{routes};
foreach ( keys %$stg ) {
next if ( !is_hashref $stg->{$_} || !$stg->{$_}->{package} );
$_packages->{$_} = $stg->{$_}->{package};
}
return $_packages;
}
sub _routing_for {
return undef unless $_[1];
return _routings->{ $_[1] };
}
sub _package_for {
return undef unless $_[1];
my $packages = _packages();
return $packages->{ $_[1] } if $packages;
}
sub _redirect {
my $dsl = shift;
return $dsl->app->redirect( $dsl->SUPER::root_uri_for(@_) );
( run in 3.005 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )