Skip to content

Commit ed72979

Browse files
authored
Merge pull request #2080 from yosiat/instrumentation-cleanup
[0.9] Removing `instrumentation_keys` in order to fix the payload
2 parents be0b1e8 + 9cc4b05 commit ed72979

File tree

5 files changed

+61
-25
lines changed

5 files changed

+61
-25
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### [0-9-stable](https://github.com/rails-api/active_model_serializers/compare/v0.9.5...0-9-stable)
44

5+
- [#2080](https://github.com/rails-api/active_model_serializers/pull/2080) remove `{ payload: nil }` from `!serialize.active_model_serializers` ActiveSupport::Notification. `payload` never had a value. Changes, for example `{ serializer: 'ActiveModel::DefaultSerializer', payload: nil }` to be `{ serializer: 'ActiveModel::DefaultSerializer' }` (@yosiat)
6+
57
### [v0.9.6 (2017-01-10)](https://github.com/rails-api/active_model_serializers/compare/v0.9.5...v0.9.6)
68

79
- [#2008](https://github.com/rails-api/active_model_serializers/pull/2008) Fix warning on Thor. (@kirs)

lib/active_model/array_serializer.rb

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,5 @@ def embedded_in_root_associations
6464
end
6565
end
6666

67-
private
68-
69-
def instrumentation_keys
70-
[:object, :scope, :root, :meta_key, :meta, :each_serializer, :resource_name, :key_format, :context]
71-
end
7267
end
7368
end

lib/active_model/default_serializer.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,14 @@ def initialize(object, options={})
1515
end
1616

1717
def as_json(options={})
18-
instrument('!serialize') do
18+
instrument do
1919
return [] if @object.nil? && @wrap_in_array
2020
hash = @object.as_json
2121
@wrap_in_array ? [hash] : hash
2222
end
2323
end
24+
2425
alias serializable_hash as_json
2526
alias serializable_object as_json
26-
27-
private
28-
def instrumentation_keys
29-
[:object, :wrap_in_array]
30-
end
3127
end
3228
end

lib/active_model/serializable.rb

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
module ActiveModel
44
module Serializable
5+
INSTRUMENTATION_KEY = '!serialize.active_model_serializers'.freeze
6+
57
def self.included(base)
68
base.extend Utils
79
end
810

911
def as_json(options={})
10-
instrument('!serialize') do
12+
instrument do
1113
if root = options.fetch(:root, json_key)
1214
hash = { root => serializable_object(options) }
1315
hash.merge!(serializable_data)
@@ -19,9 +21,7 @@ def as_json(options={})
1921
end
2022

2123
def serializable_object_with_notification(options={})
22-
instrument('!serialize') do
23-
serializable_object(options)
24-
end
24+
instrument { serializable_object(options) }
2525
end
2626

2727
def serializable_data
@@ -51,16 +51,9 @@ def get_namespace
5151
modules[0..-2].join('::') if modules.size > 1
5252
end
5353

54-
def instrument(action, &block)
55-
payload = instrumentation_keys.inject({ serializer: self.class.name }) do |payload, key|
56-
payload[:payload] = self.instance_variable_get(:"@#{key}")
57-
payload
58-
end
59-
ActiveSupport::Notifications.instrument("#{action}.active_model_serializers", payload, &block)
60-
end
61-
62-
def instrumentation_keys
63-
[:object, :scope, :root, :meta_key, :meta, :wrap_in_array, :only, :except, :key_format]
54+
def instrument(&block)
55+
payload = { serializer: self.class.name }
56+
ActiveSupport::Notifications.instrument(INSTRUMENTATION_KEY, payload, &block)
6457
end
6558
end
6659
end
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
require 'test_helper'
2+
3+
module ActiveModel
4+
class SerializableTest
5+
class InstrumentationTest < Minitest::Test
6+
def setup
7+
@events = []
8+
9+
@subscriber = ActiveSupport::Notifications.subscribe('!serialize.active_model_serializers') do |name, start, finish, id, payload|
10+
@events << { name: name, serializer: payload[:serializer] }
11+
end
12+
end
13+
14+
def teardown
15+
ActiveSupport::Notifications.unsubscribe(@subscriber) if defined?(@subscriber)
16+
end
17+
18+
def test_instruments_default_serializer
19+
DefaultSerializer.new(1).as_json
20+
21+
assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ActiveModel::DefaultSerializer' }], @events
22+
end
23+
24+
def test_instruments_serializer
25+
profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
26+
serializer = ProfileSerializer.new(profile)
27+
28+
serializer.as_json
29+
30+
assert_equal [{ name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' }], @events
31+
end
32+
33+
def test_instruments_array_serializer
34+
profiles = [
35+
Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
36+
Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2')
37+
]
38+
serializer = ArraySerializer.new(profiles)
39+
40+
serializer.as_json
41+
42+
assert_equal [
43+
{ name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' },
44+
{ name: '!serialize.active_model_serializers', serializer: 'ProfileSerializer' },
45+
{ name: '!serialize.active_model_serializers', serializer: 'ActiveModel::ArraySerializer' }
46+
], @events
47+
end
48+
end
49+
end
50+
end

0 commit comments

Comments
 (0)