neography 0.0.22 → 0.0.23

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/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
-