Class: DTC::Utils::Visitor::Builder

Inherits:
Object
  • Object
show all
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

HashBuilder, Recorder

Instance Method Summary collapse

Constructor Details

#initialize(root = []) ⇒ Builder

Returns a new instance of Builder.



131
132
133
# File 'lib/dtc/utils/visitor.rb', line 131

def initialize root = []
  @stack = [root]
end

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

#leaveObject



142
143
144
# File 'lib/dtc/utils/visitor.rb', line 142

def leave
  @stack.pop
end

#rootObject



134
135
136
# File 'lib/dtc/utils/visitor.rb', line 134

def root
  @stack.first
end