Class: Neo4j::Relationship

Inherits:
Object
  • Object
show all
Includes:
EntityEquality, EntityMarshal, PropertyContainer, Wrapper
Defined in:
lib/neo4j/relationship.rb

Overview

A relationship between two nodes in the graph. A relationship has a start node, an end node and a type. You can attach properties to relationships like Neo4j::Node.

The fact that the relationship API gives meaning to start and end nodes implicitly means that all relationships have a direction. In the example above, rel would be directed from node to otherNode. A relationship’s start node and end node and their relation to outgoing and incoming are defined so that the assertions in the following code are true:

Furthermore, Neo4j guarantees that a relationship is never “hanging freely,” i.e. start_node, end_node and other_node are guaranteed to always return valid, non-nil nodes.

Direct Known Subclasses

Server::CypherRelationship

Defined Under Namespace

Modules: Wrapper

Constant Summary

Constants included from PropertyValidator

PropertyValidator::VALID_PROPERTY_VALUE_CLASSES

Class Method Summary collapse

Instance Method Summary collapse

Methods included from EntityMarshal

#marshal_dump, #marshal_load

Methods included from Wrapper

#neo4j_obj, #wrapper

Methods included from EntityEquality

#==

Methods included from PropertyContainer

#[], #[]=

Methods included from PropertyValidator

#valid_property?, #validate_property!

Class Method Details

._load(neo_id, session = Neo4j::Session.current) ⇒ Object



156
157
158
# File 'lib/neo4j/relationship.rb', line 156

def _load(neo_id, session = Neo4j::Session.current)
  session.load_relationship(neo_id)
end

.create(rel_type, from_node, other_node, props = {}) ⇒ Object



147
148
149
# File 'lib/neo4j/relationship.rb', line 147

def create(rel_type, from_node, other_node, props = {})
  from_node.neo4j_obj.create_rel(rel_type, other_node, props)
end

.load(neo_id, session = Neo4j::Session.current) ⇒ Object



151
152
153
154
# File 'lib/neo4j/relationship.rb', line 151

def load(neo_id, session = Neo4j::Session.current)
  rel = _load(neo_id, session)
  rel && rel.wrapper
end

Instance Method Details

#_end_nodeNeo4j::Node

Same as #end_node but does not wrap the node

Returns:



85
86
87
# File 'lib/neo4j/relationship.rb', line 85

def _end_node
  fail 'not implemented'
end

#_other_node(node) ⇒ Object

Same as #other_node but can return a none wrapped node



135
136
137
138
139
140
141
142
143
# File 'lib/neo4j/relationship.rb', line 135

def _other_node(node)
  if node == _start_node
    _end_node
  elsif node == _end_node
    _start_node
  else
    fail "Node #{node.inspect} is neither start nor end node"
  end
end

#_start_nodeNeo4j::Node

Same as #start_node but does not wrap the node

Returns:



73
74
75
# File 'lib/neo4j/relationship.rb', line 73

def _start_node
  fail 'not implemented'
end

#delObject

This method is abstract.


90
91
92
# File 'lib/neo4j/relationship.rb', line 90

def del
  fail 'not implemented'
end

#end_nodeNeo4j::Node, Object

Returns the end node of this relationship.

Returns:



79
80
81
# File 'lib/neo4j/relationship.rb', line 79

def end_node
  _end_node.wrapper
end

#exist?true, false

This method is abstract.

Returns if the relationship exists.

Returns:

  • (true, false)

    if the relationship exists



102
103
104
# File 'lib/neo4j/relationship.rb', line 102

def exist?
  fail 'not implemented'
end

#get_property(key, value) ⇒ Object

Directly get the property on the relationship (low level method, may need transaction)

Parameters:

  • key (Hash, String)

Returns:

  • the value of the key



61
62
63
# File 'lib/neo4j/relationship.rb', line 61

def get_property(key, value)
  fail 'not implemented'
end

#neo_idObject

This method is abstract.

The unique neo4j id



96
97
98
# File 'lib/neo4j/relationship.rb', line 96

def neo_id
  fail 'not implemented'
end

#other_node(node) ⇒ Neo4j::Node

A convenience operation that, given a node that is attached to this relationship, returns the other node. For example if node is a start node, the end node will be returned, and vice versa. This is a very convenient operation when you’re manually traversing the node space by invoking one of the #rels method on a node. For example, to get the node “at the other end” of a relationship, use the following:

Examples:

end_node = node.rels.first.other_node(node)

Parameters:

  • node (Neo4j::Node)

    the node that we don’t want to return

Returns:

Raises:

  • This operation will throw a runtime exception if node is neither this relationship’s start node nor its end node.

See Also:



130
131
132
# File 'lib/neo4j/relationship.rb', line 130

def other_node(node)
  _other_node(node.neo4j_obj).wrapper
end

#propsHash<Symbol,Object>

Returns all properties of the relationship.

Returns:

  • (Hash<Symbol,Object>)

    all properties of the relationship



30
31
32
# File 'lib/neo4j/relationship.rb', line 30

def props
  fail 'not implemented'
end

#props=(properties) ⇒ Object

replace all properties with new properties

Parameters:

  • properties (Hash)

    a hash of properties the relationship should have



36
37
38
# File 'lib/neo4j/relationship.rb', line 36

def props=(properties)
  fail 'not implemented'
end

#rel_typeSymbol

Returns the relationship name

Examples:

a = Neo4j::Node.new
a.create_rel(:friends, node_b)
a.rels.first.rel_type # => :friends

Returns:

  • (Symbol)

    the type of the relationship



113
114
115
# File 'lib/neo4j/relationship.rb', line 113

def rel_type
  fail 'not implemented'
end

#remove_property(key) ⇒ Object

Directly remove the property on the relationship (low level method, may need transaction)



47
48
49
# File 'lib/neo4j/relationship.rb', line 47

def remove_property(key)
  fail 'not implemented'
end

#set_property(key, value) ⇒ Object

Directly set the property on the relationship (low level method, may need transaction)

Parameters:

  • key (Hash, String)
  • value

    see Neo4j::PropertyValidator::VALID_PROPERTY_VALUE_CLASSES for valid values



54
55
56
# File 'lib/neo4j/relationship.rb', line 54

def set_property(key, value)
  fail 'not implemented'
end

#start_nodeNeo4j::Node, Object

Returns the start node of this relationship.

Returns:



67
68
69
# File 'lib/neo4j/relationship.rb', line 67

def start_node
  _start_node.wrapper
end

#update_props(properties) ⇒ Object

Updates the properties, keeps old properties

Parameters:

  • properties (Hash<Symbol,Object>)

    hash of properties that should be updated on the relationship



42
43
44
# File 'lib/neo4j/relationship.rb', line 42

def update_props(properties)
  fail 'not implemented'
end