neo4j-core 3.1.1 → 4.0.0

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -12
  3. data/README.md +7 -7
  4. data/lib/neo4j-core.rb +3 -2
  5. data/lib/neo4j-core/active_entity.rb +8 -10
  6. data/lib/neo4j-core/cypher_translator.rb +61 -59
  7. data/lib/neo4j-core/hash_with_indifferent_access.rb +31 -22
  8. data/lib/neo4j-core/helpers.rb +15 -17
  9. data/lib/neo4j-core/label.rb +7 -6
  10. data/lib/neo4j-core/query.rb +271 -268
  11. data/lib/neo4j-core/query_clauses.rb +371 -355
  12. data/lib/neo4j-core/query_find_in_batches.rb +26 -26
  13. data/lib/neo4j-core/version.rb +1 -1
  14. data/lib/neo4j-embedded.rb +2 -2
  15. data/lib/neo4j-embedded/cypher_response.rb +40 -41
  16. data/lib/neo4j-embedded/embedded_database.rb +21 -22
  17. data/lib/neo4j-embedded/embedded_ha_session.rb +13 -11
  18. data/lib/neo4j-embedded/embedded_impermanent_session.rb +9 -8
  19. data/lib/neo4j-embedded/embedded_label.rb +64 -70
  20. data/lib/neo4j-embedded/embedded_node.rb +68 -73
  21. data/lib/neo4j-embedded/embedded_relationship.rb +6 -13
  22. data/lib/neo4j-embedded/embedded_session.rb +128 -132
  23. data/lib/neo4j-embedded/embedded_transaction.rb +34 -33
  24. data/lib/neo4j-embedded/property.rb +84 -77
  25. data/lib/neo4j-embedded/to_java.rb +24 -23
  26. data/lib/neo4j-server.rb +1 -1
  27. data/lib/neo4j-server/cypher_authentication.rb +105 -103
  28. data/lib/neo4j-server/cypher_label.rb +25 -23
  29. data/lib/neo4j-server/cypher_node.rb +180 -177
  30. data/lib/neo4j-server/cypher_node_uncommited.rb +11 -9
  31. data/lib/neo4j-server/cypher_relationship.rb +101 -102
  32. data/lib/neo4j-server/cypher_response.rb +171 -170
  33. data/lib/neo4j-server/cypher_session.rb +209 -205
  34. data/lib/neo4j-server/cypher_transaction.rb +66 -48
  35. data/lib/neo4j-server/resource.rb +17 -22
  36. data/lib/neo4j/entity_equality.rb +3 -4
  37. data/lib/neo4j/label.rb +13 -16
  38. data/lib/neo4j/node.rb +30 -34
  39. data/lib/neo4j/property_container.rb +3 -3
  40. data/lib/neo4j/property_validator.rb +4 -5
  41. data/lib/neo4j/relationship.rb +17 -22
  42. data/lib/neo4j/session.rb +19 -21
  43. data/lib/neo4j/tasks/config_server.rb +2 -3
  44. data/lib/neo4j/tasks/neo4j_server.rake +82 -74
  45. data/lib/neo4j/transaction.rb +23 -22
  46. data/neo4j-core.gemspec +21 -16
  47. metadata +72 -2
@@ -1,41 +1,41 @@
1
- module Neo4j::Core
2
- module QueryFindInBatches
1
+ module Neo4j
2
+ module Core
3
+ module QueryFindInBatches
4
+ def find_in_batches(node_var, prop_var, options = {})
5
+ invalid_keys = options.keys.map(&:to_sym) - [:batch_size]
6
+ fail ArgumentError, "Invalid keys: #{invalid_keys.join(', ')}" if not invalid_keys.empty?
3
7
 
4
- def find_in_batches(node_var, prop_var, options = {})
5
- invalid_keys = options.keys.map(&:to_sym) - [:batch_size]
6
- raise ArgumentError, "Invalid keys: #{invalid_keys.join(', ')}" if not invalid_keys.empty?
8
+ batch_size = options.delete(:batch_size) || 1000
7
9
 
8
- batch_size = options.delete(:batch_size) || 1000
10
+ query = reorder(node_var => prop_var).limit(batch_size)
9
11
 
10
- query = self.reorder(node_var => prop_var).limit(batch_size)
12
+ records = query.to_a
11
13
 
12
- records = query.to_a
13
-
14
- while records.any?
15
- records_size = records.size
16
- primary_key_offset = begin
17
- records.last.send(node_var).send(prop_var)
18
- rescue NoMethodError
19
- begin
20
- records.last.send(node_var)[prop_var.to_sym]
14
+ while records.any?
15
+ records_size = records.size
16
+ primary_key_offset = begin
17
+ records.last.send(node_var).send(prop_var)
21
18
  rescue NoMethodError
22
- records.last.send("#{node_var}.#{prop_var}") # In case we're explicitly returning it
19
+ begin
20
+ records.last.send(node_var)[prop_var.to_sym]
21
+ rescue NoMethodError
22
+ records.last.send("#{node_var}.#{prop_var}") # In case we're explicitly returning it
23
+ end
23
24
  end
24
- end
25
25
 
26
- yield records
26
+ yield records
27
27
 
28
- break if records_size < batch_size
28
+ break if records_size < batch_size
29
29
 
30
- records = query.where("#{node_var}.#{prop_var} > {primary_key_offset}").params(primary_key_offset: primary_key_offset).to_a
30
+ records = query.where("#{node_var}.#{prop_var} > {primary_key_offset}").params(primary_key_offset: primary_key_offset).to_a
31
+ end
31
32
  end
32
- end
33
33
 
34
- def find_each(*args)
35
- find_in_batches(*args) do |batch|
36
- batch.each { |result| yield result }
34
+ def find_each(*args)
35
+ find_in_batches(*args) do |batch|
36
+ batch.each { |result| yield result }
37
+ end
37
38
  end
38
39
  end
39
40
  end
40
41
  end
41
-
@@ -1,5 +1,5 @@
1
1
  module Neo4j
2
2
  module Core
3
- VERSION = "3.1.1"
3
+ VERSION = '4.0.0'
4
4
  end
5
5
  end
@@ -11,5 +11,5 @@ require 'neo4j-embedded/embedded_label'
11
11
  require 'neo4j-embedded/embedded_transaction'
12
12
  require 'neo4j-embedded/cypher_response'
13
13
 
14
- # TODO replace this with https://github.com/intridea/hashie gem
15
- require 'neo4j-core/hash_with_indifferent_access'
14
+ # TODO: replace this with https://github.com/intridea/hashie gem
15
+ require 'neo4j-core/hash_with_indifferent_access'
@@ -1,53 +1,52 @@
1
- module Neo4j::Embedded
2
-
3
- # Wraps the Cypher query result.
4
- # Loads the node and relationships wrapper if possible and use symbol as column keys.
5
- # This is typically used in the native neo4j bindings since result does is not a Ruby enumerable with symbols as keys.
6
- # @note The result is a once forward read only Enumerable, work if you need to read the result twice - use #to_a
7
- #
8
- class ResultWrapper
9
- class ResultsAlreadyConsumedException < Exception;
10
- end
11
-
12
- include Enumerable
1
+ module Neo4j
2
+ module Embedded
3
+ # Wraps the Cypher query result.
4
+ # Loads the node and relationships wrapper if possible and use symbol as column keys.
5
+ # This is typically used in the native neo4j bindings since result does is not a Ruby enumerable with symbols as keys.
6
+ # @note The result is a once forward read only Enumerable, work if you need to read the result twice - use #to_a
7
+ #
8
+ class ResultWrapper
9
+ class ResultsAlreadyConsumedException < Exception
10
+ end
13
11
 
14
- # @return the original result from the Neo4j Cypher Engine, once forward read only !
15
- attr_reader :source
12
+ include Enumerable
16
13
 
17
- def initialize(source, query)
18
- @source = source
19
- @struct = Struct.new(*source.columns.to_a.map(&:to_sym))
20
- @unread = true
21
- @query = query
22
- end
14
+ # @return the original result from the Neo4j Cypher Engine, once forward read only !
15
+ attr_reader :source
23
16
 
24
- def to_s
25
- @query
26
- end
17
+ def initialize(source, query)
18
+ @source = source
19
+ @struct = Struct.new(*source.columns.to_a.map(&:to_sym))
20
+ @unread = true
21
+ @query = query
22
+ end
27
23
 
28
- def inspect
29
- "Enumerable query: '#{@query}'"
30
- end
24
+ def to_s
25
+ @query
26
+ end
31
27
 
32
- # @return [Array<Symbol>] the columns in the query result
33
- def columns
34
- @source.columns.map(&:to_sym)
35
- end
28
+ def inspect
29
+ "Enumerable query: '#{@query}'"
30
+ end
36
31
 
37
- def each
38
- raise ResultsAlreadyConsumedException unless @unread
32
+ # @return [Array<Symbol>] the columns in the query result
33
+ def columns
34
+ @source.columns.map(&:to_sym)
35
+ end
39
36
 
40
- if block_given?
41
- @source.each do |row|
42
- yield(row.each_with_object(@struct.new) do |(column, value), result|
43
- result[column.to_sym] = (value.respond_to?(:wrapper) ? value.wrapper : value)
44
- end)
37
+ def each
38
+ fail ResultsAlreadyConsumedException unless @unread
39
+
40
+ if block_given?
41
+ @source.each do |row|
42
+ yield(row.each_with_object(@struct.new) do |(column, value), result|
43
+ result[column.to_sym] = (value.respond_to?(:wrapper) ? value.wrapper : value)
44
+ end)
45
+ end
46
+ else
47
+ Enumerator.new(self)
45
48
  end
46
- else
47
- Enumerator.new(self)
48
49
  end
49
50
  end
50
-
51
51
  end
52
52
  end
53
-
@@ -1,29 +1,28 @@
1
- module Neo4j::Embedded
2
- class EmbeddedDatabase
3
-
4
- class Error < StandardError
5
- end
1
+ module Neo4j
2
+ module Embedded
3
+ class EmbeddedDatabase
4
+ class Error < StandardError
5
+ end
6
6
 
7
- class << self
8
- def connect(db_location, config={})
9
- if Neo4j::Session.current.respond_to?(:db_location) && Neo4j::Session.current.db_location == db_location
10
- return Neo4j::Session.current
11
- else
12
- EmbeddedSession.new(db_location, config)
7
+ class << self
8
+ def connect(db_location, config = {})
9
+ if Neo4j::Session.current.respond_to?(:db_location) && Neo4j::Session.current.db_location == db_location
10
+ return Neo4j::Session.current
11
+ else
12
+ EmbeddedSession.new(db_location, config)
13
+ end
13
14
  end
14
- end
15
15
 
16
- def create_db(db_location)
17
- puts "Start embedded Neo4j db at #{db_location}"
18
- factory = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
19
- factory.newEmbeddedDatabase(db_location)
20
- end
16
+ def create_db(db_location)
17
+ puts "Start embedded Neo4j db at #{db_location}"
18
+ factory = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
19
+ factory.newEmbeddedDatabase(db_location)
20
+ end
21
21
 
22
- def factory_class
23
- Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory
24
- Java::OrgNeo4jTest::ImpermanentGraphDatabase
22
+ def factory_class
23
+ Java::OrgNeo4jTest::ImpermanentGraphDatabase
24
+ end
25
25
  end
26
-
27
26
  end
28
27
  end
29
- end
28
+ end
@@ -4,18 +4,20 @@ Neo4j::Session.register_db(:ha_db) do |*args|
4
4
  Neo4j::Embedded::EmbeddedHaSession.new(*args)
5
5
  end
6
6
 
7
- module Neo4j::Embedded
8
- class EmbeddedHaSession < EmbeddedSession
9
- def start
10
- raise Error.new("Embedded HA Neo4j db is already running") if running?
11
- puts "Start embedded HA Neo4j db at #{db_location}"
12
- factory = Java::OrgNeo4jGraphdbFactory::HighlyAvailableGraphDatabaseFactory.new
13
- db_service = factory.newHighlyAvailableDatabaseBuilder(db_location)
7
+ module Neo4j
8
+ module Embedded
9
+ class EmbeddedHaSession < EmbeddedSession
10
+ def start
11
+ fail Error, 'Embedded HA Neo4j db is already running' if running?
12
+ puts "Start embedded HA Neo4j db at #{db_location}"
13
+ factory = Java::OrgNeo4jGraphdbFactory::HighlyAvailableGraphDatabaseFactory.new
14
+ db_service = factory.newHighlyAvailableDatabaseBuilder(db_location)
14
15
 
15
- raise Error.new("Need properties file for HA configuration") unless properties_file
16
- db_service.loadPropertiesFromFile(properties_file)
17
- @graph_db = db_service.newGraphDatabase()
18
- Neo4j::Session._notify_listeners(:session_available, self)
16
+ fail Error, 'Need properties file for HA configuration' unless properties_file
17
+ db_service.loadPropertiesFromFile(properties_file)
18
+ @graph_db = db_service.newGraphDatabase
19
+ Neo4j::Session._notify_listeners(:session_available, self)
20
+ end
19
21
  end
20
22
  end
21
23
  end
@@ -4,14 +4,15 @@ Neo4j::Session.register_db(:impermanent_db) do |*args|
4
4
  Neo4j::Embedded::EmbeddedImpermanentSession.new(*args)
5
5
  end
6
6
 
7
- module Neo4j::Embedded
8
- class EmbeddedImpermanentSession < EmbeddedSession
9
- def start
10
- raise Error.new("Embedded Neo4j db is already running") if running?
11
- #puts "Start test impermanent embedded Neo4j db at #{db_location}"
12
- @graph_db = Java::OrgNeo4jTest::TestGraphDatabaseFactory.new.newImpermanentDatabase()
13
- Neo4j::Session._notify_listeners(:session_available, self)
7
+ module Neo4j
8
+ module Embedded
9
+ class EmbeddedImpermanentSession < EmbeddedSession
10
+ def start
11
+ fail Error, 'Embedded Neo4j db is already running' if running?
12
+ # puts "Start test impermanent embedded Neo4j db at #{db_location}"
13
+ @graph_db = Java::OrgNeo4jTest::TestGraphDatabaseFactory.new.newImpermanentDatabase
14
+ Neo4j::Session._notify_listeners(:session_available, self)
15
+ end
14
16
  end
15
17
  end
16
18
  end
17
-
@@ -1,92 +1,86 @@
1
- module Neo4j::Embedded
2
- class EmbeddedLabel < Neo4j::Label
3
- extend Neo4j::Core::TxMethods
4
- attr_reader :name
5
- JAVA_CLASS = Java::OrgNeo4jGraphdb::DynamicLabel
6
-
7
- def initialize(session, name)
8
- @name = name.to_sym
9
- @session = session
10
- end
1
+ module Neo4j
2
+ module Embedded
3
+ class EmbeddedLabel < Neo4j::Label
4
+ extend Neo4j::Core::TxMethods
5
+ attr_reader :name
6
+ JAVA_CLASS = Java::OrgNeo4jGraphdb::DynamicLabel
7
+
8
+ def initialize(session, name)
9
+ @name = name.to_sym
10
+ @session = session
11
+ end
11
12
 
12
- def to_s
13
- @name
14
- end
13
+ def to_s
14
+ @name
15
+ end
15
16
 
16
- def find_nodes(key=nil, value=nil)
17
- begin
18
- iterator = _find_nodes(key,value)
19
- iterator.to_a.map{|n| n.wrapper}
17
+ def find_nodes(key = nil, value = nil)
18
+ iterator = _find_nodes(key, value)
19
+ iterator.to_a.map(&:wrapper)
20
20
  ensure
21
21
  iterator && iterator.close
22
22
  end
23
- end
24
- tx_methods :find_nodes
23
+ tx_methods :find_nodes
25
24
 
26
- def _find_nodes(key=nil, value=nil)
27
- if (key)
28
- @session.graph_db.find_nodes_by_label_and_property(as_java, key, value).iterator
29
- else
30
- ggo = Java::OrgNeo4jTooling::GlobalGraphOperations.at(@session.graph_db)
31
- ggo.getAllNodesWithLabel(as_java).iterator
25
+ def _find_nodes(key = nil, value = nil)
26
+ if key
27
+ @session.graph_db.find_nodes_by_label_and_property(as_java, key, value).iterator
28
+ else
29
+ ggo = Java::OrgNeo4jTooling::GlobalGraphOperations.at(@session.graph_db)
30
+ ggo.getAllNodesWithLabel(as_java).iterator
31
+ end
32
32
  end
33
33
 
34
- end
35
-
36
- def as_java
37
- self.class.as_java(@name.to_s)
38
- end
34
+ def as_java
35
+ self.class.as_java(@name.to_s)
36
+ end
39
37
 
40
- def create_index(*properties)
38
+ def create_index(*properties)
41
39
  index_creator = @session.graph_db.schema.index_for(as_java)
42
- # we can also use the PropertyConstraintCreator here
43
- properties.inject(index_creator) {|creator, key| creator.on(key.to_s)}.create
44
- end
45
- tx_methods :create_index
40
+ # we can also use the PropertyConstraintCreator here
41
+ properties.inject(index_creator) { |creator, key| creator.on(key.to_s) }.create
42
+ end
43
+ tx_methods :create_index
46
44
 
47
- def indexes()
48
- {
45
+ def indexes
46
+ {
49
47
  property_keys: @session.graph_db.schema.indexes(as_java).map do |index_def|
50
- index_def.property_keys.map{|x| x.to_sym}
48
+ index_def.property_keys.map(&:to_sym)
51
49
  end
52
- }
53
- end
54
- tx_methods :indexes
55
-
56
- def uniqueness_constraints()
57
- {
58
- property_keys: @session.graph_db.schema.constraints(as_java).select do |index_def|
59
- index_def.is_a?(Java::OrgNeo4jKernelImplCoreapiSchema::PropertyUniqueConstraintDefinition)
60
- end.map do |index_def|
61
- index_def.property_keys.map{|x| x.to_sym}
62
- end
63
- }
64
- end
65
- tx_methods :uniqueness_constraints
66
-
67
-
68
- def drop_index(*properties)
69
- @session.graph_db.schema.indexes(as_java).each do |index_def|
70
- # at least one match, TODO
71
- keys = index_def.property_keys.map{|x| x.to_sym}
72
- index_def.drop if (properties - keys).count < properties.count
50
+ }
73
51
  end
52
+ tx_methods :indexes
74
53
 
75
- end
76
- tx_methods :drop_index
54
+ def uniqueness_constraints
55
+ definitions = @session.graph_db.schema.constraints(as_java).select do |index_def|
56
+ index_def.is_a?(Java::OrgNeo4jKernelImplCoreapiSchema::PropertyUniqueConstraintDefinition)
57
+ end
58
+ {
59
+ property_keys: definitions.map { |index_def| index_def.property_keys.map(&:to_sym) }
60
+ }
61
+ end
62
+ tx_methods :uniqueness_constraints
77
63
 
78
- class << self
79
64
 
80
- def as_java(labels)
81
- if labels.is_a?(Array)
82
- return nil if labels.empty?
83
- labels.inject([]) { |result, label| result << JAVA_CLASS.label(label.to_s) }.to_java(JAVA_CLASS)
84
- else
85
- JAVA_CLASS.label(labels.to_s)
65
+ def drop_index(*properties)
66
+ @session.graph_db.schema.indexes(as_java).each do |index_def|
67
+ # at least one match, TODO
68
+ keys = index_def.property_keys.map(&:to_sym)
69
+ index_def.drop if (properties - keys).count < properties.count
70
+ end
71
+ end
72
+ tx_methods :drop_index
73
+
74
+ class << self
75
+ def as_java(labels)
76
+ if labels.is_a?(Array)
77
+ return nil if labels.empty?
78
+ labels.inject([]) { |result, label| result << JAVA_CLASS.label(label.to_s) }.to_java(JAVA_CLASS)
79
+ else
80
+ JAVA_CLASS.label(labels.to_s)
81
+ end
86
82
  end
87
83
  end
88
84
  end
89
85
  end
90
-
91
86
  end
92
-
@@ -1,57 +1,55 @@
1
- module Neo4j::Embedded
2
- class RelsIterator
3
- include Enumerable
4
- extend Neo4j::Core::TxMethods
5
-
6
- def initialize(node, match)
7
- @node = node
8
- @match = match
9
- end
1
+ module Neo4j
2
+ module Embedded
3
+ class RelsIterator
4
+ include Enumerable
5
+ extend Neo4j::Core::TxMethods
6
+
7
+ def initialize(node, match)
8
+ @node = node
9
+ @match = match
10
+ end
10
11
 
11
- def inspect
12
- "Enumerable<Neo4j::Relationship>"
13
- end
12
+ def inspect
13
+ 'Enumerable<Neo4j::Relationship>'
14
+ end
14
15
 
15
- def each(&block)
16
- @node._rels(@match).each {|r| block.call(r.wrapper)}
17
- end
18
- tx_methods :each
16
+ def each(&block)
17
+ @node._rels(@match).each { |r| block.call(r.wrapper) }
18
+ end
19
+ tx_methods :each
19
20
 
20
- def empty?
21
- first == nil
21
+ def empty?
22
+ first.nil?
23
+ end
22
24
  end
23
25
 
24
- end
25
-
26
- class NodesIterator
27
- include Enumerable
28
- extend Neo4j::Core::TxMethods
26
+ class NodesIterator
27
+ include Enumerable
28
+ extend Neo4j::Core::TxMethods
29
29
 
30
- def initialize(node, match)
31
- @node = node
32
- @match = match
33
- end
30
+ def initialize(node, match)
31
+ @node = node
32
+ @match = match
33
+ end
34
34
 
35
- def inspect
36
- "Enumerable<Neo4j::Node>"
37
- end
35
+ def inspect
36
+ 'Enumerable<Neo4j::Node>'
37
+ end
38
38
 
39
- def each(&block)
40
- @node._rels(@match).each {|r| block.call(r.other_node(@node))}
41
- end
42
- tx_methods :each
39
+ def each(&block)
40
+ @node._rels(@match).each { |r| block.call(r.other_node(@node)) }
41
+ end
42
+ tx_methods :each
43
43
 
44
- def empty?
45
- first == nil
44
+ def empty?
45
+ first.nil?
46
+ end
46
47
  end
47
48
 
48
- end
49
-
50
- class EmbeddedNode
51
- class << self
52
- # This method is used to extend a Java Neo4j class so that it includes the same mixins as this class.
53
- def extend_java_class(java_clazz)
54
- java_clazz.class_eval do
49
+ class EmbeddedNode
50
+ class << self
51
+ # This method is used to extend a Java Neo4j class so that it includes the same mixins as this class.
52
+ Java::OrgNeo4jKernelImplCore::NodeProxy.class_eval do
55
53
  include Neo4j::Embedded::Property
56
54
  include Neo4j::EntityEquality
57
55
  include Neo4j::Core::ActiveEntity
@@ -69,7 +67,7 @@ module Neo4j::Embedded
69
67
  tx_methods :exist?
70
68
 
71
69
  def labels
72
- _labels.iterator.map{|x| x.name.to_sym}
70
+ _labels.iterator.map { |x| x.name.to_sym }
73
71
  end
74
72
  tx_methods :labels
75
73
 
@@ -108,7 +106,7 @@ module Neo4j::Embedded
108
106
  tx_methods :set_label
109
107
 
110
108
  def del
111
- _rels.each { |r| r.del }
109
+ _rels.each(&:del)
112
110
  delete
113
111
  nil
114
112
  end
@@ -126,72 +124,72 @@ module Neo4j::Embedded
126
124
  tx_methods :create_rel
127
125
 
128
126
 
129
- def rels(match={})
127
+ def rels(match = {})
130
128
  RelsIterator.new(self, match)
131
129
  end
132
130
 
133
- def nodes(match={})
131
+ def nodes(match = {})
134
132
  NodesIterator.new(self, match)
135
133
  end
136
134
 
137
- def node(match={})
135
+ def node(match = {})
138
136
  rel = _rel(match)
139
137
  rel && rel.other_node(self).wrapper
140
138
  end
141
139
  tx_methods :node
142
140
 
143
- def rel?(match={})
141
+ def rel?(match = {})
144
142
  _rels(match).has_next
145
143
  end
146
144
  tx_methods :rel?
147
145
 
148
- def rel(match={})
146
+ def rel(match = {})
149
147
  _rel(match)
150
148
  end
151
149
  tx_methods :rel
152
150
 
153
- def _rel(match={})
154
- dir = match[:dir] || :both
151
+ def _rel(match = {})
152
+ dir = ToJava.dir_to_java(match[:dir] || :both)
155
153
  rel_type = match[:type]
156
154
 
157
155
  rel = if rel_type
158
- get_single_relationship(ToJava.type_to_java(rel_type), ToJava.dir_to_java(dir))
156
+ get_single_relationship(ToJava.type_to_java(rel_type), dir)
159
157
  else
160
- iter = get_relationships(ToJava.dir_to_java(dir)).iterator
161
- if (iter.has_next)
162
- first = iter.next
163
- raise "Expected to only find one relationship from node #{neo_id} matching #{match.inspect}" if iter.has_next
164
- first
165
- end
166
- end
158
+ iter = get_relationships(dir).iterator
159
+
160
+ if iter.has_next
161
+ first = iter.next
162
+ fail "Expected to only find one relationship from node #{neo_id} matching #{match.inspect}" if iter.has_next
163
+ first
164
+ end
165
+ end
167
166
 
168
167
  between_id = match[:between] && match[:between].neo_id
169
168
 
170
- if (rel && between_id)
171
- rel.other_node(self).neo_id == between_id ? rel : nil
169
+ if rel && between_id
170
+ rel if rel.other_node(self).neo_id == between_id
172
171
  else
173
172
  rel
174
173
  end
175
174
  end
176
175
 
177
- def _rels(match={})
176
+ def _rels(match = {})
178
177
  dir = match[:dir] || :both
179
178
  rel_type = match[:type]
180
179
 
181
180
  rels = if rel_type
182
- get_relationships(ToJava.type_to_java(rel_type), ToJava.dir_to_java(dir)).iterator
183
- else
184
- get_relationships(ToJava.dir_to_java(dir)).iterator
185
- end
181
+ get_relationships(ToJava.type_to_java(rel_type), ToJava.dir_to_java(dir)).iterator
182
+ else
183
+ get_relationships(ToJava.dir_to_java(dir)).iterator
184
+ end
186
185
 
187
186
  between_id = match[:between] && match[:between].neo_id
188
187
 
189
- if (between_id)
190
- rels.find_all{|r| r.end_node.neo_id == between_id || r.start_node.neo_id == between_id}
188
+ if between_id
189
+ rels.find_all { |r| r.end_node.neo_id == between_id || r.start_node.neo_id == between_id }
191
190
  else
192
191
  rels
193
192
  end
194
-
195
193
  end
196
194
 
197
195
  def class
@@ -202,8 +200,5 @@ module Neo4j::Embedded
202
200
  end
203
201
  end
204
202
  end
205
-
206
- extend_java_class(Java::OrgNeo4jKernelImplCore::NodeProxy)
207
203
  end
208
-
209
204
  end