diff options
-rw-r--r-- | lib/jitterbug.pm | 16 | ||||
-rw-r--r-- | lib/jitterbug/Plugin/Template.pm | 17 | ||||
-rw-r--r-- | lib/jitterbug/Project.pm | 11 | ||||
-rw-r--r-- | lib/jitterbug/Task.pm | 19 | ||||
-rw-r--r-- | lib/jitterbug/WebService.pm | 17 | ||||
-rw-r--r-- | public/css/style.css | 21 | ||||
-rw-r--r-- | views/index.tt | 11 | ||||
-rw-r--r-- | views/layouts/main.tt | 10 | ||||
-rw-r--r-- | views/project/index.tt | 42 | ||||
-rw-r--r-- | views/task/index.tt | 1 |
10 files changed, 124 insertions, 41 deletions
diff --git a/lib/jitterbug.pm b/lib/jitterbug.pm index 7b3b163..8110def 100644 --- a/lib/jitterbug.pm +++ b/lib/jitterbug.pm @@ -1,24 +1,20 @@ package jitterbug; -#BEGIN { - use Dancer ':syntax'; - use jitterbug::Plugin::Redis; -#}; +use Dancer ':syntax'; +use jitterbug::Plugin::Redis; +use jitterbug::Plugin::Template; our $VERSION = '0.1'; load_app 'jitterbug::Hook', prefix => '/hook'; load_app 'jitterbug::Project', prefix => '/project'; load_app 'jitterbug::WebService', prefix => '/api'; - -before_template sub { - my $tokens = shift; - $tokens->{uri_base} = request->base; -}; +load_app 'jitterbug::Task', prefix => '/task'; get '/' => sub { my @projects = redis->smembers(key_projects); - template 'index', {projects => \@projects}; + my @builds = redis->smembers(key_tasks); + template 'index', {projects => \@projects, builds => \@builds}; }; true; diff --git a/lib/jitterbug/Plugin/Template.pm b/lib/jitterbug/Plugin/Template.pm new file mode 100644 index 0000000..d42d70e --- /dev/null +++ b/lib/jitterbug/Plugin/Template.pm @@ -0,0 +1,17 @@ +package jitterbug::Plugin::Template; + +use Dancer ':syntax'; +use Dancer::Plugin; + +add_hook( + 'before_template', + sub { + my $tokens = shift; + $tokens->{uri_base} = request->base; + print "on a " . $tokens->{uri_base} . "\n"; + } +); + +register_plugin; + +1; diff --git a/lib/jitterbug/Project.pm b/lib/jitterbug/Project.pm index b330635..be62921 100644 --- a/lib/jitterbug/Project.pm +++ b/lib/jitterbug/Project.pm @@ -2,6 +2,7 @@ package jitterbug::Project; use Dancer ':syntax'; use jitterbug::Plugin::Redis; +use jitterbug::Plugin::Template; use DateTime; use XML::Feed; @@ -42,9 +43,15 @@ get '/:project/feed' => sub { 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}); + $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); + } } diff --git a/lib/jitterbug/Task.pm b/lib/jitterbug/Task.pm new file mode 100644 index 0000000..bef99bc --- /dev/null +++ b/lib/jitterbug/Task.pm @@ -0,0 +1,19 @@ +package jitterbug::Task; + +use Dancer ':syntax'; +use jitterbug::Plugin::Redis; +use jitterbug::Plugin::Template; + +get '/:task_id' => sub { + my $task_id = params->{task_id}; + + my $task = redis->get($task_id); + + if (!$task) { + render_error("task doesn't exists", 404); + } + + template 'task/index', {task => from_json($task)}; +}; + +1; diff --git a/lib/jitterbug/WebService.pm b/lib/jitterbug/WebService.pm index 62f55c0..c8be8fd 100644 --- a/lib/jitterbug/WebService.pm +++ b/lib/jitterbug/WebService.pm @@ -21,11 +21,18 @@ get '/build/:project/:commit/:version' => sub { open my $fh, '<', $file; my @content = <$fh>; close $fh; - { - commit => $commit, - version => $version, - content => join( '', @content ), - }; + + if ( request->accept =~ m!application/json! ) { + return { + commit => $commit, + version => $version, + content => join( '', @content ), + }; + } + else { + content_type 'text/plain'; + return join( '', @content ); + } } }; diff --git a/public/css/style.css b/public/css/style.css index b4ae038..d035f0e 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -32,3 +32,24 @@ pre { font-family: \"lucida console\",\"monaco\",\"andale mono\",\"bitstream vera sans mono\",\"consolas\",monospace; } +.commits{ + border:1px solid #bedce7; + margin-top:.5em; + padding:0 .5em .5em .5em; + background:#eaf2f5; + overflow:hidden; +} + +#display_test_result { + background: black; + color: white; +} + +.commits .description { + float: left; +} + +.commits .git { + float: right; +} + diff --git a/views/index.tt b/views/index.tt index 7b44ac5..6a79821 100644 --- a/views/index.tt +++ b/views/index.tt @@ -1,4 +1,6 @@ -<h2>Projects</h2> +<h2>Dashboard</h2> + +<h3>Projects</h3> <ul> : for $projects -> $project { @@ -6,3 +8,10 @@ : } </ul> +<h3>Builds pending</h3> + +<ul> + : for $builds -> $build { + <li><a href="<: $uri_base :>task/<: $build :>"><: $build :></a></li> + : } +</ul> diff --git a/views/layouts/main.tt b/views/layouts/main.tt index bad65ab..9b97dbf 100644 --- a/views/layouts/main.tt +++ b/views/layouts/main.tt @@ -8,15 +8,11 @@ <script type="text/javascript"> $(document).ready(function() { $('.commits a').click(function() { - var url = '/api/build/' - + $(this).parent("li").parent("ul").attr('id') - + '/' - + $(this).parent("li").attr('id') - + '/' - + $(this).text().toLowerCase(); + var url = $(this).attr("href"); $.getJSON(url, null, function(data) { - $("#display_test_result").html("<pre>" + data.content + "<pre>") + $("#display_test_result").html("<pre>" + data.content + "<pre>"); }); + return false; })}) </script> </head> diff --git a/views/project/index.tt b/views/project/index.tt index 813907b..7f1aeb6 100644 --- a/views/project/index.tt +++ b/views/project/index.tt @@ -1,24 +1,34 @@ <h2><: $project :></h2> -<ul> - <li>url: <: $url :></li> - <li>description: <: $description :></li> - <li><a href="<: $base_uri :>/project/<: $project :>/feed">feed</a></li> -</ul> +<small>"<: $description :>"</small> — <a href="<: $url :>">view more</a>. <h3>Builds</h3> -<ul class="commits" id="<: $project :>"> - :for $builds -> $build { - <li id="<: $build.commit :>"> - Commit <: $build.commit :> (<: $build.date.ymd :>)<br /> - author: <: $build.author.name :> - <a href="<: $build.compare :>">compare</a><br /> - :for $build.version.keys() -> $version { - <a href="#"><: $version :></a>=<: $build.version[$version] :> - :} - </li> - :} -</ul> +<a href="<: $base_uri :>/project/<: $project :>/feed">feed</a> + +<div class="commits"> +:for $builds -> $build { + <div class="commit" id="<: $build.commit :>"> + <div class="description"> + <div class="message"><pre><: $build.message :></pre></div> + <div class="name"><: $build.author.name :></div> + <div class="date"><: $build.timestamp :></div> + <div class="builds"> + :for $build.version.keys() -> $version { + <a href="<: $uri_base :>/api/build/<: $project :>/<: $build.commit :>/<: $version :>"><: $version :></a> <: $build.version[$version] :> + :} + </div> + </div> + <div class="git"> + <ul> + <li>commit <a href="<: $build.url :>"><: $build.commit :></a></li> + <li><a href="<: $build.compare :>">compare</a></li> + </ul> + </div> + </div> +:} +</div> <div id="display_test_result"> </div> + diff --git a/views/task/index.tt b/views/task/index.tt new file mode 100644 index 0000000..bb08935 --- /dev/null +++ b/views/task/index.tt @@ -0,0 +1 @@ +<h2>Task </h2> |