use File::Spec;
use UNIVERSAL::moniker;
-sub template_root { "/opt/houseshare/templates" } # For now
sub new { bless {}, shift } # Not worth having
-sub process {
+sub _tt {
my ($self, $r) = @_;
- my $root = $self->template_root;
- my $template = Template->new({ INCLUDE_PATH => [
+ my $root = $r->config->{template_root};
+ Template->new({ INCLUDE_PATH => [
$root,
File::Spec->catdir($root, $r->model_class->moniker),
File::Spec->catdir($root, "custom"),
File::Spec->catdir($root, "factory")
]});
+}
+
+sub _args {
+ my ($self, $r) = @_;
my %args = (
request => $r,
class => $r->model_class,
} else {
($args{$r->model_class->moniker}) = @{$r->objects};
}
+ %args;
+}
+
+sub process {
+ my ($self, $r) = @_;
+ my $template = $self->_tt($r):
+ my $output;
+ $template->process($r->template, { $self->_args($r) }, \$output);
+ || $self->error($r, $template->error);
+ $r->{ar}->content_type("text/html");
+ $r->{ar}->headers_out->set("Content-Length" => length $output);
+ $r->send_http_header;
+ $r->print($output);
+ return 200;
+}
- $template->process($r->template, \%args);
+sub error {
+ my ($self, $r, $error) = @_;
+ $r->{ar}_>content_type("text/plain");
+ $r->send_http_header;
+ $r->print($error);
+ return 500;
+ exit;
}