X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=lib%2FCatalyst%2FPlugin%2FSitemap.pm;h=e408855fc55dec89b45772b8a170bbfa32a9d8c4;hb=HEAD;hp=4730f200a6f8993a4a827fcc6f57b6be16c09366;hpb=d074ab5a56e8e690399d2a01691724fcaf4bc41f;p=chaz%2Fp5-Catalyst-Plugin-Sitemap diff --git a/lib/Catalyst/Plugin/Sitemap.pm b/lib/Catalyst/Plugin/Sitemap.pm index 4730f20..e408855 100644 --- a/lib/Catalyst/Plugin/Sitemap.pm +++ b/lib/Catalyst/Plugin/Sitemap.pm @@ -1,7 +1,8 @@ package Catalyst::Plugin::Sitemap; BEGIN { - $Catalyst::Plugin::Sitemap::VERSION = '0.0.1'; + $Catalyst::Plugin::Sitemap::VERSION = '1.0.0'; } + # ABSTRACT: Sitemap support for Catalyst. @@ -12,16 +13,30 @@ use Moose::Role; no warnings qw/uninitialized/; -use Search::Sitemap; +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 = Search::Sitemap->new; - $sitemap->pretty(1); + my $sitemap = WWW::Sitemap::XML->new; - for my $controller ( $self->controller(qr//) ) { + if ( $self->can('uri_disposition') ) { + $self->uri_disposition('absolute'); + } + + for my $controller ( map { $self->controller($_) } $self->controllers ) { ACTION: for my $a ( $controller->get_action_methods ) { @@ -48,6 +63,7 @@ sub sitemap { } if ( $attr[0] + 0 > 0 ) { + # it's a number $uri_params{priority} = $attr[0]; } @@ -57,11 +73,9 @@ sub sitemap { %uri_params = @attr; } - $uri_params{loc} = $self->uri_for_action( $action->private_path ); + $uri_params{loc} = ''.$self->uri_for_action( $action->private_path ); - $sitemap->add( \%uri_params ); - - next ACTION; + $sitemap->add(%uri_params); } } @@ -81,7 +95,7 @@ Catalyst::Plugin::Sitemap - Sitemap support for Catalyst. =head1 VERSION -version 0.0.1 +version 1.0.0 =head1 SYNOPSIS @@ -117,7 +131,7 @@ version 0.0.1 sub sitemap : Path('/sitemap') { my ( $self, $c ) = @_; - $c->res->body( $c->sitemap->xml ); + $c->res->body( $c->sitemap_as_xml ); } =head1 DESCRIPTION @@ -129,10 +143,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 @@ -170,7 +188,8 @@ resolves in a single url, this will results in an error. ... } -Adds the url with the given entry attributes (as defined by C). +Adds the url with the given entry attributes (as defined by +L). If the action does not resolves in a single url, this will results in an error. @@ -193,26 +212,32 @@ 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 currently uses under the hood. + =item L +Original module that this plugin was using under the hood. + +=item L + +Similar plugin for the L framework, which inspired +C. + =item http://babyl.dyndns.org/techblog/entry/catalyst-plugin-sitemap +Blog article introducing C. + =back =head1 AUTHOR - Yanick Champoux +Yanick Champoux =head1 COPYRIGHT AND LICENSE