class AASM::Core::Invokers::ClassInvoker

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

Public Instance Methods

invoke_subject() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 19
def invoke_subject
  @result = instance.call
end
log_failure() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 14
def log_failure
  return log_source_location if Method.method_defined?(:source_location)
  log_method_info
end
may_invoke?() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 10
def may_invoke?
  subject.is_a?(Class) && subject.instance_methods.include?(:call)
end

Private Instance Methods

instance() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 33
def instance
  @instance ||= retrieve_instance
end
log_method_info() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 29
def log_method_info
  failures << instance.method(:call)
end
log_source_location() click to toggle source
# File lib/aasm/core/invokers/class_invoker.rb, line 25
def log_source_location
  failures << instance.method(:call).source_location.join('#')
end
retrieve_instance() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/aasm/core/invokers/class_invoker.rb, line 38
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
subject_arity() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/aasm/core/invokers/class_invoker.rb, line 46
def subject_arity
  @arity ||= subject.instance_method(:initialize).arity
end