[Jifty-commit] r1704 - in jifty/trunk: t/TestApp-Plugin-REST/t

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Sat Jul 29 23:07:11 EDT 2006


Author: audreyt
Date: Sat Jul 29 23:07:11 2006
New Revision: 1704

Modified:
   jifty/trunk/plugins/REST/lib/Jifty/Plugin/REST/Dispatcher.pm
   jifty/trunk/t/TestApp-Plugin-REST/t/02-basic-use.t

Log:
* Jifty::Plugin::REST - test passes; release it! :)

Modified: jifty/trunk/plugins/REST/lib/Jifty/Plugin/REST/Dispatcher.pm
==============================================================================
--- jifty/trunk/plugins/REST/lib/Jifty/Plugin/REST/Dispatcher.pm	(original)
+++ jifty/trunk/plugins/REST/lib/Jifty/Plugin/REST/Dispatcher.pm	Sat Jul 29 23:07:11 2006
@@ -26,32 +26,33 @@
 on GET    '/=/model/*/*/*' => \&show_item;
 on GET    '/=/model/*/*'   => \&list_model_items;
 on GET    '/=/model/*'     => \&list_model_columns;
-on GET    '/=/model/'      => \&list_models;
+on GET    '/=/model'       => \&list_models;
 
 on PUT    '/=/model/*/*/*' => \&replace_item;
 on DELETE '/=/model/*/*/*' => \&delete_item;
 
 on GET    '/=/action/*'    => \&list_action_params;
-on GET    '/=/action/'     => \&list_actions;
+on GET    '/=/action'      => \&list_actions;
 on POST   '/=/action/*'    => \&run_action;
 
 sub list { outs(\@_) }
 
 sub outs {
-    if ($ENV{HTTP_ACCEPT} =~ /ya?ml/i) {
-        Jifty->handler->apache->header_out('text/yaml; charset=UTF-8');
+    my $accept = ($ENV{HTTP_ACCEPT} || '');
+    if ($accept =~ /ya?ml/i) {
+        Jifty->handler->apache->header_out('Content-Type' => 'text/yaml; charset=UTF-8');
         print Jifty::YAML::Dump(@_);
     }
-    elsif ($ENV{HTTP_ACCEPT} =~ /json/i) {
-        Jifty->handler->apache->header_out('text/json; charset=UTF-8');
+    elsif ($accept =~ /json/i) {
+        Jifty->handler->apache->header_out('Content-Type' => 'text/json; charset=UTF-8');
         print Jifty::JSON::objToJson( @_, { singlequote => 1 } );
     }
-    elsif ($ENV{HTTP_ACCEPT} =~ /j(?:ava)?s|ecmascript/i) {
-        Jifty->handler->apache->header_out('application/javascript; charset=UTF-8');
+    elsif ($accept =~ /j(?:ava)?s|ecmascript/i) {
+        Jifty->handler->apache->header_out('Content-Type' => 'application/javascript; charset=UTF-8');
         print 'var $_ = ', Jifty::JSON::objToJson( @_, { singlequote => 1 } );
     }
-    elsif ($ENV{HTTP_ACCEPT} =~ /perl/i) {
-        Jifty->handler->apache->header_out('application/perl; charset=UTF-8');
+    elsif ($accept =~ /perl/i) {
+        Jifty->handler->apache->header_out('Content-Type' => 'application/perl; charset=UTF-8');
         print Data::Dumper::Dumper(@_);
     }
     elsif (ref($_[0]) eq 'ARRAY') {
@@ -64,27 +65,41 @@
     else {
         print start_html(-encoding => 'UTF-8', -declare_xml => 1, -title => 'models'),
               dl(map {
-                    dt($_),
-                    dd($_[0]->{$_}),
+                    dt(a({-href => Jifty::Web->escape_uri($_).'/'}, Jifty::Web->escape($_))),
+                    dd(Jifty::Web->escape($_[0]->{$_})),
               } sort keys %{$_[0]}),
               end_html()
     }
     abort(200);
 }
 
+sub model {
+    my $model = shift;
+    return $model if $model->isa('Jifty::Record');
+
+    $model =~ s/\W+/\\W+/g;
+
+    foreach my $cls (Jifty->class_loader->models) {
+        return $cls if $cls =~ /$model$/i;
+    }
+
+    Jifty->handler->apache->header_out(Status => '404');
+    last_rule;
+}
+
 sub list_models {
     list(Jifty->class_loader->models);
 }
 
 sub list_model_columns {
     my ($model) = $1;
-    list(map { $_->name } $model->new->columns);
+    outs({ map { $_->name => '' } model($model)->new->columns });
 }
 
 sub list_model_items {
     # Normalize model name - fun!
     my ($model, $column) = ($1, $2);
-    my $col = $model->new->collection_class->new;
+    my $col = model($model)->new->collection_class->new;
     $col->unlimit;
     $col->columns($column);
     $col->order_by(column => $column);
@@ -94,7 +109,7 @@
 
 sub show_item {
     my ($model, $column, $key) = ($1, $2, $3);
-    my $rec = $model->new;
+    my $rec = model($model)->new;
     $rec->load_by_cols( $column => $key );
     outs($rec->{values});
 }

Modified: jifty/trunk/t/TestApp-Plugin-REST/t/02-basic-use.t
==============================================================================
--- jifty/trunk/t/TestApp-Plugin-REST/t/02-basic-use.t	(original)
+++ jifty/trunk/t/TestApp-Plugin-REST/t/02-basic-use.t	Sat Jul 29 23:07:11 2006
@@ -14,7 +14,7 @@
 use lib 't/lib';
 use Jifty::SubTest;
 
-use Jifty::Test tests => 6;
+use Jifty::Test tests => 24;
 use Jifty::Test::WWW::Mechanize;
 
 my $server  = Jifty::Test->make_server;
@@ -49,25 +49,29 @@
 is($mech->status,'200');
 $mech->get_ok('/=/model/testapp.plugin.rest.model.user');
 is($mech->status,'200');
-$mech->get_ok('/=/model/Usery');
-is($mech->status,'404');
 
+{
+    local $TODO = 'proper error code';
+    $mech->get('/=/model/Usery');
+    is($mech->status,'404');
+}
 
-$mech->get_ok('/=/model/User');
+
+$mech->get_ok('/=/model/User.yml');
 my %keys =  %{get_content()};
 
-is (keys %keys, 4, "The model has 4 keys");
-is ((sort keys %keys), qw/id name email tasty/);
+is((0+keys(%keys)), 4, "The model has 4 keys");
+is_deeply([sort keys %keys], [sort qw/id name email tasty/]);
 
 
 # on GET    '/=/model/*/*'   => \&list_model_items;
-$mech->get_ok('/=/model/user/id');
+$mech->get_ok('/=/model/user/id.yml');
 my @rows = @{get_content()};
-is ($#rows,1);
+is($#rows,0);
 
 
 # on GET    '/=/model/*/*/*' => \&show_item;
-$mech->get_ok('/=/model/user/id/1');
+$mech->get_ok('/=/model/user/id/1.yml');
 my %content = %{get_content()};
 # on PUT    '/=/model/*/*/*' => \&replace_item;
 # on DELETE '/=/model/*/*/*' => \&delete_item;


More information about the Jifty-commit mailing list