Skip to content

Commit 2d1e6ae

Browse files
authored
Merge pull request rails#42655 from ghiculescu/middleware-delete-raise
Deleting an item from the Middleware stack should raise if the item is not found
2 parents b995208 + 07558ff commit 2d1e6ae

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

actionpack/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
* Deleting an item from the Middleware stack will raise if the item is not found
2+
3+
Previously, calling `config.middleware.delete(ItemNotInMiddleware)` would fail silently.
4+
Now it will raise, same as `config.middleware.move(0, ItemNotInMiddleware)` does.
5+
6+
*Alex Ghiculescu*
7+
18
* OpenSSL constants are now used for Digest computations.
29

310
*Dirkjan Bussink*

actionpack/lib/action_dispatch/middleware/stack.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def swap(target, *args, &block)
130130
ruby2_keywords(:swap)
131131

132132
def delete(target)
133-
middlewares.delete_if { |m| m.name == target.name }
133+
middlewares.reject! { |m| m.name == target.name } || (raise "No such middleware to delete: #{target.inspect}")
134134
end
135135

136136
def move(target, source)

actionpack/test/dispatch/middleware_stack_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ def test_delete_works
105105
end
106106
end
107107

108+
test "delete requires the middleware to be in the stack" do
109+
assert_raises RuntimeError do
110+
@stack.delete(BazMiddleware)
111+
end
112+
end
113+
108114
test "move preserves the arguments of the moved middleware" do
109115
@stack.use BazMiddleware, true, foo: "bar"
110116
@stack.move_before(FooMiddleware, BazMiddleware)

0 commit comments

Comments
 (0)