error handling and tests therefore
[scpubgit/App-EzPz.git] / lib / App / EzPz / Web.pm
index 3b0f4a2..2463657 100644 (file)
@@ -52,29 +52,32 @@ sub dispatch_request {
   sub (/list/*/...) {
     my $list = $current_user->get_list($_[1]);
     return unless $list;
+    my $error;
     sub (/) {
-      $self->_list_dispatchers($list),
-      sub () { $self->_render_list_page($list) };
+      $self->_list_dispatchers($list, \$error),
+      sub () { $self->_render_list_page($list, $error) };
     },
     sub (/deny/|/allow/|/mod/|/digest/) {
       sub (/*/) {
         my $sublist = $list->${\$_[1]};
-        $self->_list_dispatchers($sublist),
-        sub () { $self->_render_sublist_page($sublist) };
+        $self->_list_dispatchers($sublist, \$error),
+        sub () { $self->_render_sublist_page($sublist, $error) };
       },
     },
   }
 }
 
 sub _list_dispatchers {
-  my ($self, $list) = @_;
+  my ($self, $list, $error_ref) = @_;
   sub (POST) {
     sub (%add=) {
-      $list->add_member($_[1]);
+      eval { $list->add_member($_[1]); 1 }
+        or ${$error_ref} = $@;
       return;
     },
     sub (%remove=) {
-      $list->remove_member($_[1]);
+      eval { $list->remove_member($_[1]); 1 }
+        or ${$error_ref} = $@;
       return;
     },
   }
@@ -114,25 +117,24 @@ sub _render_front_page {
 }
 
 sub _render_list_page {
-  my ($self, $list) = @_;
-  $self->_render_listcore_page(
-    $list, [
+  shift->_render_listcore_page(
+    @_, [
       map [ ucfirst($_)." list", "${_}/" ], qw(allow deny mod digest)
     ]
   );
 }
 
 sub _render_sublist_page {
-  my ($self, $list) = @_;
-  $self->_render_listcore_page(
-    $list, [ [ "Back to list", "../" ] ],
+  shift->_render_listcore_page(
+    @_, [ [ "Back to list", "../" ] ],
   );
 }
 
 sub _render_listcore_page {
-  my ($self, $list, $links) = @_;
+  my ($self, $list, $error, $links) = @_;
   $self->_render_page(list => sub {
     $_->replace_content('.list-name', $list->name)
+      ->replace_content('.error', $error||'')
       ->repeat('.list-link', [
           map {
             my ($name, $href) = @$_;