From 585ce5b679406ffe8644b23e3a267d7af8e3a5de Mon Sep 17 00:00:00 2001 From: franck cuny Date: Thu, 23 Sep 2010 22:09:36 +0200 Subject: initial import --- lib/jitterbug/Project.pm | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 lib/jitterbug/Project.pm (limited to 'lib/jitterbug/Project.pm') diff --git a/lib/jitterbug/Project.pm b/lib/jitterbug/Project.pm new file mode 100644 index 0000000..904ebf9 --- /dev/null +++ b/lib/jitterbug/Project.pm @@ -0,0 +1,57 @@ +package jitterbug::Project; + +BEGIN { + use Dancer ':syntax'; + load_plugin 'jitterbug::Plugin::Redis'; +}; + +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; + } + + 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->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; -- cgit 1.4.1