Dancer
view release on metacpan or search on metacpan
lib/Dancer.pm view on Meta::CPAN
sub to_yaml { Dancer::Serializer::YAML::to_yaml(@_) }
sub true { 1 }
sub upload { Dancer::SharedData->request->upload(@_) }
sub uri_for { Dancer::SharedData->request->uri_for(@_) }
sub var { Dancer::SharedData->var(@_) }
sub vars { Dancer::SharedData->vars }
sub warning { goto &Dancer::Logger::warning }
# When importing the package, strict and warnings pragma are loaded,
# and the appdir detection is performed.
{
my $as_script = 0;
sub import {
my ($class, @args) = @_;
my ($package, $script) = caller;
strict->import;
warnings->import;
utf8->import;
my @final_args;
my $syntax_only = 0;
foreach (@args) {
if ( $_ eq ':moose' ) {
push @final_args, '!before', '!after';
}
elsif ( $_ eq ':tests' ) {
push @final_args, '!pass';
}
elsif ( $_ eq ':syntax' ) {
$syntax_only = 1;
}
elsif ($_ eq ':script') {
$as_script = 1;
} else {
push @final_args, $_;
}
}
$class->export_to_level(1, $class, @final_args);
# if :syntax option exists, don't change settings
return if $syntax_only;
$as_script = 1 if $ENV{PLACK_ENV};
Dancer::GetOpt->process_args unless $as_script;
_init_script_dir($script);
Dancer::Config->load;
}
}
# private code
# FIXME handle previous usage of load_app with multiple app names
sub _load_app {
my ($app_name, %options) = @_;
my $script = (caller)[1];
Dancer::Logger::core("loading application $app_name");
# set the application
my $app = Dancer::App->set_running_app($app_name);
# Application options
$app->set_app_prefix($options{prefix}) if $options{prefix};
$app->settings($options{settings}) if $options{settings};
# load the application
_init_script_dir($script);
my ($res, $error) = Dancer::ModuleLoader->load($app_name);
$res or raise core => "unable to load application $app_name : $error";
# restore the main application
Dancer::App->set_running_app('main');
}
sub _init_script_dir {
my ($script) = @_;
my ($script_vol, $script_dirs, $script_name) =
File::Spec->splitpath(File::Spec->rel2abs($script));
# normalize
if ( -d ( my $fulldir = File::Spec->catdir( $script_dirs, $script_name ) ) ) {
$script_dirs = $fulldir;
$script_name = '';
}
my @script_dirs = File::Spec->splitdir($script_dirs);
my $script_path;
if ($script_vol) {
$script_path = Dancer::path($script_vol, $script_dirs);
} else {
$script_path = Dancer::path($script_dirs);
}
my $LAYOUT_PRE_DANCER_1_2 = 1;
# in bin/ or public/ or t/ we need to go one level up to find the appdir
$LAYOUT_PRE_DANCER_1_2 = 0
if ($script_dirs[$#script_dirs - 1] eq 'bin')
or ($script_dirs[$#script_dirs - 1] eq 'public')
or ($script_dirs[$#script_dirs - 1] eq 't');
my $appdir = $ENV{DANCER_APPDIR} || (
$LAYOUT_PRE_DANCER_1_2
? $script_path
: File::Spec->rel2abs(Dancer::path($script_path, '..'))
);
Dancer::setting(appdir => $appdir);
# once the dancer_appdir have been defined, we export to env
$ENV{DANCER_APPDIR} = $appdir;
Dancer::Logger::core("initializing appdir to: `$appdir'");
Dancer::setting(confdir => $ENV{DANCER_CONFDIR}
|| $appdir) unless Dancer::setting('confdir');
( run in 0.449 second using v1.01-cache-2.11-cpan-aadc1410aed )