Sha256: 14cb87a248a1d718a0048e21400e9bd808ae89d04bbf6dfb9554d51b36e796b2

Contents?: true

Size: 641 Bytes

Versions: 8

Compression:

Stored size: 641 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

8 entries across 8 versions & 1 rubygems

Version Path
nxt_state_machine-0.1.8 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.7 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.6 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.5 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.4 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.3 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.2 lib/nxt_state_machine/transition/around_callback_chain.rb
nxt_state_machine-0.1.1 lib/nxt_state_machine/transition/around_callback_chain.rb