Browse files

Add the #unshift method to the middleware stack

The docs suggest that the middleware stack is an Array, so I've added
the unshift method to it. Originally I added some more Array methods,
but it was agreed that they lacked usecases.
  • Loading branch information...
Rich Healey
Rich Healey committed May 18, 2012
1 parent b23ac93 commit 793205cccfb3addd8f6aca59d60655b55e4fc38e
@@ -75,6 +75,11 @@ def [](i)
+ def unshift(*args, &block)
+ middleware =*args, &block)
+ middlewares.unshift(middleware)
+ end
def initialize_copy(other)
self.middlewares = other.middlewares.dup
@@ -45,7 +45,7 @@ def setup
assert_equal BazMiddleware, @stack.last.klass
assert_equal([true, {:foo => "bar"}], @stack.last.args)
test "use should push middleware class with block arguments onto the stack" do
proc = {}
assert_difference "@stack.size" do
@@ -54,7 +54,7 @@ def setup
assert_equal BlockMiddleware, @stack.last.klass
assert_equal proc, @stack.last.block
test "insert inserts middleware at the integer index" do
@stack.insert(1, BazMiddleware)
assert_equal BazMiddleware, @stack[1].klass
@@ -87,6 +87,11 @@ def setup
assert_equal FooMiddleware, @stack[0].klass
+ test "unshift adds a new middleware at the beginning of the stack" do
+ @stack.unshift :"MiddlewareStackTest::BazMiddleware"
+ assert_equal BazMiddleware, @stack.first.klass
+ end
test "raise an error on invalid index" do
assert_raise RuntimeError do
@stack.insert("HiyaMiddleware", BazMiddleware)

0 comments on commit 793205c

Please sign in to comment.