From: Tomas Doran Date: Mon, 18 Jan 2010 20:22:34 +0000 (+0000) Subject: Move OPML code out of the root controller X-Git-Tag: 0.000006_01~1^2~71 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=12a0f9d30e501278244732292572ccb0967b194c;p=catagits%2FGitalist.git Move OPML code out of the root controller --- diff --git a/lib/Gitalist/Controller/OPML.pm b/lib/Gitalist/Controller/OPML.pm new file mode 100644 index 0000000..62dcc81 --- /dev/null +++ b/lib/Gitalist/Controller/OPML.pm @@ -0,0 +1,31 @@ +package Gitalist::Controller::OPML; + +use Moose; +use Moose::Autobox; + +use Sys::Hostname qw/hostname/; +use XML::OPML::SimpleGen; + +use namespace::autoclean; + +BEGIN { extends 'Gitalist::Controller' } + +sub opml : Chained('base') Args(0) { + my ($self, $c) = @_; + + my $opml = XML::OPML::SimpleGen->new(); + + $opml->head(title => lc(hostname()) . ' - ' . blessed($c)->config->{name}); + + for my $repos ( $c->model()->repositories->flatten ) { + $opml->insert_outline( + text => $repos->name. ' - '. $repos->description, + xmlUrl => $c->uri_for_action('/repository/rss', [$repos->name]), + ); + } + + $c->response->body($opml->as_string); + $c->response->content_type('application/rss'); +} + +__PACKAGE__->meta->make_immutable; diff --git a/lib/Gitalist/Controller/Root.pm b/lib/Gitalist/Controller/Root.pm index 25e5667..d4190c0 100644 --- a/lib/Gitalist/Controller/Root.pm +++ b/lib/Gitalist/Controller/Root.pm @@ -2,8 +2,6 @@ package Gitalist::Controller::Root; use Moose; use Moose::Autobox; -use Sys::Hostname qw/hostname/; -use XML::OPML::SimpleGen; use Gitalist::Utils qw/ age_string /; @@ -11,49 +9,13 @@ use namespace::autoclean; BEGIN { extends 'Gitalist::Controller' } -__PACKAGE__->config->{namespace} = ''; +__PACKAGE__->config(namespace => ''); sub root : Chained('/') PathPart('') CaptureArgs(0) {} sub index : Chained('base') PathPart('') Args(0) { - my ( $self, $c ) = @_; - - my $search = $c->req->param('s') || ''; - - $c->stash( - search_text => $search, - ); -} - -=head2 search_help - -Provides some help for the search form. - -=cut - -sub search_help : Chained('base') Args(0) {} - -sub opml : Chained('base') Args(0) { - my($self, $c) = @_; - - my $opml = XML::OPML::SimpleGen->new(); - - $opml->head(title => lc(hostname()) . ' - ' . Gitalist->config->{name}); - - my @list = @{ $c->model()->repositories }; - die 'No repositories found in '. $c->model->repo_dir - unless @list; - - for my $proj ( @list ) { - $opml->insert_outline( - text => $proj->name. ' - '. $proj->description, - xmlUrl => $c->uri_for(rss => {p => $proj->name}), - ); - } - - $c->response->body($opml->as_string); - $c->response->content_type('application/rss'); - $c->response->status(200); + my ( $self, $c ) = @_; + $c->stash( search_text => $c->req->param('s') || '' ) # FIXME - XSS? } sub base : Chained('/root') PathPart('') CaptureArgs(0) { @@ -65,7 +27,6 @@ sub base : Chained('/root') PathPart('') CaptureArgs(0) { git_version => $git_version, version => $Gitalist::VERSION, - # XXX Move these to a plugin! time_since => sub { return 'never' unless $_[0]; return age_string(time - $_[0]->epoch); @@ -82,13 +43,15 @@ sub base : Chained('/root') PathPart('') CaptureArgs(0) { ); } -sub end : ActionClass('RenderView') { - my ($self, $c) = @_; - # Give repository views the current HEAD. - if ($c->stash->{Repository}) { - $c->stash->{HEAD} = $c->stash->{Repository}->head_hash; - } -} +=head2 search_help + +Provides some help for the search form. + +=cut + +sub search_help : Chained('base') Args(0) {} + +sub end : ActionClass('RenderView') {} sub error_404 : Action { my ($self, $c) = @_; @@ -126,16 +89,8 @@ Provides the repository listing. Attempt to render a view, if needed. -=head2 blame - =head2 error_404 -=head2 history - -=head2 opml - -=head2 repository_index - =head1 AUTHORS See L for authors. diff --git a/lib/Gitalist/URIStructure/Repository.pm b/lib/Gitalist/URIStructure/Repository.pm index 8673560..9d7a0e3 100644 --- a/lib/Gitalist/URIStructure/Repository.pm +++ b/lib/Gitalist/URIStructure/Repository.pm @@ -11,11 +11,15 @@ after 'base' => sub { }; sub find : Chained('base') PathPart('') CaptureArgs(1) { - my ($self, $c, $repository) = @_; + my ($self, $c, $repos_name) = @_; # XXX FIXME - This should be in the repository fragment controller, and the repository # controller should just check has_repository try { - $c->stash(Repository => $c->model()->get_repository($repository)); + my $repos = $c->model()->get_repository($repos_name); + $c->stash( + Repository => $repos, + HEAD => $repos->head_hash, + ); } catch { $c->detach('/error_404'); diff --git a/root/_header_feeds.tt2 b/root/_header_feeds.tt2 index e0b83ec..1fbcfaa 100644 --- a/root/_header_feeds.tt2 +++ b/root/_header_feeds.tt2 @@ -3,13 +3,13 @@ [% ELSE %] @@ -22,7 +22,7 @@ [% END %]