Skip to content

Commit

Permalink
Ensure insert_before in middleware stack raises a meaningful error me…
Browse files Browse the repository at this point in the history
…ssage [#3679 state:resolved]
  • Loading branch information
josevalim committed Jul 21, 2010
1 parent 7131244 commit 9dfe9fa
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
15 changes: 11 additions & 4 deletions actionpack/lib/action_dispatch/middleware/stack.rb
Expand Up @@ -46,17 +46,16 @@ def initialize(*args, &block)
end

def insert(index, *args, &block)
index = self.index(index) unless index.is_a?(Integer)
index = assert_index(index, :before)
middleware = self.class::Middleware.new(*args, &block)
super(index, middleware)
end

alias_method :insert_before, :insert

def insert_after(index, *args, &block)
i = index.is_a?(Integer) ? index : self.index(index)
raise "No such middleware to insert after: #{index.inspect}" unless i
insert(i + 1, *args, &block)
index = assert_index(index, :after)
insert(index + 1, *args, &block)
end

def swap(target, *args, &block)
Expand All @@ -79,5 +78,13 @@ def build(app = nil, &block)
raise "MiddlewareStack#build requires an app" unless app
reverse.inject(app) { |a, e| e.build(a) }
end

protected

def assert_index(index, where)
i = index.is_a?(Integer) ? index : self.index(index)
raise "No such middleware to insert #{where}: #{index.inspect}" unless i
i
end
end
end
10 changes: 10 additions & 0 deletions actionpack/test/dispatch/middleware_stack_test.rb
Expand Up @@ -66,6 +66,16 @@ def setup
assert_equal BazMiddleware, @stack[0].klass
end

test "raise an error on invalid index" do
assert_raise RuntimeError do
@stack.insert("HiyaMiddleware", BazMiddleware)
end

assert_raise RuntimeError do
@stack.insert_after("HiyaMiddleware", BazMiddleware)
end
end

test "lazy evaluates middleware class" do
assert_difference "@stack.size" do
@stack.use "MiddlewareStackTest::BazMiddleware"
Expand Down

0 comments on commit 9dfe9fa

Please sign in to comment.