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