module Logicum::Interactor::CallInterface

Public Instance Methods

call(*) click to toggle source
Calls superclass method
# File lib/logicum/interactor.rb, line 42
def call(*)
  raise MissingCallError unless defined? super

  @__result__ = Result.new

  begin
    super
  rescue StandardError => e
    @__result__.fail! e.message
  end

  self.class.provisions.each do |attr|
    ivar_name = "@#{attr}"
    if instance_variable_defined? ivar_name
      val = instance_variable_get ivar_name
      @__result__.define_singleton_method(attr) { val }
    else
      # Calling code must ensure instance variables to provide are
      # set before any code which could raise an exception.
      raise ProvisionError, "#{ivar_name} was not set in call() method"
    end
  end

  @__result__
end