class Newral::Graphs::Graph

Attributes

edges[R]
nodes[R]

Public Class Methods

new( nodes: [], edges: [] ) click to toggle source
# File lib/newral/graphs/graph.rb, line 8
def initialize( nodes: [], edges: [] )
  @nodes = nodes
  @edges = edges
end

Public Instance Methods

add_edge( edge ) click to toggle source
# File lib/newral/graphs/graph.rb, line 13
def add_edge( edge )
  unless @nodes.member?( edge.start_node ) && @nodes.member?( edge.end_node )
    # let´s try to find it
    @nodes.each do |node|
      edge.start_node = node if node.respond_to?( :name ) && node.name == edge.start_node
      edge.end_node = node if node.respond_to?( :name ) && node.name == edge.end_node
    end 
    raise Errors::UnkownNode unless @nodes.member?( edge.start_node ) && @nodes.member?( edge.end_node )
  end
  @edges << edge 
  self
end
add_edges( edges, directed: false ) click to toggle source

we can add also like this {1=> 2, 2 => 5 }

# File lib/newral/graphs/graph.rb, line 41
def add_edges( edges, directed: false )
  if edges.kind_of?( Hash )
    edges.each do |from,to|
      @edges << Edge.new( start_node: from, end_node: to, directed: directed )
    end 
  else 
    edges.each do |edge|
      add_edge edge
    end
  end
  self
end
add_node( node ) click to toggle source
# File lib/newral/graphs/graph.rb, line 26
def add_node( node )
  @nodes < node 
  self
end
add_nodes( nodes ) click to toggle source
# File lib/newral/graphs/graph.rb, line 31
def add_nodes( nodes )
  @nodes = @nodes+nodes
  self
end
find_edges( node ) click to toggle source
# File lib/newral/graphs/graph.rb, line 54
def find_edges( node )
  @edges.collect do |edge| 
    keep = edge.directed ? edge.start_node == node : edge.start_node == node || edge.end_node == node
    edge if keep
  end.compact
end
find_node_by_name( name ) click to toggle source
# File lib/newral/graphs/graph.rb, line 36
def find_node_by_name( name )
  @nodes.find{ |node| node.name == name }
end