neography 1.3.8 → 1.3.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 039df0f3084aed3efe2328a0cc5ec7fc892bf25a
4
- data.tar.gz: 8b54bd42b4aab949decb5b69bdbd6704517459af
3
+ metadata.gz: 153541ce7b1f118e53b97931722139408722084d
4
+ data.tar.gz: 4134c1a97af5d2666d5e9b80863615dc66995bbd
5
5
  SHA512:
6
- metadata.gz: 287cb8520af34a0fe26e53ead1de0d86328d6565a679a6b5d03a989088f11da33db48a4e4cdd81d837f06958bd9796ad11ef5ec35cfed9b58e589835acf62376
7
- data.tar.gz: 21a921f59b26cb5c6bc09a943679a2bcdf3c9b335dcd6d81d958c10252d7a579a9d49c21f9d19c39b954762870d02b2e57327655d30441f4cfef3480fe522f0f
6
+ metadata.gz: fab8b438fb39df376d1071517dcadee4d2e402199d473f8d45957b7a7c3312a7d13398e8b64dfae5b980df418c9e256f1575debf6974fb94d53e5ba5821b534e
7
+ data.tar.gz: f7eb79617eb7d2bc449fa9be5282f3f3a4d3a0068dd1fc56d937cbe1982251ac547ccaca1fb302c289d0479d2cac10279a51cd949bcff1a7d427543d271b5fbc
data/ChangeLog CHANGED
@@ -1,3 +1,17 @@
1
+ v1.3.8
2
+ ======
3
+ 3343c5e Bump to 1.3.8
4
+ e99ba36 add ChangeLog (using git-changelog gem)
5
+ de53b89 update neo to 2.0.1, update ruby tests to 2.0.0
6
+ 9a76e11 add unmanaged extensions spec (skipped for test suite)
7
+ b788b68 moved broken spatial tests out to their own file, and skipping them until we track this Neo4j bug down
8
+ f1e172e more work on adding spatial to batch... failing test however...
9
+ 8ee5de4 + .labels Node instance method
10
+ d358eb7 + colors in tests
11
+ 07e63dc let body of post extension pass through without the to_json if headers are not nil
12
+ cb21b01 allow headers to be past in when using extensions
13
+ 43b64d3 deal with unmanaged extensions a little better... well not really, but at least it should work
14
+
1
15
  v1.3.7
2
16
  ======
3
17
  6bd6842 Bump to 1.3.7
@@ -66,9 +66,18 @@ module Neography
66
66
  end
67
67
 
68
68
  def authenticate(path = nil)
69
- @client.set_auth(path,
70
- @authentication[@authentication.keys.first][:username],
71
- @authentication[@authentication.keys.first][:password]) unless @authentication.empty?
69
+ unless @authentication.empty?
70
+ auth_type = @authentication.keys.first
71
+ @client.set_auth(
72
+ path,
73
+ @authentication[auth_type][:username],
74
+ @authentication[auth_type][:password]
75
+ )
76
+ # Force http client to always send auth credentials without
77
+ # waiting for WWW-Authenticate headers, thus saving one request
78
+ # roundtrip for each URI. Only works for HTTP basic auth.
79
+ @client.www_auth.basic_auth.challenge(configuration) if auth_type == 'basic_auth'
80
+ end
72
81
  end
73
82
 
74
83
  private
@@ -204,6 +213,7 @@ module Neography
204
213
  when /RelationshipNotFoundException/ ; RelationshipNotFoundException
205
214
  when /NotFoundException/ ; NotFoundException
206
215
  when /UniquePathNotUniqueException/ ; UniquePathNotUniqueException
216
+ when /DeadlockDetectedException/ ; DeadlockDetectedException
207
217
  else
208
218
  NeographyError
209
219
  end
@@ -44,4 +44,7 @@ module Neography
44
44
  # Thrown when CREATE UNIQUE matches multiple paths.
45
45
  class UniquePathNotUniqueException < NeographyError; end
46
46
 
47
+ # Signals that a deadlock between two or more transactions has been detected
48
+ class DeadlockDetectedException < NeographyError; end
49
+
47
50
  end
@@ -29,6 +29,7 @@ require 'neography/rest/batch'
29
29
  require 'neography/rest/clean'
30
30
  require 'neography/rest/transactions'
31
31
  require 'neography/rest/spatial'
32
+ require 'neography/rest/constraints'
32
33
 
33
34
  require 'neography/errors'
34
35
 
@@ -71,6 +72,7 @@ module Neography
71
72
  @clean = Clean.new(@connection)
72
73
  @transactions = Transactions.new(@connection)
73
74
  @spatial = Spatial.new(@connection)
75
+ @constraints = Constraints.new(@connection)
74
76
  end
75
77
 
76
78
  # meta-data
@@ -123,6 +125,28 @@ module Neography
123
125
  @schema_indexes.drop(label, property)
124
126
  end
125
127
 
128
+ # constraints
129
+
130
+ def get_constraints(label=nil)
131
+ label.nil? ? @constraints.list : @constraints.get(label)
132
+ end
133
+
134
+ def drop_constraint(label, property)
135
+ @constraints.drop(label, property)
136
+ end
137
+
138
+ def get_uniqueness(label)
139
+ @constraints.get_uniqueness(label)
140
+ end
141
+
142
+ def get_unique_constraint(label, property)
143
+ @constraints.get_unique(label, property)
144
+ end
145
+
146
+ def create_unique_constraint(label, property)
147
+ @constraints.create_unique(label, property)
148
+ end
149
+
126
150
  # transactions
127
151
 
128
152
  def begin_transaction(statements=nil)
@@ -114,6 +114,10 @@ module Neography
114
114
  end
115
115
  end
116
116
 
117
+ def remove_node_property(id, property)
118
+ delete NodeProperties.single_path(:id => get_id(id), :property => property)
119
+ end
120
+
117
121
  # NodeLabel
118
122
 
119
123
  def add_label(id, body)
@@ -0,0 +1,48 @@
1
+ module Neography
2
+ class Rest
3
+ class Constraints
4
+ extend Neography::Rest::Paths
5
+ include Neography::Rest::Helpers
6
+
7
+ add_path :base, "/schema/constraint/"
8
+ add_path :label, "/schema/constraint/:label"
9
+ add_path :uniqueness, "/schema/constraint/:label/uniqueness/"
10
+ add_path :unique, "/schema/constraint/:label/uniqueness/:property"
11
+
12
+ def initialize(connection)
13
+ @connection = connection
14
+ end
15
+
16
+ def drop(label, property)
17
+ @connection.delete(unique_path(:label => label, :property => property))
18
+ end
19
+
20
+ def list
21
+ @connection.get(base_path)
22
+ end
23
+
24
+ def get(label)
25
+ @connection.get(label_path(:label => label))
26
+ end
27
+
28
+ def get_uniqueness(label)
29
+ @connection.get(uniqueness_path(:label => label))
30
+ end
31
+
32
+ def get_unique(label, property)
33
+ @connection.get(unique_path(:label => label, :property => property))
34
+ end
35
+
36
+ def create_unique(label, property)
37
+ options = {
38
+ :body => {
39
+ :property_keys => [property]
40
+ }.to_json,
41
+ :headers => json_content_type
42
+ }
43
+ @connection.post(uniqueness_path(:label => label), options)
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module Neography
2
- VERSION = "1.3.8"
2
+ VERSION = "1.3.9"
3
3
  end
@@ -123,6 +123,32 @@ describe Neography::Rest do
123
123
  existing_node["data"]["weight"].should be_nil
124
124
  end
125
125
 
126
+ it "can remove a property of a node" do
127
+ new_node = @neo.create_node("name" => "Max", "weight" => 200)
128
+ batch_result = @neo.batch [:remove_node_property, new_node, "weight"]
129
+ batch_result.first.should have_key("id")
130
+ batch_result.first.should have_key("from")
131
+ existing_node = @neo.get_node(new_node)
132
+ existing_node["data"]["name"].should == "Max"
133
+ existing_node["data"]["weight"].should be_nil
134
+ end
135
+
136
+ it "can remove a property of multiple nodes" do
137
+ node1 = @neo.create_node("name" => "Max", "weight" => 200)
138
+ node2 = @neo.create_node("name" => "Marc", "weight" => 180)
139
+ batch_result = @neo.batch [:remove_node_property, node1, "name"], [:remove_node_property, node2, "name"]
140
+ batch_result.first.should have_key("id")
141
+ batch_result.first.should have_key("from")
142
+ batch_result.last.should have_key("id")
143
+ batch_result.last.should have_key("from")
144
+ existing_node = @neo.get_node(node1)
145
+ existing_node["data"]["name"].should be_nil
146
+ existing_node["data"]["weight"].should == 200
147
+ existing_node = @neo.get_node(node2)
148
+ existing_node["data"]["name"].should be_nil
149
+ existing_node["data"]["weight"].should == 180
150
+ end
151
+
126
152
  it "can get a single relationship" do
127
153
  node1 = @neo.create_node
128
154
  node2 = @neo.create_node
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe Neography::Rest do
4
+ before(:each) do
5
+ @neo = Neography::Rest.new
6
+ end
7
+
8
+ describe "create unique constraint" do
9
+ it "can create a unique constraint" do
10
+ label = "User"
11
+ property = "user_id"
12
+ uc = @neo.create_unique_constraint(label, property)
13
+ uc.should_not be_nil
14
+ uc["label"].should == label
15
+ uc["property_keys"].should == [property]
16
+ end
17
+ end
18
+
19
+ describe "get a unique constraint" do
20
+ it "can get a unique constraint" do
21
+ label = "User"
22
+ property = "user_id"
23
+ uc = @neo.get_unique_constraint(label, property)
24
+ uc.should_not be_nil
25
+ uc.first["label"].should == label
26
+ uc.first["property_keys"].should == [property]
27
+ end
28
+ end
29
+
30
+ describe "get unique constraints" do
31
+ it "can get unique constraints for a label" do
32
+ label = "User"
33
+ property = "user_id"
34
+ uc = @neo.get_uniqueness(label)
35
+ uc.should_not be_nil
36
+ uc.first["label"].should == label
37
+ uc.first["property_keys"].should == [property]
38
+ end
39
+ end
40
+
41
+ describe "list constraints" do
42
+ it "can get a list of constraints" do
43
+ label = "User"
44
+ property = "user_id"
45
+ cs = @neo.get_constraints
46
+ cs.should_not be_nil
47
+ cs.first["label"].should == label
48
+ cs.first["property_keys"].should == [property]
49
+ end
50
+
51
+ it "can get a list of constraints for a specifc label" do
52
+ label = "User"
53
+ property = "user_id"
54
+ cs = @neo.get_constraints(label)
55
+ cs.should_not be_nil
56
+ cs.first["label"].should == label
57
+ cs.first["property_keys"].should == [property]
58
+ end
59
+ end
60
+
61
+ describe "drop a constraint" do
62
+ it "can drop a constraint" do
63
+ label = "User"
64
+ property = "user_id"
65
+ uc = @neo.drop_constraint(label, property)
66
+ uc.should be_nil
67
+ cs = @neo.get_constraints(label)
68
+ cs.should be_empty
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ module Neography
4
+ class Rest
5
+ describe Constraints do
6
+
7
+ let(:connection) { double }
8
+ subject { Constraints.new(connection) }
9
+
10
+ it "list constraints" do
11
+ connection.should_receive(:get).with("/schema/constraint/")
12
+ subject.list
13
+ end
14
+
15
+ it "get constraints for a label" do
16
+ connection.should_receive(:get).with("/schema/constraint/label")
17
+ subject.get("label")
18
+ end
19
+
20
+ it "create a unique constraint for a label" do
21
+ options = {
22
+ :body => '{"property_keys":["property"]}',
23
+ :headers => json_content_type
24
+ }
25
+ connection.should_receive(:post).with("/schema/constraint/label/uniqueness/", options)
26
+ subject.create_unique("label", "property")
27
+ end
28
+
29
+ it "get unique constraints for a label" do
30
+ connection.should_receive(:get).with("/schema/constraint/label/uniqueness/")
31
+ subject.get_uniqueness("label")
32
+ end
33
+
34
+ it "get a specific unique constraint for a label" do
35
+ connection.should_receive(:get).with("/schema/constraint/label/uniqueness/property")
36
+ subject.get_unique("label", "property")
37
+ end
38
+
39
+ it "can delete a constraint for a label" do
40
+ connection.should_receive(:delete).with("/schema/constraint/label/uniqueness/property")
41
+ subject.drop("label","property")
42
+ end
43
+
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neography
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.8
4
+ version: 1.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max De Marzi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-04 00:00:00.000000000 Z
11
+ date: 2014-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -182,6 +182,7 @@ files:
182
182
  - lib/neography/rest/auto_indexes.rb
183
183
  - lib/neography/rest/batch.rb
184
184
  - lib/neography/rest/clean.rb
185
+ - lib/neography/rest/constraints.rb
185
186
  - lib/neography/rest/cypher.rb
186
187
  - lib/neography/rest/extensions.rb
187
188
  - lib/neography/rest/gremlin.rb
@@ -223,6 +224,7 @@ files:
223
224
  - spec/integration/rest_batch_spec.rb
224
225
  - spec/integration/rest_batch_streaming_spec.rb
225
226
  - spec/integration/rest_bulk_spec.rb
227
+ - spec/integration/rest_constraints_spec.rb
226
228
  - spec/integration/rest_experimental_spec.rb
227
229
  - spec/integration/rest_gremlin_fail_spec.rb
228
230
  - spec/integration/rest_header_spec.rb
@@ -249,6 +251,7 @@ files:
249
251
  - spec/unit/relationship_spec.rb
250
252
  - spec/unit/rest/batch_spec.rb
251
253
  - spec/unit/rest/clean_spec.rb
254
+ - spec/unit/rest/constraints_spec.rb
252
255
  - spec/unit/rest/cypher_spec.rb
253
256
  - spec/unit/rest/extensions_spec.rb
254
257
  - spec/unit/rest/gremlin_spec.rb
@@ -307,6 +310,7 @@ test_files:
307
310
  - spec/integration/rest_batch_spec.rb
308
311
  - spec/integration/rest_batch_streaming_spec.rb
309
312
  - spec/integration/rest_bulk_spec.rb
313
+ - spec/integration/rest_constraints_spec.rb
310
314
  - spec/integration/rest_experimental_spec.rb
311
315
  - spec/integration/rest_gremlin_fail_spec.rb
312
316
  - spec/integration/rest_header_spec.rb
@@ -333,6 +337,7 @@ test_files:
333
337
  - spec/unit/relationship_spec.rb
334
338
  - spec/unit/rest/batch_spec.rb
335
339
  - spec/unit/rest/clean_spec.rb
340
+ - spec/unit/rest/constraints_spec.rb
336
341
  - spec/unit/rest/cypher_spec.rb
337
342
  - spec/unit/rest/extensions_spec.rb
338
343
  - spec/unit/rest/gremlin_spec.rb