class Ni::Flows::BranchInteractor

Attributes

action[RW]
condition[RW]
interactor_klass[RW]

Public Class Methods

new(top_level_interactor_klass, args, options, &block) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 7
def initialize(top_level_interactor_klass, args, options, &block)
  if options[:when].blank? || !options[:when].is_a?(Proc)
    raise "Can't build brunch without a condition"
  else
    self.condition = options[:when]
  end

  if args.size == 2
    interactor_klass, action = args
  else
    id_or_interactor = args.first
    action = :perform
    
    if id_or_interactor.is_a?(Symbol)          
      interactor_klass = build_anonymous_interactor(top_level_interactor_klass, id_or_interactor, &block)
    else
      interactor_klass = id_or_interactor
    end
  end

  self.interactor_klass, self.action = interactor_klass, action
end

Public Instance Methods

call(context, params={}) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 30
def call(context, params={})
  return unless self.condition.call(context)
    
  run(context, params)
end
call_for_wait_continue(context, params={}) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 36
def call_for_wait_continue(context, params={})
  call(context, params)
end
handle_current_wait?(context, name) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 40
def handle_current_wait?(context, name)
  self.condition.call(context) && super
end

Private Instance Methods

build_anonymous_interactor(top_level_interactor_klass, id, &block) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 50
def build_anonymous_interactor(top_level_interactor_klass, id, &block)
  unless block_given?
    raise "Can't build a branch without a block given"
  end

  klass = Class.new
  klass.include Ni::Main
  klass.unique_id id
  klass.copy_storage_and_metadata_repository(top_level_interactor_klass)

  klass.instance_eval &block

  klass
end
run(context, params={}) click to toggle source
# File lib/ni/flows/branch_interactor.rb, line 46
def run(context, params={})
  interactor_klass.public_send(action, context, params)
end