Fix serialization scope options

This commit is contained in:
Benjamin Fleischer
2016-04-01 05:37:32 -05:00
parent 96c5516d21
commit a065bc28d1
3 changed files with 49 additions and 35 deletions

View File

@@ -30,8 +30,8 @@ module ActionController
options[:adapter] = false
end
serializable_resource = ActiveModelSerializers::SerializableResource.new(resource, options)
serializable_resource.serialization_scope ||= serialization_scope
serializable_resource.serialization_scope_name = _serialization_scope
serializable_resource.serialization_scope ||= options.fetch(:scope) { serialization_scope }
serializable_resource.serialization_scope_name = options.fetch(:scope_name) { _serialization_scope }
# For compatibility with the JSON renderer: `json.to_json(options) if json.is_a?(String)`.
# Otherwise, since `serializable_resource` is not a string, the renderer would call
# `to_json` on a String and given odd results, such as `"".to_json #=> '""'`

View File

@@ -96,16 +96,18 @@ module ActiveModel
end
end
def self._serializer_instance_method_defined?(name)
_serializer_instance_methods.include?(name)
# rubocop:disable Style/ClassVars
def self.method_added(method_name)
@@_serializer_instance_methods ||= Hash.new { |h, k| h[k] = Set.new }
@@_serializer_instance_methods[self] << method_name
end
# TODO: Fix load-order failures when different serializer instances define different
# scope methods
def self._serializer_instance_methods
@_serializer_instance_methods ||= (public_instance_methods - Object.public_instance_methods).to_set
def self._serializer_instance_method_defined?(name)
@_serializer_instance_methods ||= (ActiveModel::Serializer.public_instance_methods - Object.public_instance_methods).to_set
@_serializer_instance_methods.include?(name) ||
@@_serializer_instance_methods[self].include?(name)
end
private_class_method :_serializer_instance_methods
# rubocop:enable Style/ClassVars
attr_accessor :object, :root, :scope