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 )