Sha256: 94bbd3ad0c833018431726dc09caa7c116bab55f7e4d61107e70ae809f131a27

Contents?: true

Size: 927 Bytes

Versions: 4

Compression:

Stored size: 927 Bytes

Contents

module NxtStateMachine
  class ErrorCallbackRegistry
    include ::NxtRegistry

    def register(from, to, error, method = nil, block = nil)
      method_or_block = method || block
      return unless method_or_block

      Array(from).each do |from_state|
        Array(to).each do |to_state|
          callbacks.from(from_state).to(to_state).error(error, method_or_block)
        end
      end
    end

    def resolve(error, transition)
      candidate = callbacks.from(
        transition.from.enum
      ).to(
        transition.to.enum
      ).error.keys.find { |kind_of_error| error.is_a?(kind_of_error) }

      return unless candidate

      callbacks.from(transition.from.enum).to(transition.to.enum).error(candidate)
    end

    private

    def callbacks
      @callbacks ||= registry :from do
        level :to do
          level :error, transform_keys: false, call: false
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
nxt_state_machine-0.1.12 lib/nxt_state_machine/error_callback_registry.rb
nxt_state_machine-0.1.11 lib/nxt_state_machine/error_callback_registry.rb
nxt_state_machine-0.1.10 lib/nxt_state_machine/error_callback_registry.rb
nxt_state_machine-0.1.9 lib/nxt_state_machine/error_callback_registry.rb