module Redgraph::Graph::EdgeMethods
Public Instance Methods
add_edge(edge)
click to toggle source
Adds an edge. If successul it returns the created object, otherwise false
# File lib/redgraph/graph/edge_methods.rb, line 8 def add_edge(edge) merge_or_add_edge(edge, :create) end
count_edges(type: nil, properties: nil)
click to toggle source
Counts edges. Options:
-
type: filter by type
-
properties: filter by properties
# File lib/redgraph/graph/edge_methods.rb, line 68 def count_edges(type: nil, properties: nil) edge = Edge.new(type: type, properties: properties) cmd = "MATCH #{edge.to_query_string} RETURN COUNT(edge)" query(cmd).flatten[0] end
edges(type: nil, src: nil, dest: nil, properties: nil, order: nil, limit: nil, skip: nil)
click to toggle source
Finds edges. Options:
-
type
-
src
-
dest
-
properties
-
order
-
limit
-
skip
# File lib/redgraph/graph/edge_methods.rb, line 29 def edges(type: nil, src: nil, dest: nil, properties: nil, order: nil, limit: nil, skip: nil) _order = if order raise MissingAliasPrefixError unless order.include?("edge.") "ORDER BY #{order}" end _limit = "LIMIT #{limit}" if limit _skip = "SKIP #{skip}" if skip _where = if src || dest clauses = [ ("ID(src) = #{src.id}" if src), ("ID(dest) = #{dest.id}" if dest) ].compact.join(" AND ") "WHERE #{clauses}" end edge = Edge.new(type: type, src: src, dest: dest, properties: properties) cmd = "MATCH #{edge.to_query_string} #{_where} RETURN src, edge, dest #{_order} #{_skip} #{_limit}" result = _query(cmd) result.resultset.map do |item| src = node_from_resultset_item(item["src"]) dest = node_from_resultset_item(item["dest"]) edge = edge_from_resultset_item(item["edge"]) edge.src = src edge.dest = dest edge end end
merge_edge(edge)
click to toggle source
Merges (creates an edge unless one with the same type and properties exists) an edge. If successul it returns the object, otherwise false
# File lib/redgraph/graph/edge_methods.rb, line 15 def merge_edge(edge) merge_or_add_edge(edge, :merge) end
Private Instance Methods
edge_from_resultset_item(item)
click to toggle source
# File lib/redgraph/graph/edge_methods.rb, line 78 def edge_from_resultset_item(item) (edge_id, type_id, _src_id, _dest_id, props) = item attrs = HashWithIndifferentAccess.new props.each do |(index, type, value)| attrs[get_property(index)] = value end Edge.new.tap do |edge| edge.id = edge_id edge.type = get_relationship_type(type_id) edge.properties = attrs end end
merge_or_add_edge(edge, verb = :create)
click to toggle source
# File lib/redgraph/graph/edge_methods.rb, line 93 def merge_or_add_edge(edge, verb = :create) verb = verb == :create ? "CREATE" : "MERGE" result = _query("MATCH (src), (dest) WHERE ID(src) = #{edge.src.id} AND ID(dest) = #{edge.dest.id} #{verb} #{edge.to_query_string} RETURN ID(edge)") return false if result.stats[:relationships_created] != 1 id = result.resultset.first["ID(edge)"] edge.id = id edge end