module ServiceActor::Playable::PrependedMethods

Public Instance Methods

call() click to toggle source
# File lib/service_actor/playable.rb, line 39
def call
  self.class.play_actors.each do |options|
    next if options[:if] && !options[:if].call(result)

    play_actor(options[:actor])
  end
rescue Failure
  rollback
  raise
end
rollback() click to toggle source
# File lib/service_actor/playable.rb, line 50
def rollback
  return unless @played

  @played.each do |actor|
    next unless actor.respond_to?(:rollback)

    actor.rollback
  end
end

Private Instance Methods

play_actor(actor) click to toggle source
# File lib/service_actor/playable.rb, line 62
def play_actor(actor)
  if actor.is_a?(Class) && actor.ancestors.include?(Actor)
    actor = actor.new(result)
    actor._call
  else
    new_result = actor.call(result)
    result.merge!(new_result.to_h) if new_result.respond_to?(:to_h)
  end

  (@played ||= []).unshift(actor)
end