package jitterbug::Project; use Dancer ':syntax'; use jitterbug::Plugin::Redis; use jitterbug::Plugin::Template; use DateTime; use XML::Feed; get '/:project' => sub { my $project = params->{project}; my $res = redis->get( key_project($project) ); send_error( "Project $project not found", 404 ) if !$res; my $desc = from_json($res); my @ids = redis->smembers( key_builds_project($project) ); my @builds; foreach my $id (@ids) { my $res = redis->get($id); push @builds, from_json($res) if $res; } @builds = sort {$b->{timestamp} cmp $a->{timestamp}} @builds; template 'project/index', { project => $project, builds => \@builds, %$desc }; }; get '/:project/feed' => sub { my $project = params->{project}; my @builds = reverse( redis->smembers( key_builds_project($project) ) ); my $feed = XML::Feed->new('Atom'); $feed->title('builds for '.$project); foreach (splice(@builds, 0, 5)) { my $res = redis->get($_); next unless $res; my $desc = from_json($res); foreach my $version (keys %{$desc->{version}}) { my $entry = XML::Feed::Entry->new(); $entry->link( request->base . 'api/build/' . $project . '/' . $desc->{commit} . '/' .$version ); $entry->title( "build for " . $desc->{commit} . ' on ' . $version ); $entry->summary( "Result: " . $desc->{version}->{$version} ); $feed->add_entry($entry); } } content_type('application/atom+xml'); $feed->as_xml; }; 1;