Add support for resource-level meta.

This commit is contained in:
Lucas Hosseini 2015-11-22 23:21:13 +01:00
parent 8981683b9f
commit 0bd5c6584f
2 changed files with 28 additions and 0 deletions

View File

@ -23,6 +23,23 @@ module ActiveModel
include Type include Type
require 'active_model/serializer/adapter' require 'active_model/serializer/adapter'
with_options instance_writer: false, instance_reader: false do |serializer|
serializer.class_attribute :_meta # @api private : meta definition, @see Serializer#meta
end
# Register a meta attribute for the corresponding resource.
#
# @param [Hash] hash Optional hash
# @param [Block] block Optional block
def self.meta(hash = nil, &block)
self._meta =
if !block.nil?
block
else
hash
end
end
# @param resource [ActiveRecord::Base, ActiveModelSerializers::Model] # @param resource [ActiveRecord::Base, ActiveModelSerializers::Model]
# @return [ActiveModel::Serializer] # @return [ActiveModel::Serializer]
# Preferentially returns # Preferentially returns
@ -128,6 +145,14 @@ module ActiveModel
end end
end end
def meta
if self.class._meta.respond_to?(:call)
instance_eval(&self.class._meta)
else
self.class._meta
end
end
protected protected
attr_accessor :instance_options attr_accessor :instance_options

View File

@ -157,6 +157,9 @@ module ActiveModel
links = links_for(serializer) links = links_for(serializer)
resource_object[:links] = links if links.any? resource_object[:links] = links if links.any?
meta = serializer.meta
resource_object[:meta] = meta unless meta.nil?
resource_object resource_object
end end