File Coverage

blib/lib/Template/Parser/RemoteInclude.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package Template::Parser::RemoteInclude;
2              
3 1     1   63067 use strict;
  1         2  
  1         37  
4 1     1   7 use warnings;
  1         2  
  1         46  
5              
6             our $VERSION = '0.01';
7              
8 1     1   889 use namespace::autoclean;
  1         23406  
  1         7  
9 1     1   1666 use AnyEvent;
  1         6529  
  1         38  
10 1     1   444 use AnyEvent::Curl::Multi;
  0            
  0            
11             use HTTP::Request;
12             use Scalar::Util qw(refaddr);
13             use Try::Tiny;
14             use Sub::Install;
15              
16             use base 'Template::Parser';
17              
18             # парсер ничего не знает о переменных, которые будут проинициализированы в шаблоне, т.к. он его ещё разбирает,
19             # но, вот получить хэш переменных - вполне необходимо, дабы упростить использование модуля
20             $Template::Parser::RemoteInclude::old_tt_process = \&Template::process;
21             Sub::Install::reinstall_sub({
22             code => sub {
23             my $providers = $_[0]->service->context->{ LOAD_TEMPLATES };
24             for (@$providers) {
25             next unless $_;
26             if (UNIVERSAL::isa($_->{PARSER},'Template::Parser::RemoteInclude')) {
27             $_->{PARSER}->{__stash} = $_[2] || {};
28             last;
29             };
30             }
31             return $Template::Parser::RemoteInclude::old_tt_process->(@_);
32             },
33             into => "Template",
34             as => "process",
35             });
36              
37              
38             =head1 NAME
39              
40             Template::Parser::RemoteInclude - call remote template-server inside your template
41              
42             =head1 DESCRIPTION
43              
44             You can write your own html aggregator for block build pages.
45             However, this module allows you to make remote calls directly from the template.
46             This is very useful when your project have a template server.
47              
48             This module allows you to make any http-requests from template.
49              
50             Depends on L and L.
51              
52             L faster than L. L much faster than L ;)
53              
54             Use and enjoy!
55              
56             =head1 NOTE
57              
58             =over 4
59              
60             =item *
61              
62             Directive C like C, but call remote uri.
63              
64             =item *
65              
66             Parser does not know anything about L, but knows about the variables passed in C.
67              
68             =item *
69              
70             Content of the response can be as a simple html or a new template
71              
72             =item *
73              
74             Contents of the response is recursively scanned for directives C and makes additional request if necessary
75              
76             =item *
77              
78             The best option when your template-server is located on the localhost
79              
80             =back
81              
82             =head1 SYNOPSIS
83              
84             create C