From 4df0ebafa22f06945061356e033a570c3875c737 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Tue, 30 Nov 2010 21:37:14 -0500 Subject: [PATCH] change for WWW::Sitemap::XML --- .gitignore | 1 + Changes | 1 + dist.ini | 2 +- lib/Catalyst/Plugin/Sitemap.pm | 46 ++++++++++++++++++++------------ t/lib/TestApp/Controller/Root.pm | 9 ++++++- t/sitemap.t | 5 ++-- 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 5ecf871..17a672a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ Catalyst-Plugin-Sitemap* +.build diff --git a/Changes b/Changes index b54c2c7..fca072f 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,7 @@ Revision history for Catalyst-Plugin-Sitemap {{$NEXT}} + - Change sitemap object under the hood to WWW::Sitemap::XML. - Add Dancer::Plugin::SiteMap in the 'SEE ALSO' section. 0.0.1 2010-09-29 20:19:12 America/Montreal diff --git a/dist.ini b/dist.ini index 463aed9..68bba3b 100644 --- a/dist.ini +++ b/dist.ini @@ -4,7 +4,7 @@ license = Perl_5 copyright_holder = Yanick Champoux copyright_year = 2010 -version = 0.0.1 +version = 1.0.0 [ModuleBuild] diff --git a/lib/Catalyst/Plugin/Sitemap.pm b/lib/Catalyst/Plugin/Sitemap.pm index cb57982..e4a906c 100644 --- a/lib/Catalyst/Plugin/Sitemap.pm +++ b/lib/Catalyst/Plugin/Sitemap.pm @@ -1,4 +1,5 @@ package Catalyst::Plugin::Sitemap; + # ABSTRACT: Sitemap support for Catalyst. =head1 SYNOPSIS @@ -35,7 +36,7 @@ package Catalyst::Plugin::Sitemap; sub sitemap : Path('/sitemap') { my ( $self, $c ) = @_; - $c->res->body( $c->sitemap->as_xml->sprint ); + $c->res->body( $c->sitemap_as_xml ); } =head1 DESCRIPTION @@ -47,10 +48,14 @@ of the sitemap of a Catalyst application. =head2 sitemap() -Returns a L object. The sitemap object is populated by +Returns a L object. The sitemap object is populated by inspecting the controllers of the application for actions with the sub attribute C<:Sitemap>. +=head2 sitemap_as_xml() + +Returns the sitemap as a string containing its XML representation. + =head1 C<:Sitemap> Subroutine Attribute The sitemap is populated by actions ear-marked with the <:Sitemap> sub @@ -90,7 +95,7 @@ resolves in a single url, this will results in an error. } Adds the url with the given entry attributes (as defined by -L). +L). If the action does not resolves in a single url, this will results in an error. @@ -114,21 +119,18 @@ resolving to many urls. =back -=head1 BUGS AND LIMITATIONS - -Currently, each invocation of the method C will -re-generate the C object. A future version -of this module might offer a way to only compute the sitemap -once. - - =head1 SEE ALSO =over =item L -Module that C uses under the hood. +Module that C currently uses under the hood. + +=item L + +Original module that this plugin was using under the hood. + =item L @@ -153,12 +155,23 @@ no warnings qw/uninitialized/; use WWW::Sitemap::XML; use List::Util qw/ first /; -sub sitemap { +has sitemap => ( + is => 'ro', + builder => '_build_sitemap', + lazy => 1, +); + +sub sitemap_as_xml { + my $self = shift; + return $self->sitemap->as_xml->toString; +} + +sub _build_sitemap { my $self = shift; my $sitemap = WWW::Sitemap::XML->new; - for my $controller ( $self->controller(qr//) ) { + for my $controller ( map { $self->controller($_) } $self->controllers ) { ACTION: for my $a ( $controller->get_action_methods ) { @@ -185,6 +198,7 @@ sub sitemap { } if ( $attr[0] + 0 > 0 ) { + # it's a number $uri_params{priority} = $attr[0]; } @@ -196,9 +210,7 @@ sub sitemap { $uri_params{loc} = $self->uri_for_action( $action->private_path ); - $sitemap->add( \%uri_params ); - - next ACTION; + $sitemap->add(%uri_params); } } diff --git a/t/lib/TestApp/Controller/Root.pm b/t/lib/TestApp/Controller/Root.pm index 4852ee1..34aa0be 100644 --- a/t/lib/TestApp/Controller/Root.pm +++ b/t/lib/TestApp/Controller/Root.pm @@ -7,8 +7,15 @@ use parent 'Catalyst::Controller'; sub sitemap : Path('/sitemap') { my ( $self, $c ) = @_; + $c->res->body( $c->sitemap_as_xml ); +} + +sub dynamic :Path('/dynamic') { + my ( $self, $c ) = @_; + + $c->sitemap->add( "http://localhost/sumfin" ); #''.$c->uri_for( '/sumfin' ) ); - $c->res->body( $c->sitemap->as_xml->sprint ); + $c->res->body( 'dynamic it is' ); } sub alone :Local :Sitemap { } diff --git a/t/sitemap.t b/t/sitemap.t index 10f3efe..2780498 100644 --- a/t/sitemap.t +++ b/t/sitemap.t @@ -5,12 +5,11 @@ use warnings; use Test::More tests => 4; # last test to print use lib 't/lib'; - use Catalyst::Test 'TestApp'; -my $xml = request('/sitemap')->content; +my $xml = get('/sitemap'); -diag $xml; +note $xml; $xml =~ s/\s+//g; -- 2.45.2