Skip to content

Commit 91968e5

Browse files
Do not mask NoMethodError for render_in in render_in
Follow-up to rails#50699. This prevents a `NoMethodError` from being masked when the missing method is itself named `render_in`. Co-authored-by: Hartley McGuire <[email protected]>
1 parent c66b655 commit 91968e5

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

actionview/lib/action_view/template/renderable.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ def identifier
1414

1515
def render(context, *args)
1616
@renderable.render_in(context)
17-
rescue NoMethodError => error
18-
if error.name == :render_in
17+
rescue NoMethodError
18+
if !@renderable.respond_to?(:render_in)
1919
raise ArgumentError, "'#{@renderable.inspect}' is not a renderable object. It must implement #render_in."
2020
else
2121
raise

actionview/test/template/render_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,9 @@ def test_render_renderable_with_incompatible_object
314314

315315
def test_render_renderable_does_not_mask_nomethoderror_from_within_render_in
316316
renderable = Object.new
317-
renderable.define_singleton_method(:render_in) { |*| nil.foo }
317+
renderable.define_singleton_method(:render_in) { |*| nil.render_in }
318318

319-
assert_raises NoMethodError, match: "undefined method `foo' for nil" do
319+
assert_raises NoMethodError, match: "undefined method `render_in' for nil" do
320320
@view.render renderable: renderable
321321
end
322322
end

0 commit comments

Comments
 (0)