mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 07:16:49 +00:00
Replace fail/rescue CollectionSerializer::NoSerializerError with throw/catch :no_serializer (#1767)
This commit is contained in:
committed by
L. Preston Sego III
parent
c69855bfaa
commit
6c6e45b23f
@@ -1,7 +1,6 @@
|
||||
module ActiveModel
|
||||
class Serializer
|
||||
class CollectionSerializer
|
||||
NoSerializerError = Class.new(StandardError)
|
||||
include Enumerable
|
||||
delegate :each, to: :@serializers
|
||||
|
||||
@@ -74,8 +73,9 @@ module ActiveModel
|
||||
def serializer_from_resource(resource, serializer_context_class, options)
|
||||
serializer_class = options.fetch(:serializer) { serializer_context_class.serializer_for(resource) }
|
||||
|
||||
if serializer_class.nil? # rubocop:disable Style/GuardClause
|
||||
fail NoSerializerError, "No serializer found for resource: #{resource.inspect}"
|
||||
if serializer_class.nil?
|
||||
ActiveModelSerializers.logger.debug "No serializer found for resource: #{resource.inspect}"
|
||||
throw :no_serializer
|
||||
else
|
||||
serializer_class.new(resource, options.except(:serializer))
|
||||
end
|
||||
|
||||
@@ -105,21 +105,24 @@ module ActiveModel
|
||||
# @api private
|
||||
#
|
||||
def build_association(parent_serializer, parent_serializer_options, include_slice = {})
|
||||
association_value = value(parent_serializer, include_slice)
|
||||
reflection_options = options.dup
|
||||
association_value = value(parent_serializer, include_slice)
|
||||
serializer_class = parent_serializer.class.serializer_for(association_value, reflection_options)
|
||||
reflection_options[:include_data] = include_data?(include_slice)
|
||||
reflection_options[:links] = @_links
|
||||
reflection_options[:meta] = @_meta
|
||||
|
||||
if serializer_class
|
||||
begin
|
||||
reflection_options[:serializer] = serializer_class.new(
|
||||
serializer = catch(:no_serializer) do
|
||||
serializer_class.new(
|
||||
association_value,
|
||||
serializer_options(parent_serializer, parent_serializer_options, reflection_options)
|
||||
)
|
||||
rescue ActiveModel::Serializer::CollectionSerializer::NoSerializerError
|
||||
end
|
||||
if serializer.nil?
|
||||
reflection_options[:virtual_value] = association_value.try(:as_json) || association_value
|
||||
else
|
||||
reflection_options[:serializer] = serializer
|
||||
end
|
||||
elsif !association_value.nil? && !association_value.instance_of?(Object)
|
||||
reflection_options[:virtual_value] = association_value
|
||||
|
||||
Reference in New Issue
Block a user