Mojolicious
view release on metacpan or search on metacpan
lib/Mojolicious/Lite.pm view on Meta::CPAN
package Mojolicious::Lite;
use Mojo::Base 'Mojolicious';
# "Bender: Bite my shiny metal ass!"
use Mojo::File qw(path);
use Mojo::UserAgent::Server;
use Mojo::Util qw(monkey_patch);
sub import {
# Remember executable for later
$ENV{MOJO_EXE} ||= (caller)[1];
# Reuse home directory if possible
local $ENV{MOJO_HOME} = path($ENV{MOJO_EXE})->dirname->to_string unless $ENV{MOJO_HOME};
# Initialize application class
my $caller = caller;
no strict 'refs';
push @{"${caller}::ISA"}, 'Mojolicious';
# Generate moniker based on filename
my $moniker = path($ENV{MOJO_EXE})->basename('.pl', '.pm', '.t');
my $app = shift->new(moniker => $moniker);
# Initialize routes without namespaces
my $routes = $app->routes->namespaces([]);
$app->static->classes->[0] = $app->renderer->classes->[0] = $caller;
# The Mojolicious::Lite DSL
my $root = $routes;
for my $name (qw(any get options patch post put query websocket)) {
monkey_patch $caller, $name, sub { $routes->$name(@_) }
}
monkey_patch($caller, $_, sub {$app}) for qw(new app);
monkey_patch $caller, del => sub { $routes->delete(@_) };
monkey_patch $caller, group => sub (&) {
(my $old, $root) = ($root, $routes);
shift->();
($routes, $root) = ($root, $old);
};
monkey_patch $caller,
helper => sub { $app->helper(@_) },
hook => sub { $app->hook(@_) },
plugin => sub { $app->plugin(@_) },
under => sub { $routes = $root->under(@_) };
# Make sure there's a default application for testing
Mojo::UserAgent::Server->app($app) unless Mojo::UserAgent::Server->app;
# Lite apps are strict!
unshift @_, 'Mojo::Base', '-strict';
goto &Mojo::Base::import;
}
1;
=encoding utf8
=head1 NAME
Mojolicious::Lite - Micro real-time web framework
=head1 SYNOPSIS
# Automatically enables "strict", "warnings", "utf8" and Perl 5.16 features
use Mojolicious::Lite -signatures;
# Route with placeholder
get '/:foo' => sub ($c) {
my $foo = $c->param('foo');
$c->render(text => "Hello from $foo.");
( run in 2.456 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )