File Coverage

blib/lib/Mojolicious/Plugin/Mason1Renderer.pm
Criterion Covered Total %
statement 21 53 39.6
branch 0 12 0.0
condition 0 9 0.0
subroutine 7 9 77.7
pod 1 1 100.0
total 29 84 34.5


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::Mason1Renderer;
2              
3 1     1   22635 use warnings;
  1         3  
  1         35  
4 1     1   6 use strict;
  1         2  
  1         38  
5              
6 1     1   1014 use Mojo::Base 'Mojolicious::Plugin';
  1         10875  
  1         9  
7              
8 1     1   2096 use HTML::Mason;
  1         116694  
  1         66  
9 1     1   34 use HTML::Mason::Interp;
  1         3  
  1         22  
10 1     1   11 use HTML::Mason::Request;
  1         3  
  1         22  
11 1     1   1676 use Encode;
  1         16665  
  1         823  
12              
13             =head1 NAME
14              
15             Mojolicious::Plugin::Mason1Renderer - Mason 1 (aka HTML::Mason 1.x) Renderer Plugin.
16              
17             =head1 VERSION
18              
19             Version 0.01
20              
21             =cut
22              
23             our $VERSION = '0.02';
24              
25             =head1 SYNOPSIS
26              
27             ## Mojolicious::Lite
28              
29             # example -1-
30             use Mojolicious::Lite;
31             plugin 'mason1_renderer';
32             get '/' => sub {
33             my $self = shift;
34             $self->render('/index', handler => "mason" );
35             };
36             app->start;
37              
38             # template: MOJO_HOME/mason/index
39            
40             Welcome
41            
42              
43             # example -2-
44             use Mojolicious::Lite;
45             plugin 'mason1_renderer' => { interp_params => { comp_root => "/path/to/mason/comps",
46             ... (other parameters to the new() HTML::Mason::Interp constructor)
47             },
48             request_params => { error_format => "brief",
49             ... (other parameters to the new() HTML::Mason::Request constructor)
50             },
51             };
52             get '/' => sub {
53             my $self = shift;
54             $self->render('/index', handler => "mason", mytext => "Hello world" );
55             };
56             app->start;
57              
58             # template: /path/to/mason/comps/index
59             <%args>
60             $mytext => undef
61            
62            
63             Welcome : <% $mytext %>
64            
65              
66              
67             ## Mojolicious
68              
69             # example -1-
70             package MyApp;
71             use Mojo::Base 'Mojolicious';
72              
73             sub startup {
74             my $self = shift;
75             $self->plugin('mason1_renderer');
76             $self->routes->get('/' => sub {
77             my $self = shift;
78             $self->render('/index', handler => "mason" );
79             }
80             );
81             }
82             1;
83              
84             # template: MOJO_HOME/mason/index
85            
86             Welcome
87            
88              
89             # example -2-
90             package MyApp;
91             use Mojo::Base 'Mojolicious';
92              
93             sub startup {
94             my $self = shift;
95             $self->plugin('mason1_renderer', { interp_params => { comp_root => "/path/to/mason/comps",
96             ... (other parameters to the new() HTML::Mason::Interp constructor)
97             },
98             request_params => { error_format => "brief",
99             ... (other parameters to the new() HTML::Mason::Request constructor)
100             },
101             }
102             );
103             $self->routes->get('/' => sub {
104             my $self = shift;
105             $self->render('/index', handler => "mason", mytext => "Hello World" );
106             }
107             );
108             }
109             1;
110              
111             # template: /path/to/mason/comps/index
112             <%args>
113             $mytext => undef
114            
115            
116            
117             Welcome : <% $mytext %>
118             Mason root_comp is <% $c->app->home %>
119            
120            
121              
122             =head1 DESCRIPTION
123              
124             L is a renderer for Mason 1 (aka L 1.x) template system.
125              
126             =head2 Mojolicious::Controller object aka. $c
127              
128             Mason templates have access to the L object as global $c.
129              
130             =head2 HTML::Mason comp_root
131              
132             C is set to default "MOJO_HOME/mason"
133              
134              
135             =head1 METHODS
136              
137             L inherits all methods from L and implements the following new ones.
138              
139             =head2 register
140              
141             $plugin->register;
142              
143             Register renderer in L application.
144              
145             =cut
146              
147             sub register {
148 0     0 1   my ($self, $app, $conf) = @_;
149              
150             # Config
151 0   0       $conf ||= {};
152              
153             # HTML::Mason::Interp params
154 0   0       $conf->{interp_params}->{comp_root} ||= $app->home->rel_dir('mason');
155            
156 0 0         my @allow_globals = ('$c', @{$conf->{interp_params}->{allow_globals} || []});
  0            
157 0           $conf->{interp_params}->{allow_globals} = \@allow_globals;
158              
159             # make HTML::Mason::Interp
160 0           my $interp = HTML::Mason::Interp->new(%{$conf->{interp_params}});
  0            
161              
162              
163             # HTML::Mason::Request params
164 0   0       $conf->{request_params} ||= {};
165 0 0 0       $conf->{request_params}->{error_format} ||= "brief" if($app->mode eq 'production');
166              
167 0           my $request_params = $conf->{request_params};
168              
169              
170             # Add "mason" handler
171             $app->renderer->add_handler(
172             mason => sub {
173 0     0     my ($r, $c, $output, $options) = @_;
174              
175             # check $interp object
176 0 0         if(not $interp) {
177 0           $c->app->log->error("HTML::Mason::Interp not initialized");
178 0           $c->render_exception("HTML::Mason::Interp not initialized");
179 0           $$output = "";
180 0           return 0;
181             }
182              
183             # stash contains args to pass to Mason
184 0           my $stash = $c->stash;
185              
186             # template name
187 0 0         return 0 unless my $template = $options->{template};
188 0           $template =~ s,^/*,/,; # Mason component must start with /
189              
190             # set global "$c" in Mason environment
191 0           $interp->set_global('c' => $c);
192              
193              
194             # call HTML::Mason interpreter
195 0           my $request = $interp->make_request( args => [%$stash],
196             out_method => $output,
197             comp => $template,
198 0           %{$request_params} );
199              
200 0 0         if(not $request) {
201 0           $c->app->log->error("HTML::Mason::Request not initialized");
202 0           $c->render_exception("HTML::Mason::Request not initialized");
203 0           $$output = "";
204 0           return 0;
205             }
206              
207              
208             # All seems OK, let's exec Mason's request
209 0           $request->exec();
210              
211             # Encoding
212 0 0         $$output = decode($r->encoding, $$output) if $r->encoding;
213              
214 0           return 1;
215             }
216 0           );
217              
218             }
219              
220             =head1 SEE ALSO
221              
222             Mason 1, L, L.
223              
224             Mason 2, L.
225              
226             Mason 2 Mojolicious Plugin, L
227              
228             =head1 AUTHOR
229              
230             Alexandre SIMON, C<< >>
231              
232             =head1 BUGS and SUPPORT
233              
234             You can find documentation for this module with the perldoc command.
235              
236             perldoc Mojolicious::Plugin::Mason1Renderer
237              
238              
239             Bugs and feature requests will be tracked at RT:
240              
241             http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Mojolicious-Plugin-Mason1Renderer
242             bug-mojolicious-plugin-mason1renderer at rt.cpan.org
243              
244             The latest source code can be browsed and fetched at:
245              
246             https://github.com/igit/Mojolicious-Plugin-Mason1Renderer
247             git clone git://github.com/igit/Mojolicious-Plugin-Mason1Renderer.git
248              
249              
250             You can also look for information at:
251              
252             =over 4
253              
254             =item * RT: CPAN's request tracker
255              
256             L
257              
258             =item * AnnoCPAN: Annotated CPAN documentation
259              
260             L
261              
262             =item * CPAN Ratings
263              
264             L
265              
266             =item * Search CPAN
267              
268             L
269              
270             =back
271              
272              
273             =head1 ACKNOWLEDGEMENTS
274              
275             Original idea was taken from Graham BARR (L)
276             MojoX::Renderer::Mason module. This module was not longer adapted to Mojolicious new
277             Plugin philosophy.
278              
279             Many, many thanks to Sebastian RIEDEL for developping Mojolicious and Jonathan SWARTZ
280             for developping HTML::Mason and Mason (2).
281              
282             =head1 LICENSE AND COPYRIGHT
283              
284             Copyright 2011 Alexandre SIMON.
285              
286             This program is free software; you can redistribute it and/or modify it
287             under the terms of either: the GNU General Public License as published
288             by the Free Software Foundation; or the Artistic License.
289              
290             See http://dev.perl.org/licenses/ for more information.
291              
292              
293             =cut
294              
295             1; # End of Mojolicious::Plugin::Mason1Renderer