From 4df029ae7d7610dda343e8e665301b6e0f321f99 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Tue, 13 Jul 2010 17:32:04 +0200 Subject: initial import --- lib/Net/Neo4j.pm | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ t/01_basic.t | 42 ++++++++++++++ 2 files changed, 215 insertions(+) create mode 100644 lib/Net/Neo4j.pm create mode 100644 t/01_basic.t diff --git a/lib/Net/Neo4j.pm b/lib/Net/Neo4j.pm new file mode 100644 index 0000000..b615e09 --- /dev/null +++ b/lib/Net/Neo4j.pm @@ -0,0 +1,173 @@ +package Net::Neo4j; + +use MooseX::Net::API; + +net_api_declare neo4j => ( + api_format => 'json', + api_format_mode => 'content-type', +); + +net_api_method root => ( + method => 'GET', + path => '/', + expected => [qw/200/], +); + +net_api_method add_node => ( + method => 'POST', + path => '/node', + strict => 0, + expected => [qw/201/], +); + +net_api_method node => ( + method => 'GET', + path => '/node/:id', + params => [qw/id/], + required => [qw/id/], + expected => [qw/200 404/], +); + +net_api_method set_node_properties => ( + method => 'PUT', + path => '/node/:id/properties', + strict => 0, + params => [qw/id/], + required => [qw/id/], + expected => [qw/204 400 404/], +); + +net_api_method node_properties => ( + method => 'GET', + path => '/node/:id/properties', + params => [qw/id/], + required => [qw/id/], + expected => [qw/200 204 404/], +); + +net_api_method delete_node_properties => ( + method => 'DELETE', + path => '/node/:id/properties', + params => [qw/id/], + required => [qw/id/], + expected => [qw/204 404/], +); + +# XXX won't work with JSON... +net_api_method set_node_property => ( + method => 'PUT', + path => '/node/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/200 404/], +); + +net_api_method node_property => ( + method => 'GET', + path => '/node/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/200 404/], +); + +net_api_method delete_node_property => ( + method => 'DELETE', + path => '/node/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/204 404 /], +); + +net_api_method delete_node => ( + method => 'DELETE', + path => '/node/:id', + params => [qw/id/], + required => [qw/id/], + expected => [qw/204 404 409/], +); + +net_api_method add_edge => ( + method => 'POST', + path => '/node/:id/relationships', + params => [qw/id to data type/], + required => [qw/id to data type/], + expeced => [qw/201 400 404/], +); + +net_api_method set_edge_properties => ( + method => 'PUT', + path => '/relationship/:id/properties', + params => [qw/id/], + required => [qw/id/], + strict => 0, + expected => [qw/204 400 404/], +); + +net_api_method edge_properties => ( + method => 'GET', + path => '/relationship/:id/properties', + params => [qw/id/], + required => [qw/id/], + expected => [qw/200 204 404/], +); + +net_api_method delete_edge_properties => ( + method => 'DELETE', + path => '/relationship/:id/properties', + params => [qw/id/], + required => [qw/id/], + expected => [qw/204 404/], +); + +net_api_method set_edge_property => ( + method => 'PUT', + path => '/relationship/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/204 404 400/], +); + +net_api_method edge_property => ( + method => 'GET', + path => '/relationship/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/200 404/], +); + +net_api_method delete_edge_property => ( + method => 'DELETE', + path => '/relationship/:id/properties/:property', + params => [qw/id property/], + required => [qw/id property/], + expected => [qw/204 404/], +); + +net_api_method delete_edge => ( + method => 'DELETE', + path => '/relationship/:id', + params => [qw/id /], + required => [qw/id /], + expected => [qw/204 404/], +); + +net_api_method get_edges => ( + method => 'GET', + path => '/node/123/relationships/:dir/:types', + params => [qw/id dir types/], + required => [qw/id dir types/], + expected => [qw/200 404/], +); + +# XXX index methods + +net_api_method traverse => ( + method => 'POST', + path => '/node/:id/traverse/:returntype', + params => [qw/id returntype/], + required => [qw/id returntype/], + expected => [qw/200 404/], + strict => 0, +); + +1; diff --git a/t/01_basic.t b/t/01_basic.t new file mode 100644 index 0000000..ab96c98 --- /dev/null +++ b/t/01_basic.t @@ -0,0 +1,42 @@ +use strict; +use warnings; +use Net::Neo4j; +use Test::More; +use Try::Tiny; +use YAML; + +my $url = "http://localhost:9999"; + +my $graph = Net::Neo4j->new(api_base_url => $url); + +ok my $root = $graph->root; +is $root->{index}, 'http://localhost:9999/index'; + +my @nodes = (qw/franckcuny cmaussan ngrunwald niko foo/); + +foreach my $n (@nodes) { + ok my $res = $graph->add_node(name => $n); +} + +ok my $res = $graph->node(id => 1); + +$graph->set_node_properties(id => 1, profession => 'hacker', name => $nodes[0]); + +ok $res = $graph->node_properties(id => 1); +is_deeply $res, {name => $nodes[0], profession => 'hacker'}; + +$graph->delete_node_properties(id => 1); +$res = $graph->node_properties(id => 1); +is $res, undef; + +#$graph->set_node_property(id => 1, property => {name => $nodes[0]}); + +#$graph->delete_node(id => 5); + +try { + ok $graph->add_edge(id => 1, to => $url.'/node/2', data => {date => time()}, type => 'COWORKER'); +}catch{ + warn Dump $_->http_error; +}; + +done_testing; -- cgit 1.4.1