diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index c9ad5639..e5021320 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -410,9 +410,13 @@ module ActiveModel # Returns a hash representation of the serializable # object without the root. def serializable_hash - node = attributes - include_associations!(node) if _embed - node + instrument(:serialize, :serializer => self.class.name) do + node = attributes + instrument :associations do + include_associations!(node) if _embed + end + node + end end def include_associations!(node) @@ -513,6 +517,12 @@ module ActiveModel end alias :read_attribute_for_serialization :send + + # Use ActiveSupport::Notifications to send events to external systems. + # The event name is: name.class_name.serializer + def instrument(name, payload = {}, &block) + ActiveSupport::Notifications.instrument("#{name}.serializer", payload, &block) + end end end diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index 6f0e89e7..da4c1780 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -1,5 +1,6 @@ require "active_support" require "active_support/core_ext/string/inflections" +require "active_support/notifications" require "active_model" require "active_model/serializer"