module ActiveModel class Serializer module Adapter class Base # Automatically register adapters when subclassing def self.inherited(subclass) ActiveModel::Serializer::Adapter.register(subclass) end attr_reader :serializer, :instance_options def initialize(serializer, options = {}) @serializer = serializer @instance_options = options end def serializable_hash(_options = nil) fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.' end def as_json(options = nil) hash = serializable_hash(options) include_meta(hash) hash end def fragment_cache(*_args) fail NotImplementedError, 'This is an abstract method. Should be implemented at the concrete adapter.' end def cache_check(serializer) CachedSerializer.new(serializer).cache_check(self) do yield end end private def meta serializer.meta if serializer.respond_to?(:meta) end def meta_key serializer.meta_key || 'meta'.freeze end def root serializer.json_key.to_sym if serializer.json_key end def include_meta(json) json[meta_key] = meta if meta json end end end end end