Sha256: 970ce6543b39b2becae293b9627adb1d3d458fa6e7eceefc56fa977bcdbda1de

Contents?: true

Size: 920 Bytes

Versions: 15

Compression:

Stored size: 920 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, :hook
      @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

15 entries across 15 versions & 1 rubygems

Version Path
dynflow-1.3.0 lib/dynflow/middleware/stack.rb
dynflow-1.2.3 lib/dynflow/middleware/stack.rb
dynflow-1.2.2 lib/dynflow/middleware/stack.rb
dynflow-1.2.1 lib/dynflow/middleware/stack.rb
dynflow-1.2.0 lib/dynflow/middleware/stack.rb
dynflow-1.2.0.pre1 lib/dynflow/middleware/stack.rb
dynflow-1.1.6 lib/dynflow/middleware/stack.rb
dynflow-1.1.5 lib/dynflow/middleware/stack.rb
dynflow-1.1.4 lib/dynflow/middleware/stack.rb
dynflow-1.1.3 lib/dynflow/middleware/stack.rb
dynflow-1.1.2 lib/dynflow/middleware/stack.rb
dynflow-1.1.1 lib/dynflow/middleware/stack.rb
dynflow-1.1.0 lib/dynflow/middleware/stack.rb
dynflow-1.0.5 lib/dynflow/middleware/stack.rb
dynflow-1.0.4 lib/dynflow/middleware/stack.rb