MogileFS-REST

 view release on metacpan or  search on metacpan

lib/MogileFS/REST.pm  view on Meta::CPAN

}

sub delete {
    my ($app, $req) = @_;

    my ($domain, $key) = split_path($req->path);
    $app->info("deleting $domain:$key");
    my $client = $app->get_client($domain);
    my $rv = $client->delete($key);
    my $e = $client->errstr;
    return $app->respond_error($req, "Couldn't delete $domain/$key: $e")
        unless $rv;
    my $res = $req->new_response(HTTP_NO_CONTENT);
    return $res;
}

sub put {
    my ($app, $req) = @_;

    my ($domain, $key) = split_path($req->path);
    $app->info("creating $domain:$key");
    my $mogclass = $req->header('X-MogileFS-Class') || $app->{default_class};

    my $size = $req->content_length;
    my $opts = { bytes => $size, largefile => $app->{largefile} };
    my $data_handle = $req->input;
    my $client = $app->get_client($domain);
    my $rv = $client->store_file($key, $mogclass, $data_handle, $opts);
    if (defined $rv) {
        my $res = $req->new_response(HTTP_CREATED);
        $res->header( Location => $req->uri );
        return $res;
    }
    else {
        my $errstr = $client->errstr;
        my $err = "Can't save key '$domain/$key': $errstr";
        $app->error($err);
        return $app->respond_error($req, $err);
    }
}

sub respond_not_found {
    my ($app, $req) = @_;
    my $res = $req->new_response(HTTP_NOT_FOUND);
    $res->content_type('text/plain');
    $res->body('No such file');
    return $res;
}

sub respond_error {
    my ($app, $req, $error) = @_;
    my $res = $req->new_response(HTTP_INTERNAL_SERVER_ERROR);
    $res->content_type('text/plain');
    $res->body($error || "Server Error");
    return $res;
}

sub split_path {
    my $path = shift;
    $path =~ s{^/+}{};
    my ($domain, $key) = split m{/}, $path, 2;
    return ($domain, $key);
}

1;



( run in 1.096 second using v1.01-cache-2.11-cpan-71847e10f99 )