[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