Amon2-Lite
view release on metacpan or search on metacpan
lib/Amon2/Lite.pm view on Meta::CPAN
my $tmpl_dir = File::Spec->catdir(dirname((caller(0))[1]), 'tmpl');
*{"${base_class}::create_view"} = sub {
$base_class->template_options();
};
*{"${base_class}::template_options"} = sub {
my ($class, %options) = @_;
# using lazy loading to read __DATA__ section.
my $vpath = Data::Section::Simple->new($caller)->get_data_section();
my %params = (
'syntax' => 'TTerse',
'module' => [ 'Text::Xslate::Bridge::TT2Like' ],
'path' => [ $vpath, $tmpl_dir ],
'function' => {
c => sub { Amon2->context() },
uri_with => sub { Amon2->context()->req->uri_with(@_) },
uri_for => sub { Amon2->context()->uri_for(@_) },
},
);
my $merge = sub {
my ($stuff) = @_;
for (qw(module path)) {
if ($stuff->{$_}) {
unshift @{$params{$_}}, @{delete $stuff->{$_}};
}
}
for (qw(function)) {
if ($stuff->{$_}) {
$params{$_} = +{ %{$params{$_}}, %{delete $stuff->{$_}} };
}
}
while (my ($k, $v) = each %$stuff) {
$params{$k} = $v;
}
};
if (my $config = $caller->config->{'Text::Xslate'}) {
$merge->($config);
}
if (%options) {
$merge->(\%options);
}
my $xslate = Text::Xslate->new(%params);
no warnings 'redefine';
*{"${caller}::create_view"} = sub { $xslate };
$xslate;
};
if (-d File::Spec->catdir($caller->base_dir, 'config')) {
*{"${base_class}::load_config"} = sub { Amon2::Config::Simple->load(shift) };
} else {
*{"${base_class}::load_config"} = sub { +{ } };
}
}
1;
__END__
=for stopwords TinyURL
=encoding utf8
=head1 NAME
Amon2::Lite - Sinatra-ish framework on Amon2!
=head1 SYNOPSIS
use Amon2::Lite;
get '/' => sub {
my ($c) = @_;
return $c->render('index.tt');
};
__PACKAGE__->to_app();
__DATA__
@@ index.tt
<!doctype html>
<html>
<body>Hello</body>
</html>
=head1 DESCRIPTION
This is a Sinatra-ish wrapper for Amon2.
B<THIS MODULE IS BETA STATE. API MAY CHANGE WITHOUT NOTICE>.
=head1 FUNCTIONS
=over 4
=item C<< any(\@methods, $path, \&code) >>
=item C<< any($path, \&code) >>
Register new route for router.
=item C<< get($path, $code->($c)) >>
Register new route for router.
=item C<< post($path, $code->($c)) >>
Register new route for router.
=item C<< __PACKAGE__->load_plugin($name, \%opts) >>
Load a plugin to the context object.
=item [EXPERIMENTAL] C<< __PACKAGE__->enable_session(%args) >>
This method enables L<Plack::Middleware::Session>.
C<< %args >> would be pass to enabled to C<< Plack::Middleware::Session->new >>.
The default state class is L<Plack::Session::State::Cookie>, and store class is L<Plack::Session::Store::File>.
( run in 2.398 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )