Class: ROM::Neo4j::Relation
- Inherits:
-
Relation
- Object
- Relation
- ROM::Neo4j::Relation
- Defined in:
- lib/rom/neo4j/relation.rb
Overview
Relation supporting Cypher graph traversals. Configure the sub-graph for the relation by specifying a `match` pattern, and collect a dataset for mapping by specifying nodes, edges and properties in the `returns`.
Class Method Summary collapse
-
.inherited(klass) ⇒ Object
private
Builds data structures to configure the relation DSL.
-
.matches(*conditions) ⇒ Object
Specify a `MATCH` clause for the relation's graph traversal.
-
.returns(*conditions) ⇒ Object
Specify a `RETURN` clause for the relation.
-
.start(*conditions) ⇒ Object
Specify a `START` node for the for the relation's graph traversal.
Instance Method Summary collapse
-
#each(&iter) ⇒ Object
The row iterator.
Class Method Details
.inherited(klass) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Builds data structures to configure the relation DSL.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rom/neo4j/relation.rb', line 35 def self.inherited(klass) klass.class_eval do class << self attr_reader :traversal end end klass.instance_variable_set('@traversal', { start: false, match: false, return: false }) super end |
.matches(*conditions) ⇒ Object
Specify a `MATCH` clause for the relation's graph traversal. If you’re coming from the SQL world, you can think of this as similar to a `SELECT FROM`, except that it matches on a topological structure rather than a schema.
81 82 83 |
# File 'lib/rom/neo4j/relation.rb', line 81 def self.matches(*conditions) @traversal[:match] = conditions end |
.returns(*conditions) ⇒ Object
Specify a `RETURN` clause for the relation. This will define the structure of objects in the returned dataset.
Any combination of nodes, edges and properties can be selected, as well as custom aliases and distinct objects.
93 94 95 |
# File 'lib/rom/neo4j/relation.rb', line 93 def self.returns(*conditions) @traversal[:return] = conditions end |
.start(*conditions) ⇒ Object
Specify a `START` node for the for the relation's graph traversal. This is only required for legacy indexes. In most cases Cypher can infer the starting points to anchor a graph traversal from the pattern specified in a `MATCH` clause.
58 59 60 |
# File 'lib/rom/neo4j/relation.rb', line 58 def self.start(*conditions) @traversal[:start] = conditions end |
Instance Method Details
#each(&iter) ⇒ Object
The row iterator. Calling this kicks off the actual query to the database server.
Before triggering the enumerator, it rebuilds the dataset with the default traversal configured by the relation DSL.
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/rom/neo4j/relation.rb', line 21 def each(&iter) # Configure the default traversal unless @configured @configured = true self.class.traversal.each do |query_method, conditions| @dataset = @dataset.send(query_method.to_sym, *conditions) if conditions end end @dataset.each(&iter) end |