class Graphy::Node

Attributes

diagram[RW]
name[RW]
shape[RW]

Public Class Methods

for(node, **params) click to toggle source
# File lib/graphy/node.rb, line 5
def self.for(node, **params)
  case node
  when Entity, Node
    node
  when String
    self.new(**params.merge(name: node))
  else
    raise 'Invalid node class'
  end
end
new(**params) click to toggle source
# File lib/graphy/node.rb, line 16
def initialize(**params)
  @name = params[:name].to_s
  @diagram = params[:diagram]
  @shape = params.fetch(:shape, 'circle')
end

Public Instance Methods

add_dependency(dependency, **options) click to toggle source
# File lib/graphy/node.rb, line 22
def add_dependency(dependency, **options)
  dependency = self.class.for(dependency, diagram: diagram)
  return if Registry.edge?(self, dependency)

  Registry.add_edge(self, dependency)
  draw_edge(dependency, **options)
end
Also aliased as: uses
build(&block) click to toggle source
# File lib/graphy/node.rb, line 31
def build(&block)
  instance_eval(&block) if block_given?
  gnode
end
gnode() click to toggle source
# File lib/graphy/node.rb, line 36
def gnode
  @gnode ||= find_or_draw
end
to_s() click to toggle source
# File lib/graphy/node.rb, line 40
def to_s
  "#{self.class}<#{name}>"
end
uses(dependency, **options)
Alias for: add_dependency

Protected Instance Methods

draw_edge(dependency, **options) click to toggle source
# File lib/graphy/node.rb, line 46
def draw_edge(dependency, **options)
  diagram.draw_edge(gnode, dependency.gnode, options)
end
label() click to toggle source
# File lib/graphy/node.rb, line 57
def label
  "#{name}\n"
end
node_params() click to toggle source
# File lib/graphy/node.rb, line 50
def node_params
  {
    label: label,
    shape: shape
  }
end

Private Instance Methods

find_or_draw() click to toggle source
# File lib/graphy/node.rb, line 63
def find_or_draw
  return diagram.get_node(name) if diagram.node_exists?(name)
  diagram.draw_node(name, node_params)
end