Class: EXEL::Job::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/exel/job.rb

Overview

Defines the EXEL DSL methods and is used to convert a block of Ruby code into an abstract syntax tree (AST)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeParser

Returns a new instance of Parser.



51
52
53
# File 'lib/exel/job.rb', line 51

def initialize
  @ast = SequenceNode.new
end

Instance Attribute Details

#astObject (readonly)

Returns the value of attribute ast.



49
50
51
# File 'lib/exel/job.rb', line 49

def ast
  @ast
end

Class Method Details

.parse(dsl_proc_or_code) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/exel/job.rb', line 55

def self.parse(dsl_proc_or_code)
  parser = Parser.new
  if dsl_proc_or_code.is_a?(::Proc)
    parser.instance_eval(&dsl_proc_or_code)
  else
    parser.instance_eval(dsl_proc_or_code)
  end
  parser.ast
end

Instance Method Details

#async(options = {}, &block) ⇒ Object



70
71
72
# File 'lib/exel/job.rb', line 70

def async(options = {}, &block)
  add_instruction_node(Processors::AsyncProcessor, parse(block), options)
end

#contextObject



87
88
89
# File 'lib/exel/job.rb', line 87

def context
  DeferredContextValue.new
end

#listen(options) ⇒ Object



82
83
84
85
# File 'lib/exel/job.rb', line 82

def listen(options)
  instruction = ListenInstruction.new(options.fetch(:for), options.fetch(:with))
  @ast.add_child(InstructionNode.new(instruction))
end

#process(options, &block) ⇒ Object



65
66
67
68
# File 'lib/exel/job.rb', line 65

def process(options, &block)
  processor_class = options.delete(:with)
  add_instruction_node(processor_class, parse(block), options)
end

#run(options = {}, &block) ⇒ Object



78
79
80
# File 'lib/exel/job.rb', line 78

def run(options = {}, &block)
  add_instruction_node(Processors::RunProcessor, parse(block), options)
end

#split(options = {}, &block) ⇒ Object



74
75
76
# File 'lib/exel/job.rb', line 74

def split(options = {}, &block)
  add_instruction_node(Processors::SplitProcessor, parse(block), options)
end