X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FView%2FComponent%2FSubInclude.pm;h=f63a05850a0994ec021f295006dd19db18c5e32d;hb=4b86766c11abee4b0adb47beb8841399d2c12b0f;hp=6b76ed1cf49db180f849fc037c9db12d1e177c23;hpb=976b0551aabfe3dfa16a69628b487f78eabfb5ba;p=catagits%2FCatalyst-View-Component-SubInclude.git diff --git a/lib/Catalyst/View/Component/SubInclude.pm b/lib/Catalyst/View/Component/SubInclude.pm index 6b76ed1..f63a058 100644 --- a/lib/Catalyst/View/Component/SubInclude.pm +++ b/lib/Catalyst/View/Component/SubInclude.pm @@ -15,11 +15,11 @@ Catalyst::View::Component::SubInclude - Use subincludes in your Catalyst views =head1 VERSION -Version 0.07_01 +Version 0.09 =cut -our $VERSION = '0.07_01'; +our $VERSION = '0.10'; $VERSION = eval $VERSION; =head1 SYNOPSIS @@ -41,46 +41,49 @@ Then, somewhere in your templates: C allows you to include content in your templates (or, more generally, somewhere in your view's C processing) -which comes from another action in your application. It's implemented as a +which comes from another action in your application. It's implemented as a L, so using L in your view is required. Simply put, it's a way to include the output of a Catalyst sub-request somewhere -in your page. +in your page. -It's built in an extensible way so that you're free to use sub-requests, Varnish -ESI (L) or any other +It's built in an extensible way so that you're free to use sub-requests, +Varnish ESI (L) or any other sub-include plugin you might want to implement. An LWP plugin seems useful and -might be developed in the future. +might be developed in the future. If you need to address a resource by it's +public path (i.e. the path part trailing C then you +will need to use L directly, and not this +component. =head1 STASH FUNCTIONS This component does its magic by exporting a C coderef entry to the -stash. This way, it's easily accessible by the templates (which is the most +stash. This way, it's easily accessible by the templates (which is the most common use-case). =head2 C -This will render and return the body of the included resource (as specified by +This will render and return the body of the included resource (as specified by C<$path>) using the default subinclude plugin. =head2 C -This will render and return the body of the included resource (as specified by +This will render and return the body of the included resource (as specified by C<$path>) using the specified subinclude plugin. -The C function above is implemented basically as a shortcut which +The C function above is implemented basically as a shortcut which calls this function using the default plugin as the first parameter. =head1 SUBINCLUDE PLUGINS -The module comes with two subinclude plugins: +The module comes with two subinclude plugins: L, -L and +L and L. -By default, the C plugin will be used. This can be changed in the +By default, the C plugin will be used. This can be changed in the view's configuration options (either in the config file or in the view module -itself). +itself). Configuration file example: @@ -91,12 +94,12 @@ Configuration file example: =head2 C This method changes the current active subinclude plugin in runtime. It expects -the plugin suffix (e.g. C or C) or a fully-qualified class +the plugin suffix (e.g. C or C) or a fully-qualified class name in the C namespace. =head2 Writing plugins -If writing your own plugin, keep in kind plugins are required to implement a +If writing your own plugin, keep in kind plugins are required to implement a class method C with the following signature: sub generate_subinclude { @@ -113,15 +116,21 @@ has 'subinclude_plugin' => ( isa => Str, ); +has subinclude => ( + is => 'ro', + isa => HashRef, + default => sub { {} }, +); + around 'new' => sub { my $next = shift; my $class = shift; - + my $self = $class->$next( @_ ); - + my $subinclude_plugin = $self->config->{subinclude_plugin} || 'SubRequest'; $self->set_subinclude_plugin( $subinclude_plugin ); - + $self; }; @@ -158,25 +167,29 @@ has _subinclude_plugin_class_instance_cache => ( sub _subinclude_plugin_class_instance { my ($self, $plugin) = @_; - - my $class = $plugin =~ /::/ ? $plugin : __PACKAGE__ . '::' . $plugin; my $cache = $self->_subinclude_plugin_class_instance_cache; return $cache->{$plugin} if exists $cache->{$plugin}; my $plugin_config = Catalyst::Utils::merge_hashes( - $self->config->{subinclude}->{ALL}||{}, - $self->config->{subinclude}->{$plugin}||{} + $self->subinclude->{ALL}||{}, + $self->subinclude->{$plugin}||{} ); - + my $short_class = $plugin_config->{'class'} ? + delete $plugin_config->{'class'} + : $plugin; + my $class = $short_class =~ /::/ ? + $short_class + : __PACKAGE__ . '::' . $short_class; + Class::MOP::load_class($class); - return $cache->{$plugin} = $class->new($plugin_config); + return $cache->{$class} = $class->new($plugin_config); } =head1 SEE ALSO -L, +L, L, L, L @@ -196,6 +209,10 @@ Nilson Santos Figueiredo Junior, C<< >> Tomas Doran (t0m) C<< >. +Vladimir Timofeev, C<< >>. + +Wallace Reis (wreis) C<< >>. + =head1 SPONSORSHIP Development sponsored by Ionzero LLC L.