Sha256: 1366dd9e9fa4a274f38af6649fcff88fb8d668b49ed001deb8df714d4e741637

Contents?: true

Size: 883 Bytes

Versions: 2

Compression:

Stored size: 883 Bytes

Contents

# frozen_string_literal: true

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

    attr_reader :rules

    def initialize
      @rules = Hash.new do |h, k|
        h[k] = { before:  [],
                 after:   [],
                 replace: [] }
      end
    end

    def use(middleware_class, options = {})
      unknown_options = options.keys - [:before, :after, :replace]
      if unknown_options.any?
        raise ArgumentError, "Unexpected options: #{unknown_options}"
      end
      @rules[middleware_class].merge!(options) do |key, old, new|
        old + Array(new)
      end
    end

    def do_not_use(middleware_class)
      use nil, :replace => middleware_class
    end

    def merge!(register)
      Type! register, Middleware::Register
      register.rules.each do |klass, rules|
        use(klass, rules)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dynflow-1.9.0 lib/dynflow/middleware/register.rb
dynflow-1.8.3 lib/dynflow/middleware/register.rb