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 )