class WsdlMapper::Runtime::MiddlewareStack
Public Class Methods
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 10 def initialize @stack = [] end
Public Instance Methods
Appends the given `middleware` to the stack. @param [String] name @param [Object, Proc] middleware
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 48 def add(name, middleware) @stack << Item.new(name, middleware) middleware end
Inserts the given `middleware` after the middleware named `target`. @param [String] target @param [String] name @param [Object, Proc] middleware @raise [ArgumentError] if there is no middleware with named `target`.
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 66 def after(target, name, middleware) @stack.insert get_position(target) + 1, Item.new(name, middleware) end
Inserts the given `middleware` before the middleware named `target`. @param [String] target @param [String] name @param [Object, Proc] middleware @raise [ArgumentError] if there is no middleware with named `target`.
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 75 def before(target, name, middleware) @stack.insert get_position(target), Item.new(name, middleware) end
Clears the stack.
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 15 def clear @stack = [] end
Enumerates all middlewares in order @yieldparam middleware [Object, Proc] @return [Enumerator]
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 82 def each(&block) @stack.lazy.map(&:middleware).each(&block) end
Calls each middleware in order, by passing the output from the last middleware to the next. @param [Array] inputs Input to the first middleware on the stack @return [Object] The output of the last middleware on the stack
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 90 def execute(inputs) inject(inputs) do |obj, middleware| middleware.call(*obj) end end
@param [String] name @return [Object, Proc] The middleware for `name`. @raise [ArgumentError] if there is no middleware with this `name`.
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 40 def get(name) @stack[get_position(name)].middleware end
@return [Array<String>] The names of the middlewares in order.
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 20 def names @stack.map(&:name) end
Prepends the given `middleware`. @param [String] name @param [Object, Proc] middleware
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 57 def prepend(name, middleware) @stack.unshift Item.new(name, middleware) end
@param [String] name
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 25 def remove(name) @stack.delete_if { |item| item.name == name } end
@param [String] name The name of the middleware item to replace @param [Object, Proc] middleware The new middleware
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 31 def replace(name, middleware) @stack[get_position(name)] = Item.new name, middleware middleware end
Private Instance Methods
# File lib/wsdl_mapper/runtime/middleware_stack.rb, line 97 def get_position(name) index = @stack.index { |item| item.name == name } raise ArgumentError.new("#{name} not found.") if index.nil? index end