Index: trunk/BookmarkApp.pm
===================================================================
--- trunk/BookmarkApp.pm	(revision 36)
+++ trunk/BookmarkApp.pm	(revision 37)
@@ -12,15 +12,6 @@
 
 use URI;
-my $base_uri = URI->new;
-$base_uri->scheme('http');
-$base_uri->host($ENV{HTTP_X_FORWARDED_HOST} || $ENV{SERVER_NAME});
-$base_uri->port($ENV{SERVER_PORT});
-$base_uri->path($ENV{SCRIPT_NAME} . '/');
 
 my $dbname = 'fk.db';
-my $bookmarks = Bookmarks->new({
-    dbname   => $dbname,
-    base_uri => $base_uri,
-});
 
 sub setup {
@@ -34,5 +25,22 @@
         edit
     }]);
-}
+    my $base_uri = URI->new;
+    $base_uri->scheme('http');
+    $base_uri->host($ENV{HTTP_X_FORWARDED_HOST} || $ENV{SERVER_NAME});
+    $base_uri->port($ENV{SERVER_PORT});
+    $base_uri->path($ENV{SCRIPT_NAME} . '/');
+
+    my $bookmarks = Bookmarks->new({
+        dbname   => $dbname,
+        base_uri => $base_uri,
+    });
+
+    $self->param(
+        base_uri  => $base_uri,
+        bookmarks => $bookmarks,
+    );
+}
+
+sub _bookmarks { $_[0]->param('bookmarks') }
 
 sub list {
@@ -43,5 +51,5 @@
     # see if a bookmark for that URI already exists
     if (defined(my $uri = $q->param('uri'))) {
-        my $bookmark = $bookmarks->get_bookmark({ uri => $uri });
+        my $bookmark = $self->_bookmarks->get_bookmark({ uri => $uri });
         if ($bookmark) {
             # redirect to the view of the existing bookmark
@@ -73,11 +81,11 @@
     my $limit = $q->param('limit');
     my $offset = $q->param('offset');
-    my @resources = $bookmarks->get_bookmarks({
+    my @resources = $self->_bookmarks->get_bookmarks({
         tag    => \@tags,
         limit  => $limit,
         offset => $offset,
     });
-    my @all_tags = $bookmarks->get_tags({ selected => $tags[0] });
-    my @cotags = $bookmarks->get_cotags({ tag => \@tags });
+    my @all_tags = $self->_bookmarks->get_tags({ selected => $tags[0] });
+    my @cotags = $self->_bookmarks->get_cotags({ tag => \@tags });
     
     my $title = 'Bookmarks' . (@tags ? " tagged as " . join(' & ', @tags) : '');
@@ -185,5 +193,5 @@
         );
         for my $link (@links) {
-            $link->{href} = URI->new_abs($link->{path} || '', $base_uri);
+            $link->{href} = URI->new_abs($link->{path} || '', $self->param('base_uri'));
             $link->{href}->query_form($link->{query});
         }
@@ -222,5 +230,5 @@
     $feed->title($title);
 
-    my $feed_uri = URI->new_abs('feed', $base_uri);
+    my $feed_uri = URI->new_abs('feed', $self->param('base_uri'));
     $feed_uri->query_form(tag => \@tags);
     $feed->id($feed_uri->canonical);
@@ -235,5 +243,5 @@
     $html_link->type('text/html');
     $html_link->rel('alternate');
-    my $html_uri = $base_uri->clone;
+    my $html_uri = $self->param('base_uri')->clone;
     $html_uri->query_form(tag => \@tags);
     $html_link->href($html_uri->canonical);
@@ -241,5 +249,5 @@
 
     # construct a feed from the most recent 12 bookmarks
-    for my $bookmark ($bookmarks->get_bookmarks({ tag => \@tags, limit => 12 })) {
+    for my $bookmark ($self->_bookmarks->get_bookmarks({ tag => \@tags, limit => 12 })) {
         my $entry = XML::Atom::Entry->new;
         $entry->id($bookmark->bookmark_uri->canonical);
@@ -268,5 +276,5 @@
     my $format = $self->query->param('format') || 'html';
 
-    my $bookmark = $bookmarks->get_bookmark({ id => $id });
+    my $bookmark = $self->_bookmarks->get_bookmark({ id => $id });
     if ($bookmark) {
         if ($format eq 'json') {
@@ -305,5 +313,5 @@
     my $field = $self->param('field');
 
-    my $bookmark = $bookmarks->get_bookmark({ id => $id });
+    my $bookmark = $self->_bookmarks->get_bookmark({ id => $id });
     if ($bookmark) {
         # respond with just the requested field as plain text
@@ -345,5 +353,5 @@
     my $title = $q->param('title');
     my @tags = split ' ', $q->param('tags');
-    $bookmarks->add({
+    $self->_bookmarks->add({
         uri   => $uri,
         title => $title,
