module ViewModel::ActiveRecord::Cache::CacheableView

def after_deserialize(deserialize_context:, changes:)

deserialization
Clear the cache if the view or its nested children were changed during
def after_deserialize(deserialize_context:, changes:)
  super if defined?(super)
  if !changes.new? && changes.changed_nested_tree?
    CacheClearer.new(self.class.viewmodel_cache, id).add_to_transaction
  end
end

def create_viewmodel_cache!(**opts)

def create_viewmodel_cache!(**opts)
  @viewmodel_cache = ViewModel::ActiveRecord::Cache.new(self, **opts)
end

def serialize_from_cache(views, migration_versions: {}, locked: false, serialize_context:)

def serialize_from_cache(views, migration_versions: {}, locked: false, serialize_context:)
  plural = views.is_a?(Array)
  views = Array.wrap(views)
  json_views, json_refs = viewmodel_cache.fetch_by_viewmodel(views, locked: locked, migration_versions: migration_versions, serialize_context: serialize_context)
  json_views = json_views.first unless plural
  return json_views, json_refs
end

def viewmodel_cache

def viewmodel_cache
  @viewmodel_cache
end