Class: Stupidedi::Zipper::RootCursor

Inherits:
AbstractCursor show all
Defined in:
lib/stupidedi/zipper/root_cursor.rb

Instance Attribute Summary collapse

Querying the Tree Location collapse

Traversing the Tree collapse

Editing the Tree collapse

Instance Method Summary collapse

Methods inherited from AbstractCursor

#append_child, #between, #child, #children, #dangle, #descendant, #down, #flatten, #insert_left, #insert_right, #prepend_child

Constructor Details

#initialize(node) ⇒ RootCursor

Returns a new instance of RootCursor.



13
14
15
16
# File 'lib/stupidedi/zipper/root_cursor.rb', line 13

def initialize(node)
  @node, @path =
    node, Root
end

Instance Attribute Details

#nodeAbstractNode (readonly)

Returns:

  • (AbstractNode)


8
9
10
# File 'lib/stupidedi/zipper/root_cursor.rb', line 8

def node
  @node
end

#pathAbstractPath (readonly)

Returns:



11
12
13
# File 'lib/stupidedi/zipper/root_cursor.rb', line 11

def path
  @path
end

Instance Method Details

#append(node) ⇒ EditedCursor, void

Insert a new sibling node after (to the right of) the current node, and navigate to the new sibling node

Returns:



91
92
93
94
# File 'lib/stupidedi/zipper/root_cursor.rb', line 91

def append(node)
  raise Exceptions::ZipperError,
    "root node has no siblings"
end

#deleteEditedCursor, void

Remove the current node, and navigate to the next (rightward) node if one exists. Otherwise, navigate to the previous (leftward) node if one exists. Otherwise, create a placeholder where the next sibling node will be created.

Returns:



111
112
113
114
# File 'lib/stupidedi/zipper/root_cursor.rb', line 111

def delete
  raise Exceptions::ZipperError,
    "cannot delete root node"
end

#depthInteger

Distance from the root node

Returns:

  • (Integer)


22
23
24
# File 'lib/stupidedi/zipper/root_cursor.rb', line 22

def depth
  0
end

#firstAbstractCursor

Navigate to the first (leftmost) sibling node

Returns:



50
51
52
# File 'lib/stupidedi/zipper/root_cursor.rb', line 50

def first
  self
end

#first?

True when the node has no leftward siblings



27
28
29
# File 'lib/stupidedi/zipper/root_cursor.rb', line 27

def first?
  true
end

#lastAbstractCursor

Navigate to the last (rightmost) sibling node

Returns:



55
56
57
# File 'lib/stupidedi/zipper/root_cursor.rb', line 55

def last
  self
end

#last?

True when the node has no rightward siblings



32
33
34
# File 'lib/stupidedi/zipper/root_cursor.rb', line 32

def last?
  true
end

#leaf?

True if the node has no children



37
38
39
# File 'lib/stupidedi/zipper/root_cursor.rb', line 37

def leaf?
  @node.leaf? or @node.children.empty?
end

#nextAbstractCursor, void

Navigate to the next (rightward) sibling node

Returns:



61
62
63
64
# File 'lib/stupidedi/zipper/root_cursor.rb', line 61

def next
  raise Exceptions::ZipperError,
    "root node has no siblings"
end

#prepend(node) ⇒ EditedCursor, void

Insert a new sibling node before (to the left of) the current node, and navigate to the new sibling node

Returns:



98
99
100
101
# File 'lib/stupidedi/zipper/root_cursor.rb', line 98

def prepend(node)
  raise Exceptions::ZipperError,
    "root node has no siblings"
end

#prevAbstractCursor, void

Navigate to the previous (leftward) sibling node

Returns:



68
69
70
71
# File 'lib/stupidedi/zipper/root_cursor.rb', line 68

def prev
  raise Exceptions::ZipperError,
    "root node has no siblings"
end

#replace(node) ⇒ AbstractCursor, RootCursor

Replace the current node with the given node

Returns:



105
106
107
# File 'lib/stupidedi/zipper/root_cursor.rb', line 105

def replace(node)
  RootCursor.new(node)
end

#rootRootCursor

Navigate to the root node

Returns:



75
76
77
# File 'lib/stupidedi/zipper/root_cursor.rb', line 75

def root
  self
end

#root?

True if the node has no parent



42
43
44
# File 'lib/stupidedi/zipper/root_cursor.rb', line 42

def root?
  true
end

#upAbstractCursor, void

Navigate to the parent node

Returns:



81
82
83
84
# File 'lib/stupidedi/zipper/root_cursor.rb', line 81

def up
  raise Exceptions::ZipperError,
    "root node has no parent"
end