Amon2-Lite
view release on metacpan or search on metacpan
lib/Amon2/Lite.pm view on Meta::CPAN
1314151617181920212223242526272829303132333435363738394041424344454647484950515253use
Data::Section::Simple ();
my
$COUNTER
;
sub
import
{
my
$class
=
shift
;
no
strict
'refs'
;
my
$router
= Router::Simple->new();
my
$caller
=
caller
(0);
my
$base_class
=
'Amon2::Lite::_child_'
.
$COUNTER
++;
{
no
warnings;
unshift
@{
"$base_class\::ISA"
},
qw/Amon2 Amon2::Web/
;
unshift
@{
"$caller\::ISA"
},
$base_class
;
}
*{
"$caller\::to_app"
} =
sub
{
my
(
$class
,
%opts
) =
@_
;
my
$app
=
$class
->Amon2::Web::to_app();
if
(
delete
$opts
{handle_static}) {
my
$vpath
= Data::Section::Simple->new(
$caller
)->get_data_section();
my
$orig_app
=
$app
;
my
$app_file_1
;
my
$app_file_2
;
my
$root1
= File::Spec->catdir( dirname((
caller
(0))[1]),
'static'
);
my
$root2
= File::Spec->catdir( dirname((
caller
(0))[1]) );
$app
=
sub
{
my
$env
=
shift
;
if
((
my
$content
=
$vpath
->{
$env
->{PATH_INFO}}) &&
$env
->{PATH_INFO} =~ m{^/}) {
my
$ct
= Plack::MIME->mime_type(
$env
->{PATH_INFO});
return
[200, [
'Content-Type'
=>
$ct
,
'Content-Length'
=>
length
(
$content
)], [
$content
]];
}
elsif
(
$env
->{PATH_INFO} =~
qr{^(?:/robots\.txt|/favicon\.ico)$}
) {
$app_file_1
||= Plack::App::File->new({
root
=>
$root1
});
return
$app_file_1
->call(
$env
);
}
elsif
(
$env
->{PATH_INFO} =~ m{^/static/}) {
$app_file_2
||= Plack::App::File->new({
root
=>
$root2
});
lib/Amon2/Lite.pm view on Meta::CPAN
9596979899100101102103104105106107108109110111112113114115
my
(
$c
,
$res
) =
@_
;
$res
->header(
'Cache-Control'
=>
'private'
);
});
};
*{
"$caller\::router"
} =
sub
{
$router
};
# any [qw/get post delete/] => '/bye' => sub { ... };
# any '/bye' => sub { ... };
*{
"$caller\::any"
} =
sub
($$;$) {
my
$pkg
=
caller
(0);
if
(
@_
==3) {
my
(
$methods
,
$pattern
,
$code
) =
@_
;
$router
->
connect
(
$pattern
,
{
code
=>
$code
,
method
=> [
map
{
uc
$_
}
@$methods
]},
{
method
=> [
map
{
uc
$_
}
@$methods
]},
);
}
else
{
my
(
$pattern
,
$code
) =
@_
;
$router
->
connect
(
lib/Amon2/Lite.pm view on Meta::CPAN
141142143144145146147148149150151152153154155156157158159160161
'Content-Length'
=>
length
(
$content
),
],
[
$content
]
);
}
else
{
return
$c
->res_404();
}
}
};
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'
,
( run in 0.235 second using v1.01-cache-2.11-cpan-0f795438458 )