|
3 | 3 | #
|
4 | 4 | # https://github.com/rails/rails/blob/280654ef88/activejob/lib/active_job/logging.rb
|
5 | 5 | #
|
6 |
| -module ActiveModelSerializers::Logging |
7 |
| - extend ActiveSupport::Concern |
| 6 | +module ActiveModelSerializers |
| 7 | + module Logging |
| 8 | + extend ActiveSupport::Concern |
8 | 9 |
|
9 |
| - included do |
10 |
| - include ActiveModelSerializers::Callbacks |
11 |
| - extend NotificationMacro |
12 |
| - instrument_rendering |
13 |
| - end |
| 10 | + included do |
| 11 | + include ActiveModelSerializers::Callbacks |
| 12 | + extend Macros |
| 13 | + instrument_rendering |
| 14 | + end |
14 | 15 |
|
15 |
| - module ClassMethods |
16 |
| - def instrument_rendering |
17 |
| - around_render do |args, block| |
18 |
| - tag_logger do |
19 |
| - notify_render do |
20 |
| - block.call(args) |
| 16 | + module ClassMethods |
| 17 | + def instrument_rendering |
| 18 | + around_render do |args, block| |
| 19 | + tag_logger do |
| 20 | + notify_render do |
| 21 | + block.call(args) |
| 22 | + end |
21 | 23 | end
|
22 | 24 | end
|
23 | 25 | end
|
24 | 26 | end
|
25 |
| - end |
26 | 27 |
|
27 |
| - # Adapted from: |
28 |
| - # https://github.com/rubygems/rubygems/blob/cb28f5e991/lib/rubygems/deprecate.rb |
29 |
| - # Provides a single method +notify+ to be used to declare when |
30 |
| - # something a method notifies, with the argument +callback_name+ of the notification callback. |
31 |
| - # |
32 |
| - # class Adapter |
33 |
| - # def self.klass_method |
34 |
| - # # ... |
35 |
| - # end |
36 |
| - # |
37 |
| - # def instance_method |
38 |
| - # # ... |
39 |
| - # end |
40 |
| - # |
41 |
| - # include ActiveModelSerializers::Logging |
42 |
| - # notify :instance_method, :render |
43 |
| - # |
44 |
| - # class << self |
45 |
| - # extend ActiveModelSerializers::Logging::NotificationMacro |
46 |
| - # notify :klass_method, :render |
47 |
| - # end |
48 |
| - # end |
49 |
| - module NotificationMacro |
50 |
| - ## |
51 |
| - # Simple notify method that wraps up +name+ |
52 |
| - # in a dummy method. It notifies on with the +callback_name+ notifier on |
53 |
| - # each call to the dummy method, telling what the current serializer and adapter |
54 |
| - # are being rendered. |
| 28 | + # Macros that can be used to customize the logging of class or instance methods, |
| 29 | + # by extending the class or its singleton. |
| 30 | + # |
55 | 31 | # Adapted from:
|
56 | 32 | # https://github.com/rubygems/rubygems/blob/cb28f5e991/lib/rubygems/deprecate.rb
|
57 |
| - def notify(name, callback_name) |
58 |
| - class_eval do |
59 |
| - old = "_notifying_#{callback_name}_#{name}" |
60 |
| - alias_method old, name |
61 |
| - define_method name do |*args, &block| |
62 |
| - run_callbacks callback_name do |
63 |
| - send old, *args, &block |
| 33 | + # |
| 34 | + # Provides a single method +notify+ to be used to declare when |
| 35 | + # something a method notifies, with the argument +callback_name+ of the notification callback. |
| 36 | + # |
| 37 | + # class Adapter |
| 38 | + # def self.klass_method |
| 39 | + # # ... |
| 40 | + # end |
| 41 | + # |
| 42 | + # def instance_method |
| 43 | + # # ... |
| 44 | + # end |
| 45 | + # |
| 46 | + # include ActiveModelSerializers::Logging::Macros |
| 47 | + # notify :instance_method, :render |
| 48 | + # |
| 49 | + # class << self |
| 50 | + # extend ActiveModelSerializers::Logging::Macros |
| 51 | + # notify :klass_method, :render |
| 52 | + # end |
| 53 | + # end |
| 54 | + module Macros |
| 55 | + ## |
| 56 | + # Simple notify method that wraps up +name+ |
| 57 | + # in a dummy method. It notifies on with the +callback_name+ notifier on |
| 58 | + # each call to the dummy method, telling what the current serializer and adapter |
| 59 | + # are being rendered. |
| 60 | + # Adapted from: |
| 61 | + # https://github.com/rubygems/rubygems/blob/cb28f5e991/lib/rubygems/deprecate.rb |
| 62 | + def notify(name, callback_name) |
| 63 | + class_eval do |
| 64 | + old = "_notifying_#{callback_name}_#{name}" |
| 65 | + alias_method old, name |
| 66 | + define_method name do |*args, &block| |
| 67 | + run_callbacks callback_name do |
| 68 | + send old, *args, &block |
| 69 | + end |
64 | 70 | end
|
65 | 71 | end
|
66 | 72 | end
|
67 | 73 | end
|
68 |
| - end |
69 | 74 |
|
70 |
| - def notify_render(*) |
71 |
| - event_name = 'render.active_model_serializers'.freeze |
72 |
| - ActiveSupport::Notifications.instrument(event_name, notify_render_payload) do |
73 |
| - yield |
| 75 | + def notify_render(*) |
| 76 | + event_name = 'render.active_model_serializers'.freeze |
| 77 | + ActiveSupport::Notifications.instrument(event_name, notify_render_payload) do |
| 78 | + yield |
| 79 | + end |
74 | 80 | end
|
75 |
| - end |
76 | 81 |
|
77 |
| - def notify_render_payload |
78 |
| - { serializer: serializer, adapter: adapter } |
79 |
| - end |
| 82 | + def notify_render_payload |
| 83 | + { serializer: serializer, adapter: adapter } |
| 84 | + end |
80 | 85 |
|
81 |
| - private |
| 86 | + private |
82 | 87 |
|
83 |
| - def tag_logger(*tags) |
84 |
| - if ActiveModelSerializers.logger.respond_to?(:tagged) |
85 |
| - tags.unshift 'AMS'.freeze unless logger_tagged_by_active_model_serializers? |
86 |
| - ActiveModelSerializers.logger.tagged(*tags) { yield } |
87 |
| - else |
88 |
| - yield |
| 88 | + def tag_logger(*tags) |
| 89 | + if ActiveModelSerializers.logger.respond_to?(:tagged) |
| 90 | + tags.unshift 'AMS'.freeze unless logger_tagged_by_active_model_serializers? |
| 91 | + ActiveModelSerializers.logger.tagged(*tags) { yield } |
| 92 | + else |
| 93 | + yield |
| 94 | + end |
89 | 95 | end
|
90 |
| - end |
91 | 96 |
|
92 |
| - def logger_tagged_by_active_model_serializers? |
93 |
| - ActiveModelSerializers.logger.formatter.current_tags.include?('AMS'.freeze) |
94 |
| - end |
| 97 | + def logger_tagged_by_active_model_serializers? |
| 98 | + ActiveModelSerializers.logger.formatter.current_tags.include?('AMS'.freeze) |
| 99 | + end |
95 | 100 |
|
96 |
| - class LogSubscriber < ActiveSupport::LogSubscriber |
97 |
| - def render(event) |
98 |
| - info do |
99 |
| - serializer = event.payload[:serializer] |
100 |
| - adapter = event.payload[:adapter] |
101 |
| - duration = event.duration.round(2) |
102 |
| - "Rendered #{serializer.name} with #{adapter.class} (#{duration}ms)" |
| 101 | + class LogSubscriber < ActiveSupport::LogSubscriber |
| 102 | + def render(event) |
| 103 | + info do |
| 104 | + serializer = event.payload[:serializer] |
| 105 | + adapter = event.payload[:adapter] |
| 106 | + duration = event.duration.round(2) |
| 107 | + "Rendered #{serializer.name} with #{adapter.class} (#{duration}ms)" |
| 108 | + end |
103 | 109 | end
|
104 |
| - end |
105 | 110 |
|
106 |
| - def logger |
107 |
| - ActiveModelSerializers.logger |
| 111 | + def logger |
| 112 | + ActiveModelSerializers.logger |
| 113 | + end |
108 | 114 | end
|
109 | 115 | end
|
110 | 116 | end
|
|
0 commit comments