Sha256: 54c1fd96af2b73c06faff9d3daa2850a997ddb495d477ec29a844612ae00082a

Contents?: true

Size: 913 Bytes

Versions: 30

Compression:

Stored size: 913 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, :present
      @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

30 entries across 30 versions & 1 rubygems

Version Path
dynflow-1.0.3 lib/dynflow/middleware/stack.rb
dynflow-1.0.2 lib/dynflow/middleware/stack.rb
dynflow-1.0.1 lib/dynflow/middleware/stack.rb
dynflow-1.0.0 lib/dynflow/middleware/stack.rb
dynflow-0.8.37 lib/dynflow/middleware/stack.rb
dynflow-0.8.36 lib/dynflow/middleware/stack.rb
dynflow-0.8.35 lib/dynflow/middleware/stack.rb
dynflow-0.8.34 lib/dynflow/middleware/stack.rb
dynflow-0.8.33 lib/dynflow/middleware/stack.rb
dynflow-0.8.32 lib/dynflow/middleware/stack.rb
dynflow-0.8.31 lib/dynflow/middleware/stack.rb
dynflow-0.8.30 lib/dynflow/middleware/stack.rb
dynflow-0.8.29 lib/dynflow/middleware/stack.rb
dynflow-0.8.28 lib/dynflow/middleware/stack.rb
dynflow-0.8.27 lib/dynflow/middleware/stack.rb
dynflow-0.8.26 lib/dynflow/middleware/stack.rb
dynflow-0.8.25 lib/dynflow/middleware/stack.rb
dynflow-0.8.24 lib/dynflow/middleware/stack.rb
dynflow-0.8.23 lib/dynflow/middleware/stack.rb
dynflow-0.8.22 lib/dynflow/middleware/stack.rb