class AASM::Core::Invokers::ClassInvoker

to be used as state/event/transition callbacks.
Class invoker which allows to use classes which respond to #call
#

def instance

def instance
  @instance ||= retrieve_instance
end

def invoke_subject

def invoke_subject
  @result = instance.call
end

def log_failure

def log_failure
  return log_source_location if Method.method_defined?(:source_location)
  log_method_info
end

def log_method_info

def log_method_info
  failures << instance.method(:call)
end

def log_source_location

def log_source_location
  failures << instance.method(:call).source_location.join('#')
end

def may_invoke?

def may_invoke?
  subject.is_a?(Class) && subject.instance_methods.include?(:call)
end

def retrieve_instance

rubocop:disable Metrics/AbcSize
def retrieve_instance
  return subject.new if subject_arity.zero?
  return subject.new(record) if subject_arity == 1
  return subject.new(record, *args) if subject_arity < 0
  subject.new(record, *args[0..(subject_arity - 2)])
end

def subject_arity

def subject_arity
  @arity ||= subject.instance_method(:initialize).arity
end