Module: Wukong::DriverMethods

Included in:
EventMachineDriver, SpecHelpers::UnitTestDriver
Defined in:
lib/wukong/driver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dataflowObject

Returns the value of attribute dataflow.



4
5
6
# File 'lib/wukong/driver.rb', line 4

def dataflow
  @dataflow
end

#settingsObject

Returns the value of attribute settings.



6
7
8
# File 'lib/wukong/driver.rb', line 6

def settings
  @settings
end

Instance Method Details

#add_serialization(dataflow, direction, label, options) ⇒ Object



25
26
27
28
29
30
# File 'lib/wukong/driver.rb', line 25

def add_serialization(dataflow, direction, label, options)
  case direction
  when :to   then dataflow.push    build_serializer(direction, label, options)
  when :from then dataflow.unshift build_serializer(direction, label, options)
  end
end

#build_serializer(direction, label, options) ⇒ Object



21
22
23
# File 'lib/wukong/driver.rb', line 21

def build_serializer(direction, label, options)
  lookup_and_build("#{direction}_#{label}", options)
end

#construct_dataflow(label, options) ⇒ Object

So pretty...



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/wukong/driver.rb', line 50

def construct_dataflow(label, options)
  dataflow = lookup_and_build(label, options)
  dataflow = dataflow.respond_to?(:stages) ? dataflow.directed_sort.map{ |name| dataflow.stages[name] } : [ dataflow ]
  expected_input_model  = (options[:consumes].constantize rescue nil)    || dataflow.first.expected_record_type(:consumes)
  dataflow.unshift lookup_and_build(:recordize, model: expected_input_model)  if expected_input_model
  expected_output_model = (options[:produces].constantize rescue nil)    || dataflow.first.expected_record_type(:produces)
  dataflow.push lookup_and_build(:recordize, model: expected_output_model)    if expected_output_model
  expected_input_serialization  = options[:from] || dataflow.last.expected_serialization(:from)
  add_serialization(dataflow, :from, expected_input_serialization, options)   if expected_input_serialization
  expected_output_serialization = options[:to]   || dataflow.last.expected_serialization(:to)
  add_serialization(dataflow, :to, expected_output_serialization, options)    if expected_output_serialization
  dataflow.push self
end

#driverObject



8
9
10
# File 'lib/wukong/driver.rb', line 8

def driver
  @driver ||= Driver.new(dataflow)
end

#finalize_and_stop_dataflowObject



42
43
44
45
46
47
# File 'lib/wukong/driver.rb', line 42

def finalize_and_stop_dataflow
  dataflow.each do |stage|
    stage.finalize(&driver.advance(stage)) if stage.respond_to?(:finalize)
    stage.stop
  end      
end

#finalize_dataflowObject



36
37
38
39
40
# File 'lib/wukong/driver.rb', line 36

def finalize_dataflow
  dataflow.each do |stage|
    stage.finalize(&driver.advance(stage)) if stage.respond_to?(:finalize)
  end
end

#lookup(label) ⇒ Object

Raises:



12
13
14
15
# File 'lib/wukong/driver.rb', line 12

def lookup(label)
  raise Wukong::Error.new("could not find definition for <#{label}>") unless Wukong.registry.registered?(label.to_sym)
  Wukong.registry.retrieve(label.to_sym)
end

#lookup_and_build(label, options = {}) ⇒ Object



17
18
19
# File 'lib/wukong/driver.rb', line 17

def lookup_and_build(label, options = {})
  lookup(label).build(options)
end

#setup_dataflowObject



32
33
34
# File 'lib/wukong/driver.rb', line 32

def setup_dataflow
  dataflow.each(&:setup)
end