Class: PEROBS::SpaceTreeNodeLink

Inherits:
Object
  • Object
show all
Defined in:
lib/perobs/SpaceTreeNodeLink.rb

Overview

This class is used to form the links between the in-memory SpaceTreeNode objects. The link is based on the address of the node in the file. The class objects transparently convert the address into a corresponding SpaceTreeNode object and pass on all method calls.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tree, node_or_address) ⇒ SpaceTreeNodeLink

Create a new SpaceTreeNodeLink object.

Parameters:

  • tree (SpaceTree)

    The SpaceTree that holds the nodes.

  • node_or_address (SpaceTreeNode or SpaceTreeNodeLink or Integer)

    a SpaceTreeNode, SpaceTreeNodeLink reference or the node address in the file.



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 43

def initialize(tree, node_or_address)
  @tree = tree
  if node_or_address.is_a?(SpaceTreeNode) ||
     node_or_address.is_a?(SpaceTreeNodeLink)
    @node_address = node_or_address.node_address
  elsif node_or_address.is_a?(Integer)
    @node_address = node_or_address
  else
    PEROBS.log.fatal "Unsupported argument type #{node_or_address.class}"
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

All calls to a SpaceTreeNodeLink object will be forwarded to the corresponding SpaceTreeNode object. If that



57
58
59
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 57

def method_missing(method, *args, &block)
  get_node.send(method, *args, &block)
end

Instance Attribute Details

#node_addressObject (readonly)

Returns the value of attribute node_address.



36
37
38
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 36

def node_address
  @node_address
end

Instance Method Details

#!=(node) ⇒ Boolean

Compare this node to another node.

Returns:

  • (Boolean)

    true if node address is not identical, false otherwise



74
75
76
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 74

def !=(node)
  @node_address != node.node_address
end

#==(node) ⇒ Boolean

Compare this node to another node.

Returns:

  • (Boolean)

    true if node address is identical, false otherwise



68
69
70
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 68

def ==(node)
  @node_address == node.node_address
end

Check the link to a sub-node. This method silently ignores all errors if the sub-node does not exist.

Returns:

  • (Boolean)

    True if link is OK, false otherweise



81
82
83
84
85
86
87
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 81

def check_node_link(branch, stack)
  begin
    return get_node.check_node_link(branch, stack)
  rescue
    return false
  end
end

#respond_to?(method, include_private = false) ⇒ Boolean

Make it properly introspectable.

Returns:

  • (Boolean)


62
63
64
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 62

def respond_to?(method, include_private = false)
  get_node.respond_to?(method)
end

#to_sObject

Returns Textual version of the SpaceTreeNode.

Returns:

  • Textual version of the SpaceTreeNode



90
91
92
# File 'lib/perobs/SpaceTreeNodeLink.rb', line 90

def to_s
  get_node.to_s
end