Sha256: 90f577976fddd58a896e66daef395c6406c4c3b655b5d133948aba6c4efa3f41

Contents?: true

Size: 1.53 KB

Versions: 17

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true
module Valkyrie::Persistence
  # Implements the DataMapper Pattern to proxy another Metadata Persister
  #
  # Provides with_buffer to send multiple updates at one time to the proxied persister
  #  In some cases this will realize performance gains
  #
  # @example
  #     buffered_persister.with_buffer do |persist, buffer|
  #       yield Valkyrie::AdapterContainer.new(persister: persist, query_service: metadata_adapter.query_service)
  #       buffer.persister.deletes.uniq(&:id).each do |delete|
  #         index_persister.delete(resource: delete)
  #       end
  #       index_persister.save_all(resources: buffer.query_service.find_all)
  #     end
  #
  # @see Valkyrie::Persistence::DeleteTrackingBuffer for more information on deletes used in the example above
  #
  class BufferedPersister
    attr_reader :persister, :buffer_class
    delegate :adapter, :wipe!, to: :persister
    def initialize(persister, buffer_class: Valkyrie::Persistence::DeleteTrackingBuffer)
      @persister = persister
      @buffer_class = buffer_class
    end

    def save(resource:, external_resource: false)
      persister.save(resource: resource, external_resource: external_resource)
    end

    def save_all(resources:)
      persister.save_all(resources: resources)
    end

    def delete(resource:)
      persister.delete(resource: resource)
    end

    def with_buffer
      memory_buffer = buffer_class.new
      yield [Valkyrie::Persistence::CompositePersister.new(self, memory_buffer.persister), memory_buffer]
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
valkyrie-3.5.0 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.4.0 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.3.0 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.5 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.4 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.3 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.2 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.1 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.1.0 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.3 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.2 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.1 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.0 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.0.pre.rc.1 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.0.pre.beta.3 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.0.pre.beta.2 lib/valkyrie/persistence/buffered_persister.rb
valkyrie-3.0.0.pre.beta.1 lib/valkyrie/persistence/buffered_persister.rb