class NetworkDrawer::Element::Node

Replesent of node

Constants

DEFAULT_STYLE

Public Class Methods

new(initial_values = {}, style = {}) click to toggle source
Calls superclass method NetworkDrawer::Element::Element::new
# File lib/network_drawer/element/node.rb, line 9
def initialize(initial_values = {}, style = {})
  super
  @default_style = DEFAULT_STYLE
end

Public Instance Methods

to_code() click to toggle source
# File lib/network_drawer/element/node.rb, line 14
def to_code
  style = style(self.type).dup
  style.merge!(self.to_hash)
  self.max_column = style[:max_column]
  style.merge!(label: build_label, tooltip: self.name, URL: self.url )
  style.delete(:ports)
  style.delete(:modules)
  "node(:\"#{self.id}\", #{style})"
end

Private Instance Methods

build_label() click to toggle source
# File lib/network_drawer/element/node.rb, line 26
def build_label
  label = ''

  label << port_label
  if [num_ports, num_modules].max > 0
    label << "<tr border='1'><td border='1'"
    label << " colspan=\"#{num_columns}\">#{self.name}</td></tr>"
  else
    label << "<tr border='0'><td border='0'>#{self.name}</td></tr>"
  end
  label << module_label

  "<table border='0'>#{label}</table>"
end
module_label() click to toggle source
# File lib/network_drawer/element/node.rb, line 54
def module_label
  label = ''
  if num_modules > 0
    label << "<tr border='1'>"
    self.modules.each_with_index do |p, i|
      label << "<td border='1' port=\"p#{p.to_s.gsub('/', '')}\">#{p}</td>"
      label << row_separator(i, num_modules)
    end
    label << '</tr>'
  end
  label
end
num_columns() click to toggle source
# File lib/network_drawer/element/node.rb, line 76
def num_columns
  number = [num_ports, num_modules, 1].max
  if self.max_column && self.max_column.respond_to?(:to_i)
    number = [self.max_column, number].min
  end
  number
end
num_modules() click to toggle source
# File lib/network_drawer/element/node.rb, line 92
def num_modules
  if self.modules && self.modules.respond_to?(:size)
    self.modules.size
  else
    0
  end
end
num_ports() click to toggle source
# File lib/network_drawer/element/node.rb, line 84
def num_ports
  if self.ports && self.ports.respond_to?(:size)
    self.ports.size
  else
    0
  end
end
port_label() click to toggle source
# File lib/network_drawer/element/node.rb, line 41
def port_label
  label = ''
  if num_ports > 0
    label << "<tr border='1'>"
    self.ports.each_with_index do |p, i|
      label << "<td border='1' port=\"p#{p.to_s.gsub('/', '')}\">#{p}</td>"
      label << row_separator(i, num_ports)
    end
    label << '</tr>'
  end
  label
end
row_separator(index, size) click to toggle source
# File lib/network_drawer/element/node.rb, line 67
def row_separator(index, size)
  return '' unless self.max_column && self.max_column.to_i > 0
  if ((index + 1) % self.max_column.to_i == 0) && index + 1 < size
    "</tr><tr border='1'>"
  else
    ''
  end
end