class AASM::Core::Invokers::ProcInvoker

Proc invoker which allows to use Procs as state/event/transition callbacks.

Public Instance Methods

invoke_subject() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 19
def invoke_subject
  @result = if support_parameters?
              exec_proc(parameters_to_arity)
            else
              exec_proc(subject.arity)
            end
end
log_failure() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 14
def log_failure
  return log_source_location if Method.method_defined?(:source_location)
  log_proc_info
end
may_invoke?() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 10
def may_invoke?
  subject.is_a?(Proc)
end

Private Instance Methods

exec_proc(parameters_size) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/aasm/core/invokers/proc_invoker.rb, line 34
def exec_proc(parameters_size)
  return record.instance_exec(&subject) if parameters_size.zero?
  return record.instance_exec(*args, &subject) if parameters_size < 0
  record.instance_exec(*args[0..(parameters_size - 1)], &subject)
end
log_proc_info() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 45
def log_proc_info
  failures << subject
end
log_source_location() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/aasm/core/invokers/proc_invoker.rb, line 41
def log_source_location
  failures << subject.source_location.join('#')
end
parameters_to_arity() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 49
def parameters_to_arity
  subject.parameters.inject(0) do |memo, parameter|
    memo += 1
    memo *= -1 if parameter[0] == :rest && memo > 0
    memo
  end
end
support_parameters?() click to toggle source
# File lib/aasm/core/invokers/proc_invoker.rb, line 29
def support_parameters?
  subject.respond_to?(:parameters)
end