Class: Wongi::Engine::DSL::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/wongi-engine/dsl/builder.rb

Instance Method Summary collapse

Constructor Details

#initializeBuilder

Returns a new instance of Builder.



3
4
5
6
7
# File 'lib/wongi-engine/dsl/builder.rb', line 3

def initialize
  @current_section = nil
  @current_clause = nil
  @clauses = []
end

Instance Method Details

#accept(klass) ⇒ Object

Raises:



41
42
43
44
45
46
# File 'lib/wongi-engine/dsl/builder.rb', line 41

def accept(klass)
  raise DefinitionError, "Cannot create an acceptor without a clause" if @current_clause.nil?

  @clauses << { section: @current_section, clause: @current_clause, accept: klass }
  @current_clause = nil
end

#action(klass = nil, &block) ⇒ Object

Raises:



27
28
29
30
31
32
# File 'lib/wongi-engine/dsl/builder.rb', line 27

def action(klass = nil, &block)
  raise DefinitionError, "Cannot create an action without a clause" if @current_clause.nil?

  @clauses << { section: @current_section, clause: @current_clause, action: klass || block }
  @current_clause = nil
end

#body(klass = nil, &block) ⇒ Object

Raises:



34
35
36
37
38
39
# File 'lib/wongi-engine/dsl/builder.rb', line 34

def body(klass = nil, &block)
  raise DefinitionError, "Cannot create a body without a clause" if @current_clause.nil?

  @clauses << { section: @current_section, clause: @current_clause, body: klass || block }
  @current_clause = nil
end

#build(&definition) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/wongi-engine/dsl/builder.rb', line 9

def build(&definition)
  instance_eval(&definition)
  @clauses.each do |c|
    Wongi::Engine::DSL.sections[c[:section]] ||= Class.new do
      include Generated
    end
    Wongi::Engine::DSL.sections[c[:section]].create_dsl_method(c)
  end
end

#clause(*c) ⇒ Object



23
24
25
# File 'lib/wongi-engine/dsl/builder.rb', line 23

def clause(*c)
  @current_clause = c
end

#section(s) ⇒ Object



19
20
21
# File 'lib/wongi-engine/dsl/builder.rb', line 19

def section(s)
  @current_section = s
end