about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/jitterbug.pm16
-rw-r--r--lib/jitterbug/Plugin/Template.pm17
-rw-r--r--lib/jitterbug/Project.pm11
-rw-r--r--lib/jitterbug/Task.pm19
-rw-r--r--lib/jitterbug/WebService.pm17
-rw-r--r--public/css/style.css21
-rw-r--r--views/index.tt11
-rw-r--r--views/layouts/main.tt10
-rw-r--r--views/project/index.tt42
-rw-r--r--views/task/index.tt1
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> &mdash; <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&nbsp;&nbsp;<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>