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

Version Path
valkyrie-1.1.2 lib/valkyrie/persistence/postgres/persister.rb
valkyrie-1.1.1 lib/valkyrie/persistence/postgres/persister.rb
valkyrie-1.1.0 lib/valkyrie/persistence/postgres/persister.rb
valkyrie-1.0.0 lib/valkyrie/persistence/postgres/persister.rb
valkyrie-1.0.0.rc2 lib/valkyrie/persistence/postgres/persister.rb
valkyrie-1.0.0.rc1 lib/valkyrie/persistence/postgres/persister.rb