Dancer2

 view release on metacpan or  search on metacpan

lib/Dancer2/Core/App.pm  view on Meta::CPAN

# ABSTRACT: encapsulation of Dancer2 packages
package Dancer2::Core::App;
$Dancer2::Core::App::VERSION = '2.1.0';
use Moo;
use Carp               qw<croak carp>;
use Scalar::Util       'blessed';
use List::Util         ();
use Module::Runtime    'is_module_name';
use Safe::Isa;
use Sub::Quote;
use Path::Tiny         ();
use Module::Runtime    qw< require_module use_module >;
use Ref::Util          qw< is_ref is_arrayref is_globref is_scalarref is_regexpref >;
use Sub::Util          qw/ set_subname subname /;

use Plack::App::File;
use Plack::Middleware::FixMissingBodyInRedirect;
use Plack::Middleware::Head;
use Plack::Middleware::Conditional;
use Plack::Middleware::ConditionalGET;

use Dancer2::ConfigReader;
use Dancer2::Core;
use Dancer2::Core::Cookie;
use Dancer2::Core::HTTP;
use Dancer2::Core::Error;
use Dancer2::Core::Types;
use Dancer2::Core::Route;
use Dancer2::Core::Hook;
use Dancer2::Core::Request;
use Dancer2::Core::Factory;

our $EVAL_SHIM; $EVAL_SHIM ||= sub {
    my $code = shift;
    $code->(@_);
};


# we have hooks here
with qw<
    Dancer2::Core::Role::Hookable
    Dancer2::Core::Role::HasConfig
    Dancer2::Core::Role::HasLocation
    Dancer2::Core::Role::HasEnvironment
>;

sub supported_engines { [ qw<logger serializer session template> ] }

sub with_plugins {
    my ( $self, @plugins ) = @_;
    return map $self->_with_plugin($_), @plugins;

}

sub _with_plugin {
    my( $self, $plugin ) = @_;

    if ( is_ref($plugin) ) {
        # passing the plugin as an already-created object

        # already loaded?
        if( my ( $already ) = grep { ref($plugin) eq ref $_; } @{ $self->plugins } ) {
                die "trying to load two different objects for plugin ". ref $plugin
                    if refaddr($plugin) != refaddr $already ;

        }
        else {
            push @{ $self->plugins }, $plugin;
        }

        return $plugin;
    }



( run in 1.117 second using v1.01-cache-2.11-cpan-39bf76dae61 )