class ViewModel::ActiveRecord::UpdateContext

def self.build!(root_update_data, referenced_update_data, root_type: nil)

def self.build!(root_update_data, referenced_update_data, root_type: nil)
  if root_type.present? && (bad_types = root_update_data.map(&:viewmodel_class).to_set.delete(root_type)).present?
    raise ViewModel::DeserializationError::InvalidViewType.new(root_type.view_name, bad_types.map { |t| ViewModel::Reference.new(t, nil) })
  end
  self.new
    .build_root_update_operations(root_update_data, referenced_update_data)
    .assemble_update_tree
end