Dancer
view release on metacpan or search on metacpan
lib/Dancer.pm view on Meta::CPAN
my $value = param(shift);
my @array = ref $value eq 'ARRAY' ? @$value
: defined $value ? ( $value )
: ()
;
return @array;
}
sub pass { Dancer::SharedData->response->pass(1);
# throw a special continuation exception
Dancer::Continuation::Route::Passed->new->throw;
}
sub patch { Dancer::App->current->registry->universal_add('patch', @_) }
sub path { Dancer::FileUtils::path(@_) }
sub post { Dancer::App->current->registry->universal_add('post', @_) }
sub prefix { @_ == 0 ? Dancer::App->current->get_prefix :
Dancer::App->current->set_prefix(@_) }
sub put { Dancer::App->current->registry->universal_add('put', @_) }
sub redirect { goto &_redirect }
sub render_with_layout { Dancer::Template::Abstract->_render_with_layout(@_) }
sub request { Dancer::SharedData->request }
sub send_error { Dancer::Continuation::Route::ErrorSent->new(
return_value => Dancer::Error->new(
message => $_[0],
code => $_[1] || 500)->render()
)->throw }
#sub send_file { goto &_send_file }
sub send_file { Dancer::Continuation::Route::FileSent->new(
return_value => _send_file(@_)
)->throw
}
sub set { goto &setting }
sub set_cookie { Dancer::Cookies->set_cookie(@_) }
sub setting { Dancer::App->applications ? Dancer::App->current->setting(@_) : Dancer::Config::setting(@_) }
sub session { goto &_session }
sub splat { @{ Dancer::SharedData->request->params->{splat} || [] } }
sub start { goto &_start }
sub status { Dancer::SharedData->response->status(@_) }
sub template { Dancer::Template::Abstract->template(@_) }
sub to_dumper { Dancer::Serializer::Dumper::to_dumper(@_) }
sub to_json { Dancer::Serializer::JSON::to_json(@_) }
sub to_xml { Dancer::Serializer::XML::to_xml(@_) }
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');
}
( run in 0.797 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )