class Yarrow::Process::Workflow

Public Class Methods

new(input) click to toggle source
# File lib/yarrow/process/workflow.rb, line 4
def initialize(input)
  @input = input
  @processors = []
end

Public Instance Methods

connect(processor) click to toggle source
# File lib/yarrow/process/workflow.rb, line 9
def connect(processor)
  provided_input = if @processors.any?
    @processors.last.provides
  else
    @input.class.to_s
  end

  if processor.can_accept?(provided_input)
    @processors << processor
  else
    raise ArgumentError.new(
      "`#{processor.class}` accepts `#{processor.accepts}` but was connected to `#{provided_input}`"
    )
  end
end
process(&block) click to toggle source
# File lib/yarrow/process/workflow.rb, line 25
def process(&block)
  result = @input

  @processors.each do |processor|
    result = processor.process(result)
  end

  block.call(result)
end