module Riml::Walkable
Public Instance Methods
child_after(node)
click to toggle source
# File lib/riml/walkable.rb, line 44 def child_after(node) node.next end
child_previous_to(node)
click to toggle source
# File lib/riml/walkable.rb, line 22 def child_previous_to(node) node.previous end
each(&block)
click to toggle source
# File lib/riml/walkable.rb, line 5 def each(&block) children.each(&block) end
Also aliased as: walk
index_by_children()
click to toggle source
# File lib/riml/walkable.rb, line 64 def index_by_children parent.children.find_index(self) end
index_by_member()
click to toggle source
# File lib/riml/walkable.rb, line 54 def index_by_member attrs = parent.members attrs.each_with_index do |attr, i| if parent.send(attr) == self return i end end nil end
insert_after(node, new_node)
click to toggle source
# File lib/riml/walkable.rb, line 48 def insert_after(node, new_node) idx = children.find_index(node) return unless idx children.insert(idx + 1, new_node) end
insert_before(node, new_node)
click to toggle source
# File lib/riml/walkable.rb, line 26 def insert_before(node, new_node) idx = children.find_index(node) return unless idx children.insert(idx - 1, new_node) end
next()
click to toggle source
# File lib/riml/walkable.rb, line 32 def next idx = index_by_member if idx && parent.members[idx + 1] attr = parent.members[idx + 1] return parent.send(attr) else idx = index_by_children return unless idx parent.children.fetch(idx + 1) end end
previous()
click to toggle source
# File lib/riml/walkable.rb, line 10 def previous idx = index_by_member if idx && parent.members[idx - 1] attr = parent.members[idx - 1] return send(attr) else idx = index_by_children return unless idx parent.children.fetch(idx - 1) end end
remove()
click to toggle source
# File lib/riml/walkable.rb, line 68 def remove idx = index_by_member if idx attr = parent.members[idx] parent.send("#{attr}=", nil) else idx = index_by_children parent.children.slice!(idx) if idx end end
replace_with(new_node)
click to toggle source
# File lib/riml/walkable.rb, line 79 def replace_with(new_node) idx = index_by_member if idx attr = parent.members[idx] new_node.parent = parent parent.send("#{attr}=", new_node) new_node else idx = index_by_children return unless idx new_node.parent = parent parent.children.insert(idx, new_node) parent.children.slice!(idx + 1) new_node end end