Clean up meta handling.

This commit is contained in:
Lucas Hosseini
2016-01-20 01:00:14 +01:00
parent 207c85f0fd
commit 701404f757
4 changed files with 66 additions and 26 deletions

View File

@@ -6,6 +6,7 @@ module ActiveModel
autoload :PaginationLinks
autoload :FragmentCache
autoload :Link
autoload :Meta
autoload :Deserialization
# TODO: if we like this abstraction and other API objects to it,
@@ -157,7 +158,7 @@ module ActiveModel
links = links_for(serializer)
resource_object[:links] = links if links.any?
meta = serializer.meta
meta = meta_for(serializer)
resource_object[:meta] = meta unless meta.nil?
resource_object
@@ -220,6 +221,10 @@ module ActiveModel
def pagination_links_for(serializer, options)
JsonApi::PaginationLinks.new(serializer.object, options[:serialization_context]).serializable_hash(options)
end
def meta_for(serializer)
Meta.new(serializer).as_json
end
end
end
end

View File

@@ -0,0 +1,29 @@
module ActiveModel
class Serializer
module Adapter
class JsonApi
class Meta
def initialize(serializer)
@object = serializer.object
@scope = serializer.scope
# Use the return value of the block unless it is nil.
if serializer._meta.respond_to?(:call)
@value = instance_eval(&serializer._meta)
else
@value = serializer._meta
end
end
def as_json
@value
end
protected
attr_reader :object, :scope
end
end
end
end
end