Skip to content

Commit 0bd5c65

Browse files
committed
Add support for resource-level meta.
1 parent 8981683 commit 0bd5c65

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/active_model/serializer.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,23 @@ class Serializer
2323
include Type
2424
require 'active_model/serializer/adapter'
2525

26+
with_options instance_writer: false, instance_reader: false do |serializer|
27+
serializer.class_attribute :_meta # @api private : meta definition, @see Serializer#meta
28+
end
29+
30+
# Register a meta attribute for the corresponding resource.
31+
#
32+
# @param [Hash] hash Optional hash
33+
# @param [Block] block Optional block
34+
def self.meta(hash = nil, &block)
35+
self._meta =
36+
if !block.nil?
37+
block
38+
else
39+
hash
40+
end
41+
end
42+
2643
# @param resource [ActiveRecord::Base, ActiveModelSerializers::Model]
2744
# @return [ActiveModel::Serializer]
2845
# Preferentially returns
@@ -128,6 +145,14 @@ def read_attribute_for_serialization(attr)
128145
end
129146
end
130147

148+
def meta
149+
if self.class._meta.respond_to?(:call)
150+
instance_eval(&self.class._meta)
151+
else
152+
self.class._meta
153+
end
154+
end
155+
131156
protected
132157

133158
attr_accessor :instance_options

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ def resource_object_for(serializer)
157157
links = links_for(serializer)
158158
resource_object[:links] = links if links.any?
159159

160+
meta = serializer.meta
161+
resource_object[:meta] = meta unless meta.nil?
162+
160163
resource_object
161164
end
162165

0 commit comments

Comments
 (0)