Sha256: dc8a157cd66e7fcf91aa8bdee4c23211e6ffae2b728f5ec13f0943a6ec7c94fc

Contents?: true

Size: 903 Bytes

Versions: 8

Compression:

Stored size: 903 Bytes

Contents

module Dynflow
  class Middleware::Stack
    include Algebrick::TypeCheck

    attr_reader :action, :middleware_class, :middleware

    def self.build(middleware_classes, method, action, &block)
      middleware_classes.reverse_each.reduce(block) do |stack, klass|
        Middleware::Stack.new(stack, klass, method, action)
      end
    end

    def initialize(next_stack, middleware_class, method, action)
      @middleware_class = Child! middleware_class, Middleware
      @middleware       = middleware_class.new self
      @action           = Type! action, Dynflow::Action, NilClass
      @method           = Match! method, :delay, :plan, :run, :finalize, :plan_phase, :finalize_phase
      @next_stack       = Type! next_stack, Middleware::Stack, Proc
    end

    def call(*args)
      @middleware.send @method, *args
    end

    def pass(*args)
      @next_stack.call(*args)
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
dynflow-0.8.11 lib/dynflow/middleware/stack.rb
dynflow-0.8.10 lib/dynflow/middleware/stack.rb
dynflow-0.8.9 lib/dynflow/middleware/stack.rb
dynflow-0.8.8 lib/dynflow/middleware/stack.rb
dynflow-0.8.7 lib/dynflow/middleware/stack.rb
dynflow-0.8.6 lib/dynflow/middleware/stack.rb
dynflow-0.8.5 lib/dynflow/middleware/stack.rb
dynflow-0.8.4 lib/dynflow/middleware/stack.rb