Sha256: 58c25aa0c2bbdefd4709bfd9fe69c5508571fe8d056168f29b2d69a6e8891437

Contents?: true

Size: 642 Bytes

Versions: 4

Compression:

Stored size: 642 Bytes

Contents

module NxtStateMachine
  class Transition::AroundCallbackChain

    def initialize(transition, context, state_machine)
      @transition = transition
      @context = context
      @state_machine = state_machine
    end

    def build(proxy)
      return proxy unless callbacks.any?

      callbacks.map { |c| Callable.new(c).bind(context) }.reverse.inject(proxy) do |previous, callback|
        -> { callback.call(previous, transition) }
      end
    end

    private

    def callbacks
      @callbacks ||= state_machine.callbacks.resolve!(transition).kind(:around)
    end

    attr_reader :transition, :context, :state_machine
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

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