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
Calls superclass method
Ni::Flows::Utils::HandleWait#handle_current_wait?
# 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