summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-07-13 17:32:04 +0200
committerfranck cuny <franck@lumberjaph.net>2010-07-13 17:32:04 +0200
commit4df029ae7d7610dda343e8e665301b6e0f321f99 (patch)
treeb9cf4a5ef7349a7ea912b9c69c53fae03ac3defc
downloadnet-neo4j-4df029ae7d7610dda343e8e665301b6e0f321f99.tar.gz
initial import master
-rw-r--r--lib/Net/Neo4j.pm173
-rw-r--r--t/01_basic.t42
2 files changed, 215 insertions, 0 deletions
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;