mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Separate out callbacks per ActiveJob pattern
This commit is contained in:
parent
e8efc4eff4
commit
b36cc42f03
@ -9,6 +9,7 @@ module ActiveModelSerializers
|
|||||||
|
|
||||||
extend ActiveSupport::Autoload
|
extend ActiveSupport::Autoload
|
||||||
autoload :Model
|
autoload :Model
|
||||||
|
autoload :Callbacks
|
||||||
autoload :Logging
|
autoload :Logging
|
||||||
|
|
||||||
module_function
|
module_function
|
||||||
|
|||||||
55
lib/active_model_serializers/callbacks.rb
Normal file
55
lib/active_model_serializers/callbacks.rb
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Adapted from
|
||||||
|
# https://github.com/rails/rails/blob/7f18ea14c8/activejob/lib/active_job/callbacks.rb
|
||||||
|
require 'active_support/callbacks'
|
||||||
|
|
||||||
|
module ActiveModelSerializers
|
||||||
|
# = ActiveModelSerializers Callbacks
|
||||||
|
#
|
||||||
|
# ActiveModelSerializers provides hooks during the life cycle of serialization and
|
||||||
|
# allow you to trigger logic. Available callbacks are:
|
||||||
|
#
|
||||||
|
# * <tt>around_render</tt>
|
||||||
|
#
|
||||||
|
module Callbacks
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
include ActiveSupport::Callbacks
|
||||||
|
|
||||||
|
included do
|
||||||
|
define_callbacks :render
|
||||||
|
end
|
||||||
|
|
||||||
|
# These methods will be included into any ActiveModelSerializers object, adding
|
||||||
|
# callbacks for +render+.
|
||||||
|
module ClassMethods
|
||||||
|
# Defines a callback that will get called around the render method,
|
||||||
|
# whether it is as_json, to_json, or serializable_hash
|
||||||
|
#
|
||||||
|
# class ActiveModel::SerializableResource
|
||||||
|
# include ActiveModelSerializers::Callbacks
|
||||||
|
#
|
||||||
|
# around_render do |args, block|
|
||||||
|
# tag_logger do
|
||||||
|
# notify_render do
|
||||||
|
# block.call(args)
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# def as_json
|
||||||
|
# run_callbacks :render do
|
||||||
|
# adapter.as_json
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# # Note: So that we can re-use the instrumenter for as_json, to_json, and
|
||||||
|
# # serializable_hash, we aren't using the usual format, which would be:
|
||||||
|
# # def render(args)
|
||||||
|
# # adapter.as_json
|
||||||
|
# # end
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
def around_render(*filters, &blk)
|
||||||
|
set_callback(:render, :around, *filters, &blk)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -1,39 +1,19 @@
|
|||||||
##
|
##
|
||||||
# Adapted from:
|
# ActiveModelSerializers::Logging
|
||||||
# https://github.com/rubygems/rubygems/blob/cb28f5e991/lib/rubygems/deprecate.rb
|
#
|
||||||
# https://github.com/rails/rails/blob/280654ef88/activejob/lib/active_job/logging.rb
|
# https://github.com/rails/rails/blob/280654ef88/activejob/lib/active_job/logging.rb
|
||||||
#
|
#
|
||||||
# Provides a single method +notify+ to be used to declare when
|
|
||||||
# something a method notifies.
|
|
||||||
#
|
|
||||||
# class Adapter
|
|
||||||
# def self.klass_method
|
|
||||||
# # ...
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# def instance_method
|
|
||||||
# # ...
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# extend ActiveModelSerializers::Logging
|
|
||||||
# notify :instance_method, :render
|
|
||||||
#
|
|
||||||
# class << self
|
|
||||||
# extend ActiveModelSerializers::Logging
|
|
||||||
# notify :klass_method, :render
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
module ActiveModelSerializers::Logging
|
module ActiveModelSerializers::Logging
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
include ActiveSupport::Callbacks
|
include ActiveModelSerializers::Callbacks
|
||||||
instrument_around_render
|
extend NotificationMacro
|
||||||
|
instrument_rendering
|
||||||
end
|
end
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
def instrument_around_render
|
def instrument_rendering
|
||||||
define_callbacks :render
|
|
||||||
around_render do |args, block|
|
around_render do |args, block|
|
||||||
tag_logger do
|
tag_logger do
|
||||||
notify_render do
|
notify_render do
|
||||||
@ -42,11 +22,31 @@ module ActiveModelSerializers::Logging
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def around_render(*filters, &blk)
|
# Adapted from:
|
||||||
set_callback(:render, :around, *filters, &blk)
|
# https://github.com/rubygems/rubygems/blob/cb28f5e991/lib/rubygems/deprecate.rb
|
||||||
end
|
# Provides a single method +notify+ to be used to declare when
|
||||||
|
# something a method notifies, with the argument +callback_name+ of the notification callback.
|
||||||
|
#
|
||||||
|
# class Adapter
|
||||||
|
# def self.klass_method
|
||||||
|
# # ...
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# def instance_method
|
||||||
|
# # ...
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# include ActiveModelSerializers::Logging
|
||||||
|
# notify :instance_method, :render
|
||||||
|
#
|
||||||
|
# class << self
|
||||||
|
# extend ActiveModelSerializers::Logging::NotificationMacro
|
||||||
|
# notify :klass_method, :render
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
module NotificationMacro
|
||||||
##
|
##
|
||||||
# Simple notify method that wraps up +name+
|
# Simple notify method that wraps up +name+
|
||||||
# in a dummy method. It notifies on with the +callback_name+ notifier on
|
# in a dummy method. It notifies on with the +callback_name+ notifier on
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user