NAME
Plack::App::File::PYX - Plack PYX directory application.
SYNOPSIS
use Plack::App::File::PYX;
my $obj = Plack::App::File::PYX->new(%parameters);
my $psgi_ar = $obj->serve_path($env, $file);
my $app = $obj->to_app;
METHODS
new
my $obj = Plack::App::File::PYX->new(%parameters);
Constructor.
Returns instance of object.
content_type
Content-Type of serialized output. There is possibility of callback (reference to code) with $file argument which return content type string.
Default value is 'text/html'.
encoding
Set the file encoding for text files. Defaults to 'utf-8'.
file
The file path to create responses from. Optional.
If it's set the application would ALWAYS create a response out of the file and there will be no security check etc. (hence fast). If it's not set, the application uses "root" to find the matching file.
indent
Set Tags::Output::* class for output serialization.
Default value is Tags::Output::Raw.
root
Document root directory. Defaults to "." (current directory)
serve_path
my $psgi_ar = $obj->serve_path($env, $file);
Process file on disk and serve it to application.
Returns reference to array (PSGI structure).
to_app
my $app = $obj->to_app;
Creates Plack application.
Returns Plack::Component object.
EXAMPLE1
use strict;
use warnings;
use File::Temp;
use IO::Barf;
use Plack::App::File::PYX;
use Plack::Runner;
# Temporary file with PYX.
my $temp_pyx_file = File::Temp->new->filename;
# PYX file.
my $pyx = <<'END';
(html
(head
(title
-Title
)title
)head
(body
(div
-Hello world
)div
)body
)html
END
barf($temp_pyx_file, $pyx);
# Run application with one PYX file.
my $app = Plack::App::File::PYX->new('file' => $temp_pyx_file)->to_app;
Plack::Runner->new->run($app);
# Output:
# HTTP::Server::PSGI: Accepting connections at http://0:5000/
# > curl http://localhost:5000/
# <html><head><title>Title</title></head><body><div>Hello world</div></body></html>
EXAMPLE2
use strict;
use warnings;
use File::Temp;
use IO::Barf;
use Plack::App::File::PYX;
use Plack::Runner;
# Temporary file with PYX.
my $temp_pyx_file = File::Temp->new->filename;
# PYX file.
my $pyx = <<'END';
(html
(head
(title
-Title
)title
)head
(body
(div
-Hello world
)div
)body
)html
END
barf($temp_pyx_file, $pyx);
# Run application with one PYX file.
my $app = Plack::App::File::PYX->new(
'file' => $temp_pyx_file,
'indent' => 'Tags::Output::Indent',
)->to_app;
Plack::Runner->new->run($app);
# Output:
# HTTP::Server::PSGI: Accepting connections at http://0:5000/
# > curl http://localhost:5000/
# <html>
# <head>
# <title>
# Title
# </title>
# </head>
# <body>
# <div>
# Hello world
# </div>
# </body>
# </html>
EXAMPLE3
use strict;
use warnings;
use File::Temp;
use IO::Barf;
use Plack::App::File::PYX;
use Plack::Runner;
# Temporary file with PYX.
my $temp_pyx_file = File::Temp->new->filename;
# PYX file.
my $pyx = <<'END';
?xml version="1.0"
(svg
Axmlns http://www.w3.org/2000/svg
(rect
Ax 80
Ay 60
Awidth 250
Aheight 250
Arx 20
Astyle fill:#ff0000; stroke:#000000; stroke-width:2px;
)rect
(rect
Ax 140
Ay 120
Awidth 250
Aheight 250
Arx 40
Astyle fill:#0000ff; stroke:#000000; stroke-width:2px; fill-opacity:0.7;
)rect
)svg
END
barf($temp_pyx_file, $pyx);
# Run application with one PYX file.
my $app = Plack::App::File::PYX->new(
'content_type' => 'image/svg+xml',
'file' => $temp_pyx_file,
'indent' => 'Tags::Output::Indent',
)->to_app;
Plack::Runner->new->run($app);
# Output:
# HTTP::Server::PSGI: Accepting connections at http://0:5000/
# > curl http://localhost:5000/
# <?xml version="1.0"?>
# <svg xmlns="http://www.w3.org/2000/svg">
# <rect x="80" y="60" width="250" height="250" rx="20" style=
# "fill:#ff0000; stroke:#000000; stroke-width:2px;">
# </rect>
# <rect x="140" y="120" width="250" height="250" rx="40" style=
# "fill:#0000ff; stroke:#000000; stroke-width:2px; fill-opacity:0.7;">
# </rect>
# </svg>
EXAMPLE4
use strict;
use warnings;
use File::Temp;
use IO::Barf;
use Plack::App::File::PYX;
use Plack::Runner;
# Temporary file with PYX.
my $temp_pyx_file = File::Temp->new->filename;
# PYX file in UTF8, prepared for iso-8859-2 output.
my $pyx = <<'END';
(html
(head
(title
-žščřďťň
)title
(meta
Acharset iso-8859-2
)meta
)head
(body
(div
-Hello in iso-8859-2 encoding - Ahoj světe!
)div
)body
)html
END
barf($temp_pyx_file, $pyx);
# Run application with one PYX file.
my $app = Plack::App::File::PYX->new(
'encoding' => 'iso-8859-2',
'file' => $temp_pyx_file,
'indent' => 'Tags::Output::Indent',
)->to_app;
Plack::Runner->new->run($app);
# Output:
# HTTP::Server::PSGI: Accepting connections at http://0:5000/
# > curl http://localhost:5000/
# XXX in ISO-8859-2 encoding
# <html>
# <head>
# <title>
# žščřďťň
# </title>
# <meta charset="iso-8859-2">
# </meta>
# </head>
# <body>
# <div>
# Hello in iso-8859-2 encoding - Ahoj světe!
# </div>
# </body>
# </html>
DEPENDENCIES
Encode, English, Error::Pure, HTTP::Date, Plack::App::File, Plack::Util::Accessor, PYX::SGML::Tags, Tags::Output::Raw, Unicode::UTF8.
REPOSITORY
https://github.com/michal-josef-spacek/Plack-App-File-PYX
AUTHOR
Michal Josef Špaček mailto:skim@cpan.org
LICENSE AND COPYRIGHT
© 2020 Michal Josef Špaček
BSD 2-Clause License
VERSION
0.01