neo_rest 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@neorest
data/GemFile ADDED
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'json', '1.5.1'
4
+ gem "rest-client", '1.6.1'
5
+
6
+ group :test, :development do
7
+ gem "rspec"
8
+ gem "bundler"
9
+ gem "watchr"
10
+ end
11
+
data/Gemfile.lock ADDED
@@ -0,0 +1,27 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ json (1.5.1)
6
+ mime-types (1.16)
7
+ rest-client (1.6.1)
8
+ mime-types (>= 1.16)
9
+ rspec (2.6.0)
10
+ rspec-core (~> 2.6.0)
11
+ rspec-expectations (~> 2.6.0)
12
+ rspec-mocks (~> 2.6.0)
13
+ rspec-core (2.6.3)
14
+ rspec-expectations (2.6.0)
15
+ diff-lcs (~> 1.1.2)
16
+ rspec-mocks (2.6.0)
17
+ watchr (0.7)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ bundler
24
+ json (= 1.5.1)
25
+ rest-client (= 1.6.1)
26
+ rspec
27
+ watchr
data/LICENCE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Cre8iveThough.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/RakeFile.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "neo_rest"
8
+ gem.summary = %Q{a rest wrapper for the Neo4j rest API}
9
+ gem.description = %Q{a rest wrapper for the Neo4j rest API}
10
+ gem.email = "mark.nijhof@cre8ivethought.com"
11
+ gem.homepage = "http://github.com/MarkNijhof/NeoRest"
12
+ gem.authors = ["Mark Nijhof"]
13
+ gem.add_development_dependency "rspec", '2.6.0'
14
+ gem.add_dependency "json", '1.5.1'
15
+ gem.add_dependency "rest-client", '1.6.1'
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ task :test => [:set_test_environment] do
23
+ sh "bundle exec watchr"
24
+ end
25
+
26
+ task :neo_stop do
27
+ sh "~/neo4j-server-dev/bin/neo4j stop"
28
+ sh "~/neo4j-server/bin/neo4j stop"
29
+ end
30
+
31
+ task :neo_start do
32
+ sh "~/neo4j-server-dev/bin/neo4j start"
33
+ sh "~/neo4j-server/bin/neo4j start"
34
+ end
35
+
36
+ task :set_test_environment do
37
+ ENV['AUTOFEATURE'] = "true"
38
+ ENV['RSPEC'] = "true"
39
+
40
+ ENV['NEO4J_HOST'] = 'localhost'
41
+ ENV['NEO4J_PORT'] = '7474'
42
+ end
43
+
44
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1,13 @@
1
+
2
+ module NeoRest
3
+
4
+ class Config
5
+ class << self
6
+ def init host = 'localhost', port = 7474
7
+ $neo_host = host
8
+ $neo_port = port
9
+ $neo_base_url = "http://#{$neo_host}:#{$neo_port}/db/data"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,41 @@
1
+ require 'uri'
2
+ require 'json'
3
+ require 'rest-client'
4
+ require 'ostruct'
5
+
6
+ module NeoRest
7
+
8
+ class Index < OpenStruct
9
+
10
+ attr_reader :index_name, :key, :value
11
+
12
+ def initialize( index_name, key, value )
13
+ @index_name = index_name
14
+ @key = key
15
+ @value = value
16
+ end
17
+
18
+ def remove node
19
+ node = node.neo_id if node.respond_to?('neo_id')
20
+ RestClient.delete( "#{$neo_base_url}/index/node/#{index_name}/#{key}/#{URI.escape(value)}/#{node}" )
21
+ end
22
+
23
+ def get_nodes
24
+ NeoRest::Index.get_nodes index_name, key, value
25
+ end
26
+
27
+ class << self
28
+
29
+ def get_nodes index_name, key, value
30
+ nodes_json = JSON.parse( RestClient.get( "#{$neo_base_url}/index/node/#{index_name}/#{key}/#{URI.escape(value)}", :accept => :json ) )
31
+ nodes = []
32
+ nodes_json.each { | node | nodes << NeoRest::Node.new( node ) }
33
+ return nodes unless block_given?
34
+ nodes.each { | node | yield node }
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,91 @@
1
+ require 'uri'
2
+ require 'json'
3
+ require 'rest-client'
4
+ require 'ostruct'
5
+
6
+ module NeoRest
7
+
8
+ class Node < OpenStruct
9
+
10
+ attr_reader :neo_id, :neo_url
11
+
12
+ def initialize( hash = nil )
13
+ @table = {}
14
+ if hash
15
+ @neo_id = hash["self"].split('/').last
16
+ @neo_url = hash["self"]
17
+
18
+ for key, value in hash["data"]
19
+ @table[key.to_sym] = value
20
+ new_ostruct_member(key)
21
+ end
22
+ end
23
+ end
24
+
25
+ def update properties = {}
26
+ if not properties.empty?
27
+ @table.each { | key, value | delete_field( key ) }
28
+ @table.clear
29
+
30
+ for key, value in properties
31
+ @table[key.to_sym] = value
32
+ new_ostruct_member(key)
33
+ end
34
+ end
35
+
36
+ RestClient.put( "#{$neo_base_url}/node/#{neo_id}/properties", @table.to_json, :content_type => :json, :accept => :json )
37
+ end
38
+
39
+ def delete
40
+ NeoRest::Node.delete neo_id
41
+ end
42
+
43
+ def get_relationships direction = :all
44
+ relationsships_json = JSON.parse( RestClient.get( "#{$neo_base_url}/node/#{neo_id}/relationships/#{direction}", :accept => :json ) )
45
+ relationsships = []
46
+ relationsships_json.each { | relationship | relationsships << NeoRest::Relationship.new( relationship ) }
47
+ return relationsships unless block_given?
48
+ relationsships.each { | relationship | yield relationship }
49
+ end
50
+
51
+ def add_relationship_to node, type, meta_data = {}
52
+ NeoRest::Relationship.new( JSON.parse( RestClient.post( "#{$neo_base_url}/node/#{neo_id}/relationships", { :to => "#{$base}/node/#{node.neo_id}", :type => type, :data => meta_data }.to_json, :content_type => :json, :accept => :json ) ) )
53
+ end
54
+
55
+ def add_relationship_from node, type, meta_data = {}
56
+ NeoRest::Relationship.new( JSON.parse( RestClient.post( "#{$neo_base_url}/node/#{node.neo_id}/relationships", { :to => "#{$base}/node/#{neo_id}", :type => type, :data => meta_data }.to_json, :content_type => :json, :accept => :json ) ) )
57
+ end
58
+
59
+ def add_to_index index_name, key, value
60
+ RestClient.post( "#{$neo_base_url}/index/node/#{index_name}/#{key}/#{URI.escape(value)}", ("#{$base}/node/#{neo_id}").to_json, :content_type => :json, :accept => :json )
61
+ NeoRest::Index.new index_name, key, value
62
+ end
63
+
64
+ class << self
65
+
66
+ def create_new node_data
67
+ NeoRest::Node.new( JSON.parse( RestClient.post( "#{$neo_base_url}/node", node_data.to_json, :content_type => :json, :accept => :json ) ) )
68
+ end
69
+
70
+ def load node_id
71
+ RestClient.get( "#{$neo_base_url}/node/#{node_id}", :accept => :json ){ |response, request, result, &block|
72
+ case response.code
73
+ when 200
74
+ NeoRest::Node.new( JSON.parse( response ) )
75
+ when 404
76
+ return nil
77
+ else
78
+ response.return!(request, result, &block)
79
+ end
80
+ }
81
+ end
82
+
83
+ def delete node
84
+ node = node.neo_id if node.respond_to?('neo_id')
85
+ RestClient.delete( "#{$neo_base_url}/node/#{node}" )
86
+ end
87
+
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,67 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+ require 'ostruct'
4
+
5
+ module NeoRest
6
+
7
+ class Relationship < OpenStruct
8
+
9
+ attr_reader :neo_id, :neo_url, :start_id, :end_id, :type
10
+
11
+ def initialize( hash = nil )
12
+ @table = {}
13
+ if hash
14
+ @neo_id = hash["self"].split('/').last
15
+ @neo_url = hash["self"]
16
+ @start_id = hash["start"].split('/').last
17
+ @end_id = hash["end"].split('/').last
18
+ @type = hash["type"]
19
+
20
+ for key, value in hash["data"]
21
+ @table[key.to_sym] = value
22
+ new_ostruct_member(key)
23
+ end
24
+ end
25
+ end
26
+
27
+ def update properties = {}
28
+ if not properties.empty?
29
+ @table.each { | key, value | delete_field( key ) }
30
+ @table.clear
31
+
32
+ for key, value in properties
33
+ @table[key.to_sym] = value
34
+ new_ostruct_member(key)
35
+ end
36
+ end
37
+
38
+ RestClient.put( "#{$neo_base_url}/relationship/#{neo_id}/properties", @table.to_json, :content_type => :json, :accept => :json )
39
+ end
40
+
41
+ def delete
42
+ NeoRest::Relationship.delete neo_id
43
+ end
44
+
45
+ class << self
46
+
47
+ def load relationship_id
48
+ RestClient.get( "#{$neo_base_url}/relationship/#{relationship_id}", :accept => :json ){ |response, request, result, &block|
49
+ case response.code
50
+ when 200
51
+ NeoRest::Node.new( JSON.parse( response ) )
52
+ when 404
53
+ return nil
54
+ else
55
+ response.return!(request, result, &block)
56
+ end
57
+ }
58
+ end
59
+
60
+ def delete relationship_id
61
+ RestClient.delete( "#{$neo_base_url}/relationship/#{relationship_id}" )
62
+ end
63
+
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,15 @@
1
+
2
+ module NeoRest
3
+
4
+ class TestHelper
5
+
6
+ class << self
7
+
8
+ def clean_the_whole_database delete_key
9
+ # this needs the following plugin installed in the Neo server: https://github.com/jexp/neo4j-clean-remote-db-addon
10
+ RestClient.delete( "http://#{$neo_host}:#{$neo_port}/cleandb/#{delete_key}" )
11
+ end
12
+
13
+ end
14
+ end
15
+ end
data/lib/neo_rest.rb ADDED
@@ -0,0 +1,6 @@
1
+
2
+ require 'NeoRest/config'
3
+ require 'NeoRest/node'
4
+ require 'NeoRest/relationship'
5
+ require 'NeoRest/index'
6
+ require 'NeoRest/test_helper'
@@ -0,0 +1,68 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ describe "NeoRest::Index" do
5
+
6
+ describe "get_nodes", :neo4j => true do
7
+
8
+ it "will get all the nodes from an index" do
9
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
10
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
11
+
12
+ new_node_1.add_to_index :friends, :name, 'node name 1'
13
+ new_node_2.add_to_index :friends, :name, 'node name 1'
14
+
15
+ nodes = NeoRest::Index.get_nodes :friends, :name, 'node name 1'
16
+ nodes.count.should == 2
17
+ nodes[0].neo_id.should == new_node_1.neo_id
18
+ nodes[1].neo_id.should == new_node_2.neo_id
19
+ end
20
+
21
+ it "will get all the nodes from an index" do
22
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
23
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
24
+
25
+ index = new_node_1.add_to_index :friends, :name, 'node name 1'
26
+ new_node_2.add_to_index :friends, :name, 'node name 1'
27
+
28
+ nodes = index.get_nodes
29
+ nodes.count.should == 2
30
+ nodes[0].neo_id.should == new_node_1.neo_id
31
+ nodes[1].neo_id.should == new_node_2.neo_id
32
+ end
33
+
34
+ end
35
+
36
+ describe "delete", :neo4j => true do
37
+
38
+ it "will remove a node from the index using neo_id" do
39
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
40
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
41
+
42
+ index = new_node_1.add_to_index :friends, :name, 'node name 1'
43
+ new_node_2.add_to_index :friends, :name, 'node name 1'
44
+
45
+ index.remove new_node_1.neo_id
46
+
47
+ nodes = NeoRest::Index.get_nodes :friends, :name, 'node name 1'
48
+ nodes.count.should == 1
49
+ nodes[0].neo_id.should == new_node_2.neo_id
50
+ end
51
+
52
+ it "will remove a node from the index using node" do
53
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
54
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
55
+
56
+ index = new_node_1.add_to_index :friends, :name, 'node name 1'
57
+ new_node_2.add_to_index :friends, :name, 'node name 1'
58
+
59
+ index.remove new_node_1
60
+
61
+ nodes = NeoRest::Index.get_nodes :friends, :name, 'node name 1'
62
+ nodes.count.should == 1
63
+ nodes[0].neo_id.should == new_node_2.neo_id
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,192 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ describe "NeoRest::Node" do
5
+
6
+ describe "create_new", :neo4j => true do
7
+
8
+ it "will create a new node" do
9
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
10
+ new_node.name.should == 'node name'
11
+ new_node.other_property.should == 'property value'
12
+ end
13
+
14
+ end
15
+
16
+ describe "load", :neo4j => true do
17
+
18
+ it "will load an existing node" do
19
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
20
+
21
+ existing_node = NeoRest::Node.load( new_node.neo_id )
22
+ existing_node.name.should == 'node name'
23
+ existing_node.other_property.should == 'property value'
24
+ end
25
+
26
+ end
27
+
28
+ describe "add_to_index", :neo4j => true do
29
+
30
+ it "will add the node to an index" do
31
+ new_node = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
32
+
33
+ new_node.add_to_index :friends, :name, 'node name 1'
34
+
35
+ nodes = NeoRest::Index.get_nodes :friends, :name, 'node name 1'
36
+ nodes.count.should == 1
37
+ nodes[0].neo_id.should == new_node.neo_id
38
+ end
39
+
40
+ end
41
+
42
+ describe "add_relationship_to", :neo4j => true do
43
+
44
+ it "will add a relationships to a node" do
45
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
46
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
47
+
48
+ relationship = new_node_1.add_relationship_to new_node_2, :knows
49
+ relationship.start_id.should == new_node_1.neo_id
50
+ relationship.end_id.should == new_node_2.neo_id
51
+ relationship.type.should == "knows"
52
+ end
53
+
54
+ it "will add a relationships with meta data to a node" do
55
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
56
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
57
+
58
+ relationship = new_node_1.add_relationship_to new_node_2, :knows, {:name => 'relation one', :description => 'description one'}
59
+ relationship.name.should == "relation one"
60
+ relationship.description.should == "description one"
61
+ end
62
+
63
+ end
64
+
65
+ describe "add_relationship_from", :neo4j => true do
66
+
67
+ it "will add a relationships from a node" do
68
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
69
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
70
+
71
+ relationship = new_node_1.add_relationship_from new_node_2, :knows
72
+ relationship.start_id.should == new_node_2.neo_id
73
+ relationship.end_id.should == new_node_1.neo_id
74
+ relationship.type.should == "knows"
75
+ end
76
+
77
+ it "will add a relationships with meta data from a node" do
78
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
79
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
80
+
81
+ relationship = new_node_1.add_relationship_from new_node_2, :knows, {:name => 'relation one', :description => 'description one'}
82
+ relationship.name.should == "relation one"
83
+ relationship.description.should == "description one"
84
+ end
85
+
86
+ end
87
+
88
+ describe "get_relationships", :neo4j => true do
89
+
90
+ it "will load all existing relations of a node" do
91
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
92
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
93
+
94
+ new_node_1.add_relationship_to new_node_2, :knows
95
+ new_node_1.add_relationship_to new_node_2, :knows, {:name => 'relation one', :description => 'description one'}
96
+
97
+ relationships = new_node_1.get_relationships
98
+ relationships.count.should == 2
99
+ relationships[1].name.should == 'relation one'
100
+ end
101
+
102
+ it "will load all existing relations going out the node" do
103
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
104
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
105
+
106
+ new_node_1.add_relationship_to new_node_2, :knows
107
+ new_node_1.add_relationship_to new_node_2, :knows, {:name => 'relation one', :description => 'description one'}
108
+ new_node_1.add_relationship_from new_node_2, :knows, {:name => 'relation two', :description => 'description two'}
109
+
110
+ relationships = new_node_1.get_relationships :out
111
+ relationships.count.should == 2
112
+ relationships[1].name.should == 'relation one'
113
+ end
114
+
115
+ it "will load all existing relations going out the node" do
116
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
117
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
118
+
119
+ new_node_1.add_relationship_to new_node_2, :knows
120
+ new_node_1.add_relationship_to new_node_2, :knows, {:name => 'relation one', :description => 'description one'}
121
+ new_node_1.add_relationship_from new_node_2, :knows, {:name => 'relation two', :description => 'description two'}
122
+
123
+ relationships = new_node_1.get_relationships :in
124
+ relationships.count.should == 1
125
+ relationships[0].name.should == 'relation two'
126
+ end
127
+
128
+ end
129
+
130
+ describe "update", :neo4j => true do
131
+
132
+ it "will update an existing node" do
133
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
134
+
135
+ new_node.name = 'new node name'
136
+ new_node.other_property = 'new property value'
137
+ new_node.update
138
+
139
+ existing_node = NeoRest::Node.load( new_node.neo_id )
140
+ existing_node.name.should == 'new node name'
141
+ existing_node.other_property.should == 'new property value'
142
+ end
143
+
144
+ it "will update an existing node with a hash" do
145
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
146
+
147
+ new_node.update( {:name => 'new node name', :other_property => 'new property value', :new_property => 'value'} )
148
+
149
+ new_node.name.should == 'new node name'
150
+ new_node.other_property.should == 'new property value'
151
+ new_node.new_property.should == 'value'
152
+
153
+ existing_node = NeoRest::Node.load( new_node.neo_id )
154
+ existing_node.name.should == 'new node name'
155
+ existing_node.other_property.should == 'new property value'
156
+ existing_node.new_property.should == 'value'
157
+ end
158
+
159
+ end
160
+
161
+ describe "delete", :neo4j => true do
162
+
163
+ it "will delete an existing node that is loaded" do
164
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
165
+
166
+ new_node.delete
167
+
168
+ existing_node = NeoRest::Node.load( new_node.neo_id )
169
+ existing_node.nil?.should == true
170
+ end
171
+
172
+ it "will delete an existing node using neo_id" do
173
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
174
+
175
+ NeoRest::Node.delete new_node.neo_id
176
+
177
+ existing_node = NeoRest::Node.load( new_node.neo_id )
178
+ existing_node.nil?.should == true
179
+ end
180
+
181
+ it "will delete an existing node using node" do
182
+ new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
183
+
184
+ NeoRest::Node.delete new_node
185
+
186
+ existing_node = NeoRest::Node.load( new_node.neo_id )
187
+ existing_node.nil?.should == true
188
+ end
189
+
190
+ end
191
+
192
+ end
@@ -0,0 +1,75 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ describe "NeoRest::Relationship" do
5
+
6
+ describe "load", :neo4j => true do
7
+
8
+ it "will load an existing relationship" do
9
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
10
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
11
+
12
+ new_relationship = new_node_1.add_relationship_to new_node_2, :knows
13
+ new_relationship.name = 'relation one'
14
+ new_relationship.description = 'description one'
15
+ new_relationship.update
16
+
17
+ existing_relationship = NeoRest::Relationship.load new_relationship.neo_id
18
+ existing_relationship.neo_id.should == new_relationship.neo_id
19
+ end
20
+
21
+ end
22
+
23
+ describe "update", :neo4j => true do
24
+
25
+ it "will update an existing relationship" do
26
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
27
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
28
+
29
+ new_relationship = new_node_1.add_relationship_to new_node_2, :knows
30
+ new_relationship.name = 'relation one'
31
+ new_relationship.description = 'description one'
32
+ new_relationship.update
33
+
34
+ existing_relationship = NeoRest::Relationship.load new_relationship.neo_id
35
+ existing_relationship.name.should == 'relation one'
36
+ existing_relationship.description.should == 'description one'
37
+ end
38
+
39
+ it "will update an existing relationship with a hash" do
40
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
41
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
42
+
43
+ new_relationship = new_node_1.add_relationship_to new_node_2, :knows
44
+ new_relationship.update( {:name => 'relation one', :description => 'description one', :new_property => 'value'} )
45
+
46
+ existing_relationship = NeoRest::Relationship.load new_relationship.neo_id
47
+ existing_relationship.name.should == 'relation one'
48
+ existing_relationship.description.should == 'description one'
49
+ existing_relationship.new_property.should == 'value'
50
+ end
51
+
52
+ end
53
+
54
+ describe "delete", :neo4j => true do
55
+
56
+ it "will delete an existing relationship that is loaded" do
57
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
58
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
59
+
60
+ relationship_1 = new_node_1.add_relationship_to new_node_2, :knows
61
+ relationship_1.delete
62
+ end
63
+
64
+ it "will delete an existing relationship" do
65
+ new_node_1 = NeoRest::Node.create_new( {:name => 'node name 1', :other_property => 'property value'} )
66
+ new_node_2 = NeoRest::Node.create_new( {:name => 'node name 2', :other_property => 'property value'} )
67
+
68
+ relationship_1 = new_node_1.add_relationship_to new_node_2, :knows
69
+
70
+ NeoRest::Relationship.delete relationship_1.neo_id
71
+ end
72
+
73
+ end
74
+
75
+ end
@@ -0,0 +1,17 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ describe "NeoRest::TestHelper" do
5
+
6
+ describe "clean_the_whole_database", :neo4j => true do
7
+ # new_node = NeoRest::Node.create_new( {:name => 'node name', :other_property => 'property value'} )
8
+
9
+ # NeoRest::TestHelper.clean_the_whole_database 'yeah_delete_it_all'
10
+
11
+ # new_node.name.should == 'node name'
12
+
13
+ # lambda{ NeoRest::Node.load( new_node.neo_id ) }.should raise_error
14
+ # lambda{ raise('test') }.should raise_error
15
+ end
16
+
17
+ end
@@ -0,0 +1,13 @@
1
+ require 'rake'
2
+
3
+ require './lib/neo_rest'
4
+
5
+ RSpec.configure do |config|
6
+ config.mock_with :rspec
7
+
8
+ NeoRest::Config.init
9
+
10
+ config.before(:each, :neo4j => true) do
11
+ NeoRest::TestHelper.clean_the_whole_database 'yeah_delete_it_all'
12
+ end
13
+ end
data/specs.watchr ADDED
@@ -0,0 +1,61 @@
1
+ # adapted from http://github.com/rspec/rspec-rails/blob/master/specs.watchr
2
+
3
+ # Run me with:
4
+ #
5
+ # $ watchr specs.watchr
6
+
7
+ # --------------------------------------------------
8
+ # Convenience Methods
9
+ # --------------------------------------------------
10
+ def all_spec_files
11
+ Dir['spec/**/*_spec.rb']
12
+ end
13
+
14
+ def run_spec_matching(thing_to_match)
15
+ matches = all_spec_files.grep(/#{thing_to_match}/i)
16
+ if matches.empty?
17
+ puts "Sorry, thanks for playing, but there were no matches for #{thing_to_match}"
18
+ else
19
+ run matches.join(' ')
20
+ end
21
+ end
22
+
23
+ def run(files_to_run)
24
+ puts("Running: #{files_to_run}")
25
+ system("rspec -c #{files_to_run}")
26
+ no_int_for_you
27
+ end
28
+
29
+ def run_all_specs
30
+ run(all_spec_files.join(' '))
31
+ end
32
+
33
+ # --------------------------------------------------
34
+ # Watchr Rules
35
+ # --------------------------------------------------
36
+ watch('^spec/(.*)_spec\.rb') { |m| run_spec_matching(m[1]) }
37
+ watch('^app/(.*)\.rb') { |m| run_spec_matching(m[1]) }
38
+ watch('^app/(.*)\.haml') { |m| run_spec_matching(m[1]) }
39
+ watch('^lib/(.*)\.rb') { |m| run_spec_matching(m[1]) }
40
+ watch('^spec/spec_helper\.rb') { run_all_specs }
41
+ watch('^spec/support/.*\.rb') { run_all_specs }
42
+
43
+ # --------------------------------------------------
44
+ # Signal Handling
45
+ # --------------------------------------------------
46
+
47
+ def no_int_for_you
48
+ @sent_an_int = nil
49
+ end
50
+
51
+ Signal.trap 'INT' do
52
+ if @sent_an_int then
53
+ puts " A second INT? Ok, I get the message. Shutting down now."
54
+ exit
55
+ else
56
+ puts " Did you just send me an INT? Ugh. I'll quit for real if you do it again."
57
+ @sent_an_int = true
58
+ Kernel.sleep 1.5
59
+ run_all_specs
60
+ end
61
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mark Nijhof
@@ -140,7 +140,25 @@ extensions: []
140
140
  extra_rdoc_files:
141
141
  - README
142
142
  files:
143
+ - .rvmrc
144
+ - GemFile
145
+ - Gemfile.lock
146
+ - LICENCE
143
147
  - README
148
+ - RakeFile.rb
149
+ - VERSION
150
+ - lib/NeoRest/config.rb
151
+ - lib/NeoRest/index.rb
152
+ - lib/NeoRest/node.rb
153
+ - lib/NeoRest/relationship.rb
154
+ - lib/NeoRest/test_helper.rb
155
+ - lib/neo_rest.rb
156
+ - spec/NeoRest/index_spec.rb
157
+ - spec/NeoRest/node_spec.rb
158
+ - spec/NeoRest/relationship_spec.rb
159
+ - spec/NeoRest/test_helper_spec.rb
160
+ - spec/spec_helper.rb
161
+ - specs.watchr
144
162
  has_rdoc: true
145
163
  homepage: http://github.com/MarkNijhof/NeoRest
146
164
  licenses: []