Skip to content

Commit caac731

Browse files
authored
Merge pull request rails#42965 from kamipo/fix_abstract_collector
Fix generated MIME methods to recognize kwargs
2 parents edf0830 + 0740772 commit caac731

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

actionpack/lib/abstract_controller/collector.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def self.generate_method_for_mime(mime)
1010
def #{sym}(*args, &block)
1111
custom(Mime[:#{sym}], *args, &block)
1212
end
13+
ruby2_keywords(:#{sym})
1314
RUBY
1415
end
1516

@@ -22,7 +23,7 @@ def #{sym}(*args, &block)
2223
end
2324

2425
private
25-
def method_missing(symbol, &block)
26+
def method_missing(symbol, *args, &block)
2627
unless mime_constant = Mime[symbol]
2728
raise NoMethodError, "To respond to a custom format, register it as a MIME type first: " \
2829
"https://guides.rubyonrails.org/action_controller_overview.html#restful-downloads. " \
@@ -33,10 +34,11 @@ def method_missing(symbol, &block)
3334

3435
if Mime::SET.include?(mime_constant)
3536
AbstractController::Collector.generate_method_for_mime(mime_constant)
36-
send(symbol, &block)
37+
public_send(symbol, *args, &block)
3738
else
3839
super
3940
end
4041
end
42+
ruby2_keywords(:method_missing)
4143
end
4244
end

actionpack/test/abstract/collector_test.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def initialize
1212
@responses = []
1313
end
1414

15-
def custom(mime, *args, &block)
16-
@responses << [mime, args, block]
15+
def custom(mime, *args, **kwargs, &block)
16+
@responses << [mime, args, kwargs, block]
1717
end
1818
end
1919

@@ -53,12 +53,12 @@ class TestCollector < ActiveSupport::TestCase
5353
test "generated methods call custom with arguments received" do
5454
collector = MyCollector.new
5555
collector.html
56-
collector.text(:foo)
56+
collector.text(:foo, bar: :baz)
5757
collector.js(:bar) { :baz }
58-
assert_equal [Mime[:html], [], nil], collector.responses[0]
59-
assert_equal [Mime[:text], [:foo], nil], collector.responses[1]
60-
assert_equal [Mime[:js], [:bar]], collector.responses[2][0, 2]
61-
assert_equal :baz, collector.responses[2][2].call
58+
assert_equal [Mime[:html], [], {}, nil], collector.responses[0]
59+
assert_equal [Mime[:text], [:foo], { bar: :baz }, nil], collector.responses[1]
60+
assert_equal [Mime[:js], [:bar], {}], collector.responses[2][0, 3]
61+
assert_equal :baz, collector.responses[2][3].call
6262
end
6363
end
6464
end

0 commit comments

Comments
 (0)