class AASM::Core::Invokers::LiteralInvoker

Literal invoker which allows to use strings or symbols to call record methods as state/event/transition callbacks.

Public Instance Methods

invoke_subject() click to toggle source
# File lib/aasm/core/invokers/literal_invoker.rb, line 18
def invoke_subject
  @result = exec_subject
end
log_failure() click to toggle source
# File lib/aasm/core/invokers/literal_invoker.rb, line 14
def log_failure
  failures << subject
end
may_invoke?() click to toggle source
# File lib/aasm/core/invokers/literal_invoker.rb, line 10
def may_invoke?
  subject.is_a?(String) || subject.is_a?(Symbol)
end

Private Instance Methods

exec_subject() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/aasm/core/invokers/literal_invoker.rb, line 29
def exec_subject
  raise(*record_error) unless record.respond_to?(subject, true)
  return record.__send__(subject) if subject_arity.zero?
  return record.__send__(subject, *args) if subject_arity < 0
  record.__send__(subject, *args[0..(subject_arity - 1)])
end
record_error() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/aasm/core/invokers/literal_invoker.rb, line 37
def record_error
  [
    NoMethodError,
    'NoMethodError: undefined method ' \
    "`#{subject}' for #{record.inspect}:#{record.class}"
  ]
end
subject_arity() click to toggle source
# File lib/aasm/core/invokers/literal_invoker.rb, line 24
def subject_arity
  @arity ||= record.__send__(:method, subject.to_sym).arity
end