Skip to content

Commit 19887de

Browse files
Standardize on symbol keys for the payload
1 parent 6b18088 commit 19887de

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

activesupport/lib/active_support/event_reporter.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,15 @@ def clear
209209
# end
210210
# end
211211
#
212+
# The Event Reporter standardizes on symbol keys for all payload data, tags, and context store entries.
213+
# String keys are automatically converted to symbols for consistency.
214+
#
215+
# Rails.event.notify("user.created", { "id" => 123 })
216+
# # Emits event:
217+
# # {
218+
# # name: "user.created",
219+
# # payload: { id: 123 },
220+
# # }
212221
class EventReporter
213222
attr_reader :subscribers
214223
attr_accessor :raise_on_error
@@ -482,9 +491,9 @@ def resolve_payload(name_or_object, payload, **kwargs)
482491
when String, Symbol
483492
handle_unexpected_args(name_or_object, payload, kwargs) if payload && kwargs.any?
484493
if kwargs.any?
485-
kwargs
494+
kwargs.transform_keys(&:to_sym)
486495
elsif payload
487-
payload
496+
payload.transform_keys(&:to_sym)
488497
end
489498
else
490499
handle_unexpected_args(name_or_object, payload, kwargs) if payload || kwargs.any?

activesupport/test/event_reporter_test.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@ def initialize(http_method, http_status)
7979
end
8080
end
8181

82+
test "#notify symbolizes keys in hash payload" do
83+
assert_called_with(@subscriber, :emit, [
84+
event_matcher(name: "test_event", payload: { key: "value" })
85+
]) do
86+
@reporter.notify(:test_event, { "key" => "value" })
87+
end
88+
end
89+
8290
test "#notify with hash payload and kwargs raises" do
8391
error = assert_raises(ArgumentError) do
8492
@reporter.notify(:test_event, { key: "value" }, extra: "arg")
@@ -378,7 +386,7 @@ def test_method_debug
378386
http_tag = HttpRequestTag.new("GET", 200)
379387
@reporter.tagged("foobar", http_tag, shop_id: 123) do
380388
assert_called_with(@subscriber, :emit, [
381-
event_matcher(name: "test_event", payload: { key: "value" }, tags: { "foobar": true, "HttpRequestTag": http_tag, shop_id: 123 })
389+
event_matcher(name: "test_event", payload: { key: "value" }, tags: { foobar: true, "HttpRequestTag": http_tag, shop_id: 123 })
382390
]) do
383391
@reporter.notify(:test_event, key: "value")
384392
end

0 commit comments

Comments
 (0)