Class: DTC::Utils::Visitor::Builder
- Inherits:
-
Object
- Object
- DTC::Utils::Visitor::Builder
- Defined in:
- lib/dtc/utils/visitor.rb
Overview
Base class for visitors that create a data structure based on calls.
Obtain result of visit with ‘root`
Default behaviour is to build an array based structure. Override ‘new_inner` to create and return new inner nodes, and `new_outer` to create and return outer nodes.
Example:
DTC::Utils::Visitor::DSL::accept(DTC::Utils::Visitor::Builder) {
container(:arg1) { child_item(:arg2) }
root_child_item
}.root
=>
[[:inner, [:container, :arg1], [:outer, [:child_item, :arg2]]],
[:outer, [:root_child_item]]]
Direct Known Subclasses
Instance Method Summary collapse
- #add(*args) ⇒ Object
- #enter(*args) ⇒ Object
-
#initialize(root = []) ⇒ Builder
constructor
A new instance of Builder.
- #leave ⇒ Object
- #root ⇒ Object
Constructor Details
Instance Method Details
#add(*args) ⇒ Object
145 146 147 |
# File 'lib/dtc/utils/visitor.rb', line 145 def add *args new_outer *args end |
#enter(*args) ⇒ Object
137 138 139 140 141 |
# File 'lib/dtc/utils/visitor.rb', line 137 def enter *args container = new_inner(*args) @stack.push(container) if container container end |
#leave ⇒ Object
142 143 144 |
# File 'lib/dtc/utils/visitor.rb', line 142 def leave @stack.pop end |
#root ⇒ Object
134 135 136 |
# File 'lib/dtc/utils/visitor.rb', line 134 def root @stack.first end |