neography 0.0.22 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -182,12 +182,19 @@ To Use:
182
182
  [:create_node, {"name" => "Marc"}] # Creates two nodes in a batch
183
183
  @neo.batch [:set_node_property, node1, {"name" => "Tom"}],
184
184
  [:set_node_property, node2, {"name" => "Jerry"}] # Sets the property of two nodes
185
+ @neo.batch [:create_unique_node, index_name, key, value,
186
+ {"age" => 33, "name" => "Max"}] # Creates a unique node
185
187
  @neo.batch [:get_relationship, rel1],
186
188
  [:get_relationship, rel2] # Gets two relationships in a batch
187
189
  @neo.batch [:create_relationship, "friends",
188
190
  node1, node2, {:since => "high school"}],
189
191
  [:create_relationship, "friends",
190
192
  node1, node3, {:since => "college"}] # Creates two relationships in a batch
193
+ @neo.batch [:create_unique_relationship, index_name,
194
+ key, value, "friends", node1, node2] # Creates a unique relationship
195
+ @neo.batch [:get_node_index, index_name, key, value] # Get node index
196
+ @neo.batch [:get_relationship_index, index_name, key, value] # Get relationship index
197
+
191
198
  @neo.batch [:create_node, {"name" => "Max"}],
192
199
  [:create_node, {"name" => "Marc"}], # Creates two nodes and index them
193
200
  [:add_node_to_index, "test_node_index", key, value, "{0}"],
@@ -347,7 +354,8 @@ Contribute patches via pull requests.
347
354
 
348
355
  === Help
349
356
 
350
- If you are just starting out, or need help send me an e-mail at maxdemazi@gmail.com.
357
+ If you are just starting out, or need help send me an e-mail at maxdemarzi@gmail.com.
358
+ Check you my blog at http://maxdemarzi.com where I have more Neography examples.
351
359
 
352
360
  === Licenses
353
361
 
@@ -382,6 +382,8 @@ module Neography
382
382
  {:method => "GET", :to => "/node/#{get_id(args[1])}"}
383
383
  when :create_node
384
384
  {:method => "POST", :to => "/node/", :body => args[1]}
385
+ when :create_unique_node
386
+ {:method => "POST", :to => "/index/node/#{args[1]}?unique", :body => {:key => args[2], :value => args[3], :properties => args[4]}}
385
387
  when :set_node_property
386
388
  {:method => "PUT", :to => "/node/#{get_id(args[1])}/properties/#{args[2].keys.first}", :body => args[2].values.first}
387
389
  when :reset_node_properties
@@ -390,6 +392,8 @@ module Neography
390
392
  {:method => "GET", :to => "/relationship/#{get_id(args[1])}"}
391
393
  when :create_relationship
392
394
  {:method => "POST", :to => (args[2].is_a?(String) && args[2].start_with?("{") ? "" : "/node/") + "#{get_id(args[2])}/relationships", :body => {:to => (args[3].is_a?(String) && args[3].start_with?("{") ? "" : "/node/") + "#{get_id(args[3])}", :type => args[1], :data => args[4] } }
395
+ when :create_unique_relationship
396
+ {:method => "POST", :to => "/index/relationship/#{args[1]}?unique", :body => {:key => args[2], :value => args[3], :type => args[4], :start => (args[5].is_a?(String) && args[5].start_with?("{") ? "" : "/node/") + "#{get_id(args[5])}", :end=> (args[6].is_a?(String) && args[6].start_with?("{") ? "" : "/node/") + "#{get_id(args[6])}"} }
393
397
  when :set_relationship_property
394
398
  {:method => "PUT", :to => "/relationship/#{get_id(args[1])}/properties/#{args[2].keys.first}", :body => args[2].values.first}
395
399
  when :reset_relationship_properties
@@ -398,6 +402,10 @@ module Neography
398
402
  {:method => "POST", :to => "/index/node/#{args[1]}", :body => {:uri => (args[4].is_a?(String) && args[4].start_with?("{") ? "" : "/node/") + "#{get_id(args[4])}", :key => args[2], :value => args[3] } }
399
403
  when :add_relationship_to_index
400
404
  {:method => "POST", :to => "/index/relationship/#{args[1]}", :body => {:uri => (args[4].is_a?(String) && args[4].start_with?("{") ? "" : "/relationship/") + "#{get_id(args[4])}", :key => args[2], :value => args[3] } }
405
+ when :get_node_index
406
+ {:method => "GET", :to => "/index/node/#{args[1]}/#{args[2]}/#{args[3]}"}
407
+ when :get_relationship_index
408
+ {:method => "GET", :to => "/index/relationship/#{args[1]}/#{args[2]}/#{args[3]}"}
401
409
  end
402
410
  end
403
411
 
@@ -1,3 +1,3 @@
1
1
  module Neography
2
- VERSION = "0.0.22"
2
+ VERSION = "0.0.23"
3
3
  end
@@ -53,6 +53,26 @@ describe Neography::Rest do
53
53
  batch_result.last["body"]["data"]["name"].should == "Marc"
54
54
  end
55
55
 
56
+ it "can create a unique node" do
57
+ index_name = generate_text(6)
58
+ key = generate_text(6)
59
+ value = generate_text
60
+ @neo.create_node_index(index_name)
61
+ batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
62
+ batch_result.first["body"]["data"]["name"].should == "Max"
63
+ batch_result.first["body"]["data"]["age"].should == 31
64
+ new_node_id = batch_result.first["body"]["self"].split('/').last
65
+ batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
66
+ batch_result.first["body"]["self"].split('/').last.should == new_node_id
67
+ batch_result.first["body"]["data"]["name"].should == "Max"
68
+ batch_result.first["body"]["data"]["age"].should == 31
69
+
70
+ #Sanity Check
71
+ existing_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
72
+ existing_node["self"].split('/').last.should == new_node_id
73
+ existing_node["data"]["name"].should == "Max"
74
+ existing_node["data"]["age"].should == 31
75
+ end
56
76
 
57
77
  it "can update a property of a node" do
58
78
  new_node = @neo.create_node("name" => "Max")
@@ -124,6 +144,19 @@ describe Neography::Rest do
124
144
  batch_result.first["body"]["end"].split('/').last.should == node2["self"].split('/').last
125
145
  end
126
146
 
147
+ it "can create a unique relationship" do
148
+ index_name = generate_text(6)
149
+ key = generate_text(6)
150
+ value = generate_text
151
+ @neo.create_relationship_index(index_name)
152
+ node1 = @neo.create_node
153
+ node2 = @neo.create_node
154
+ batch_result = @neo.batch [:create_unique_relationship, index_name, key, value, "friends", node1, node2]
155
+ batch_result.first["body"]["type"].should == "friends"
156
+ batch_result.first["body"]["start"].split('/').last.should == node1["self"].split('/').last
157
+ batch_result.first["body"]["end"].split('/').last.should == node2["self"].split('/').last
158
+ end
159
+
127
160
  it "can update a single relationship" do
128
161
  node1 = @neo.create_node
129
162
  node2 = @neo.create_node
@@ -139,21 +172,72 @@ describe Neography::Rest do
139
172
  existing_relationship["self"].should == new_relationship["self"]
140
173
  end
141
174
 
175
+ it "can reset the properties of a relationship" do
176
+ node1 = @neo.create_node
177
+ node2 = @neo.create_node
178
+ new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
179
+ batch_result = @neo.batch [:reset_relationship_properties, new_relationship, {"since" => "college", "dated" => "yes"}]
180
+ batch_result.first.should have_key("id")
181
+ batch_result.first.should have_key("from")
182
+ existing_relationship = @neo.get_relationship(batch_result.first["from"].split('/')[2])
183
+ existing_relationship["type"].should == "friends"
184
+ existing_relationship["data"]["since"].should == "college"
185
+ existing_relationship["data"]["dated"].should == "yes"
186
+ existing_relationship["start"].split('/').last.should == node1["self"].split('/').last
187
+ existing_relationship["end"].split('/').last.should == node2["self"].split('/').last
188
+ existing_relationship["self"].should == new_relationship["self"]
189
+ end
190
+
142
191
  it "can add a node to an index" do
192
+ index_name = generate_text(6)
143
193
  new_node = @neo.create_node
144
194
  key = generate_text(6)
145
195
  value = generate_text
146
- new_index = @neo.get_node_index("test_node_index", key, value)
147
- batch_result = @neo.batch [:add_node_to_index, "test_node_index", key, value, new_node]
196
+ new_index = @neo.get_node_index(index_name, key, value)
197
+ batch_result = @neo.batch [:add_node_to_index, index_name, key, value, new_node]
148
198
  batch_result.first.should have_key("id")
149
199
  batch_result.first.should have_key("from")
150
- existing_index = @neo.find_node_index("test_node_index", key, value)
200
+ existing_index = @neo.find_node_index(index_name, key, value)
151
201
  existing_index.should_not be_nil
152
202
  existing_index.first["self"].should == new_node["self"]
153
- @neo.remove_node_from_index("test_node_index", key, value, new_node)
203
+ @neo.remove_node_from_index(index_name, key, value, new_node)
154
204
  end
155
205
  end
156
206
 
207
+ it "can get a node index" do
208
+ index_name = generate_text(6)
209
+ key = generate_text(6)
210
+ value = generate_text
211
+ @neo.create_node_index(index_name)
212
+ new_node = @neo.create_node
213
+ @neo.add_node_to_index(index_name, key, value, new_node)
214
+ batch_result = @neo.batch [:get_node_index, index_name, key, value]
215
+ batch_result.first.should have_key("id")
216
+ batch_result.first.should have_key("from")
217
+ batch_result.first["body"].first["self"].should == new_node["self"]
218
+ @neo.remove_node_from_index(index_name, key, value, new_node)
219
+ end
220
+
221
+ it "can get a relationship index" do
222
+ index_name = generate_text(6)
223
+ key = generate_text(6)
224
+ value = generate_text
225
+ @neo.create_relationship_index(index_name)
226
+ node1 = @neo.create_node
227
+ node2 = @neo.create_node
228
+ new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
229
+ @neo.add_relationship_to_index(index_name, key, value, new_relationship)
230
+ batch_result = @neo.batch [:get_relationship_index, index_name, key, value]
231
+ batch_result.first.should have_key("id")
232
+ batch_result.first.should have_key("from")
233
+ batch_result.first["body"].first["type"].should == "friends"
234
+ batch_result.first["body"].first["start"].split('/').last.should == node1["self"].split('/').last
235
+ batch_result.first["body"].first["end"].split('/').last.should == node2["self"].split('/').last
236
+ end
237
+
238
+
239
+
240
+
157
241
  describe "referenced batch" do
158
242
  it "can create a relationship from two newly created nodes" do
159
243
  batch_result = @neo.batch [:create_node, {"name" => "Max"}], [:create_node, {"name" => "Marc"}], [:create_relationship, "friends", "{0}", "{1}", {:since => "high school"}]
@@ -45,6 +45,11 @@ describe Neography::Rest do
45
45
  new_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
46
46
  new_node["data"]["name"].should == "Max"
47
47
  new_node["data"]["age"].should == 31
48
+ new_node_id = new_node["self"].split('/').last
49
+ existing_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
50
+ existing_node["self"].split('/').last.should == new_node_id
51
+ existing_node["data"]["name"].should == "Max"
52
+ existing_node["data"]["age"].should == 31
48
53
  end
49
54
 
50
55
  end
metadata CHANGED
@@ -1,135 +1,100 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: neography
3
- version: !ruby/object:Gem::Version
4
- hash: 51
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.23
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 22
10
- version: 0.0.22
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Max De Marzi
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-02-09 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &85677290 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: net-http-spy
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *85677290
25
+ - !ruby/object:Gem::Dependency
26
+ name: net-http-spy
27
+ requirement: &85677040 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - "="
41
- - !ruby/object:Gem::Version
42
- hash: 21
43
- segments:
44
- - 0
45
- - 2
46
- - 1
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
47
32
  version: 0.2.1
48
33
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: rake
52
34
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *85677040
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &85676790 !ruby/object:Gem::Requirement
54
39
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 49
59
- segments:
60
- - 0
61
- - 8
62
- - 7
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
63
43
  version: 0.8.7
64
44
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: httparty
68
45
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *85676790
47
+ - !ruby/object:Gem::Dependency
48
+ name: httparty
49
+ requirement: &85676560 !ruby/object:Gem::Requirement
70
50
  none: false
71
- requirements:
51
+ requirements:
72
52
  - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 19
75
- segments:
76
- - 0
77
- - 7
78
- - 8
53
+ - !ruby/object:Gem::Version
79
54
  version: 0.7.8
80
55
  type: :runtime
81
- version_requirements: *id004
82
- - !ruby/object:Gem::Dependency
83
- name: json
84
56
  prerelease: false
85
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *85676560
58
+ - !ruby/object:Gem::Dependency
59
+ name: json
60
+ requirement: &85738040 !ruby/object:Gem::Requirement
86
61
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- hash: 3
91
- segments:
92
- - 0
93
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
94
66
  type: :runtime
95
- version_requirements: *id005
96
- - !ruby/object:Gem::Dependency
97
- name: os
98
67
  prerelease: false
99
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *85738040
69
+ - !ruby/object:Gem::Dependency
70
+ name: os
71
+ requirement: &85737810 !ruby/object:Gem::Requirement
100
72
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
106
- - 0
107
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
108
77
  type: :runtime
109
- version_requirements: *id006
110
- - !ruby/object:Gem::Dependency
111
- name: rubyzip
112
78
  prerelease: false
113
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *85737810
80
+ - !ruby/object:Gem::Dependency
81
+ name: rubyzip
82
+ requirement: &85737600 !ruby/object:Gem::Requirement
114
83
  none: false
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
120
- - 0
121
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
122
88
  type: :runtime
123
- version_requirements: *id007
124
- description: A Ruby wrapper to the Neo4j Rest API see http://components.neo4j.org/neo4j-rest/ for more details.
89
+ prerelease: false
90
+ version_requirements: *85737600
91
+ description: A Ruby wrapper to the Neo4j Rest API see http://components.neo4j.org/neo4j-rest/
92
+ for more details.
125
93
  email: maxdemarzi@gmail.com
126
94
  executables: []
127
-
128
95
  extensions: []
129
-
130
96
  extra_rdoc_files: []
131
-
132
- files:
97
+ files:
133
98
  - .gitignore
134
99
  - .project
135
100
  - .travis.yml
@@ -185,36 +150,26 @@ files:
185
150
  - spec/spec_helper.rb
186
151
  homepage: http://rubygems.org/gems/neography
187
152
  licenses: []
188
-
189
153
  post_install_message:
190
154
  rdoc_options: []
191
-
192
- require_paths:
155
+ require_paths:
193
156
  - lib
194
- required_ruby_version: !ruby/object:Gem::Requirement
157
+ required_ruby_version: !ruby/object:Gem::Requirement
195
158
  none: false
196
- requirements:
197
- - - ">="
198
- - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
- version: "0"
203
- required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
164
  none: false
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- hash: 3
209
- segments:
210
- - 0
211
- version: "0"
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
212
169
  requirements: []
213
-
214
170
  rubyforge_project: neography
215
- rubygems_version: 1.8.9
171
+ rubygems_version: 1.8.10
216
172
  signing_key:
217
173
  specification_version: 3
218
174
  summary: ruby wrapper to Neo4j Rest API
219
175
  test_files: []
220
-