From: Vladimir Timofeev Date: Thu, 10 Jun 2010 11:37:11 +0000 (+0400) Subject: add SSI component, update tests for it X-Git-Tag: 0.09~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-View-Component-SubInclude.git;a=commitdiff_plain;h=6582f7e5eda148743f7c8564681ffca6e2f49ffc add SSI component, update tests for it --- diff --git a/lib/Catalyst/View/Component/SubInclude/SSI.pm b/lib/Catalyst/View/Component/SubInclude/SSI.pm new file mode 100644 index 0000000..0c94e94 --- /dev/null +++ b/lib/Catalyst/View/Component/SubInclude/SSI.pm @@ -0,0 +1,82 @@ +package Catalyst::View::Component::SubInclude::SSI; +use Moose; +use namespace::clean -except => 'meta'; + +=head1 NAME + +Catalyst::View::Component::SubInclude::SSI - Server Side Includes (SSI) plugin for C::V::Component::SubInclude + +=head1 VERSION + +Version 0.08 + +=cut + +our $VERSION = '0.08'; +$VERSION = eval $VERSION; + +=head1 SYNOPSIS + +In your view class: + + package MyApp::View::TT; + use Moose; + + extends 'Catalyst::View::TT'; + with 'Catalyst::View::Component::SubInclude'; + + __PACKAGE__->config( subinclude_plugin => 'SSI' ); + +Then, somewhere in your templates: + + [% subinclude('/my/widget') %] + +=head1 DESCRIPTION + +C renders C calls as +Server Side Includes (SSI) include directives. This is a feature implemented by +Apache (L), nginx (L) +and many other web servers which allows cache-efficient uses of includes. + +=head1 CLASS METHODS + +=head2 C + +Note that C<$path> should be the private action path - translation to the public +path is handled internally. After translation, this will roughly translate to +the following code: + + my $url = $c->uri_for( $translated_path, @args )->path_query; + return ''; + +Notice that the stash will always be empty. This behavior could be configurable +in the future through an additional switch - for now, this behavior guarantees a +common interface for plugins. + +=cut + +sub generate_subinclude { + my ($self, $c, $path, @params) = @_; + + my $uri = $c->uri_for_action( $path, @params ); + + return ''; +} + +=head1 SEE ALSO + +L, + +=head1 AUTHOR + +Vladimir Timofeev, C<< >> + +=head1 COPYRIGHT & LICENSE + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + +=cut + +__PACKAGE__->meta->make_immutable; +1; diff --git a/t/app.t b/t/app.t index 5dd1cf7..0f4c0d4 100644 --- a/t/app.t +++ b/t/app.t @@ -20,6 +20,8 @@ Current time is: [\w\s:]+ --> | plugin = SubRequest | Current time is: [\w\s:]+ --> | plugin = Visit |

+
+


@@ -59,6 +61,17 @@ Test CaptureArgs and Args interaction (ESI):


(using: http://localhost/time/regular_arg?query_arg=val)
+

+ +Test CaptureArgs and Args interaction (SSI):

+ +
+(using: http://localhost/capture_argtest/time/regular_arg?query_arg=val)
+
+ +
+(using: http://localhost/time/regular_arg?query_arg=val)
+


Test Args when Chained is not being used: diff --git a/t/lib/ESITest/root/index.tt b/t/lib/ESITest/root/index.tt index 0e88e0a..272ec27 100644 --- a/t/lib/ESITest/root/index.tt +++ b/t/lib/ESITest/root/index.tt @@ -7,6 +7,7 @@ Test subinclude using specific plugins:
[% subinclude_using('SubRequest', '/time_include', { 'plugin' => 'SubRequest'} ) %]
[% subinclude_using('Visit', '/time_include', { 'plugin' => 'Visit'} ) %]
[% subinclude_using('ESI', '/time_include', { 'plugin' => 'ESI'} ) %]
+[% subinclude_using('SSI', '/time_include', { 'plugin' => 'SSI'} ) %]


@@ -42,6 +43,17 @@ Test CaptureArgs and Args interaction (ESI):

[% subinclude_using('ESI', '/time_args_without_capture', 'regular_arg', { query_arg => 'val' }) %]
(using: [% c.uri_for( c.controller.action_for('time_args_without_capture'), 'regular_arg', { query_arg => 'val' } ) %])
+

+ +Test CaptureArgs and Args interaction (SSI):

+ +[% subinclude_using('SSI', '/time_args_with_args', ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %]
+(using: [% c.uri_for( c.controller.action_for('time_args_with_args'), ['capture_argtest'], 'regular_arg', { query_arg => 'val' } ) %])
+
+ +[% subinclude_using('SSI', '/time_args_without_capture', 'regular_arg', { query_arg => 'val' }) %]
+(using: [% c.uri_for( c.controller.action_for('time_args_without_capture'), 'regular_arg', { query_arg => 'val' } ) %])
+


Test Args when Chained is not being used: