Sha256: 9bf84cf0a3157bb5a49d964b1adafb3bf58ecec21b41dcdc910da7ad310dc898
Contents?: true
Size: 1.57 KB
Versions: 6
Compression:
Stored size: 1.57 KB
Contents
# frozen_string_literal: true require 'valkyrie/persistence/postgres/orm' require 'valkyrie/persistence/postgres/resource_factory' module Valkyrie::Persistence::Postgres # Persister for Postgres MetadataAdapter. class Persister attr_reader :adapter delegate :resource_factory, to: :adapter def initialize(adapter:) @adapter = adapter end # (see Valkyrie::Persistence::Memory::Persister#save) def save(resource:) ensure_multiple_values!(resource) orm_object = resource_factory.from_resource(resource: resource) orm_object.save! resource_factory.to_resource(object: orm_object) end # (see Valkyrie::Persistence::Memory::Persister#save_all) def save_all(resources:) resources.map do |resource| save(resource: resource) end end # (see Valkyrie::Persistence::Memory::Persister#delete) def delete(resource:) orm_object = resource_factory.from_resource(resource: resource) orm_object.delete resource end # (see Valkyrie::Persistence::Memory::Persister#wipe!) def wipe! resource_factory.orm_class.delete_all end private def ensure_multiple_values!(resource) bad_keys = resource.attributes.except(:internal_resource, :created_at, :updated_at, :new_record, :id).select do |_k, v| !v.nil? && !v.is_a?(Array) end raise ::Valkyrie::Persistence::UnsupportedDatatype, "#{resource}: #{bad_keys.keys} have non-array values, which can not be persisted by Valkyrie. Cast to arrays." unless bad_keys.keys.empty? end end end
Version data entries
6 entries across 6 versions & 1 rubygems