--- trunk/lib/Frey/CouchAPI.pm 2009/04/23 20:24:48 1053 +++ trunk/lib/Frey/CouchAPI.pm 2009/04/23 21:06:48 1054 @@ -60,9 +60,10 @@ sub ok { $json = { ok => JSON::true }; $status = 200; - warn "ok\n"; + warn "ok from ",join(' ',caller),$/; } +sub file_rev { (stat($_[0]))[9] } # mtime sub dispatch { my ($self,$tx) = @_; @@ -72,6 +73,7 @@ my $url = $tx->req->url->to_string; $url = uri_unescape( $url ); my $method = $tx->req->method; + my $path = $config->{path}; if ( $url eq '/' ) { $json = { @@ -125,7 +127,8 @@ =cut my $database = $1; - my $dir = "$config->{path}/$database"; + + my $dir = "$path/$database"; if ( $method eq 'GET' ) { $json = database_get( $database ); @@ -133,13 +136,24 @@ if ( ! -e $dir ) { $status = 404; } else { - remove_tree($dir) && ok || { $status = 500 }; + remove_tree($dir); + if ( ! -d $dir ) { + ok; + } else { + $status = 500; + } } } elsif ( $method eq 'PUT' ) { - if ( ! -e $dir ) { - make_path($dir) && ok && warn "created $dir" || { $status = 500 }; - } else { + if ( -e $dir ) { $status = 412; + } else { + make_path($dir); + if ( -e $path ) { + ok; + $status = 201; + } else { + $status = 500; + } } } @@ -161,7 +175,6 @@ } } - my $path = $config->{path}; warn "ERROR: path $path doesn't exist\n" unless -e $path; my $p = "$path/$database/$id"; @@ -222,7 +235,7 @@ id => $id, key => $id, value => { - rev => (stat($p))[9], # mtime + rev => file_rev $p, } }; } @@ -239,14 +252,21 @@ } elsif ( $method eq 'PUT' ) { - warn "## ",dump( $tx->req ) if $debug; + warn "## ",dump( $tx->req ); # if $debug; my $data = $tx->req->content->file->slurp; Storable::store( from_json($data), $p ); - warn "store $p ", -s $p, " bytes: $data\n"; + my $rev = file_rev $p; + warn "store $p $rev size ", -s $p, " bytes | $data\n"; + $status = 201; # Created - + $json = { + id => $id, + ok => JSON::true, + rev => $rev, + }; + } elsif ( $method eq 'GET' ) { if ( ! -e $p ) { $status = 404; @@ -256,7 +276,7 @@ } } elsif ( $method eq 'DELETE' ) { if ( -e $p ) { - unlink $p || { $status = 500 }; + unlink $p && ok || { $status = 500 }; } else { $status = 404; } @@ -281,7 +301,7 @@ $tx->res->headers->add_line( 'Cache-Control' => 'must-revalidate' ); $tx->res->headers->add_line( 'Server' => "Frey::CouchAPI/$VERSION" ); - warn "INFO CouchDB API $method $url $status\n$body\n"; + print "$method $url $status\n$body\n"; warn "## headers ", $tx->res->headers->to_string;