Class: Valkyrie::Persistence::Fedora::Persister

Inherits:
Object
  • Object
show all
Defined in:
lib/valkyrie/persistence/fedora/persister.rb,
lib/valkyrie/persistence/fedora/persister/orm_converter.rb,
lib/valkyrie/persistence/fedora/persister/model_converter.rb,
lib/valkyrie/persistence/fedora/persister/resource_factory.rb

Overview

Persister for Fedora MetadataAdapter.

Defined Under Namespace

Classes: ModelConverter, OrmConverter, ResourceFactory

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter:) ⇒ Persister

Returns a new instance of Persister.



8
9
10
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 8

def initialize(adapter:)
  @adapter = adapter
end

Instance Attribute Details

#adapterObject (readonly)

Returns the value of attribute adapter.



6
7
8
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 6

def adapter
  @adapter
end

Instance Method Details

#delete(resource:) ⇒ Object

Parameters:



37
38
39
40
41
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 37

def delete(resource:)
  orm = resource_factory.from_resource(resource: resource)
  orm.delete
  resource
end

#initialize_repositoryObject



51
52
53
54
55
56
57
58
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 51

def initialize_repository
  @initialized ||=
    begin
      resource = ::Ldp::Container::Basic.new(connection, base_path, nil, base_path)
      resource.save if resource.new?
      true
    end
end

#save(resource:) ⇒ Valkyrie::Resource

Returns The resource with an ‘#id` value generated by the persistence backend.

Parameters:

Returns:

  • (Valkyrie::Resource)

    The resource with an ‘#id` value generated by the persistence backend.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 13

def save(resource:)
  initialize_repository
  resource.created_at ||= Time.current
  resource.updated_at ||= Time.current
  ensure_multiple_values!(resource)
  orm = resource_factory.from_resource(resource: resource)
  if !orm.new? || resource.id
    orm.update do |req|
      req.headers["Prefer"] = "handling=lenient; received=\"minimal\""
    end
  else
    orm.create
  end
  resource_factory.to_resource(object: orm)
end

#save_all(resources:) ⇒ Array<Valkyrie::Resource>

Returns List of resources with an ‘#id` value generated by the persistence backend.

Parameters:

Returns:

  • (Array<Valkyrie::Resource>)

    List of resources with an ‘#id` value generated by the persistence backend.



30
31
32
33
34
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 30

def save_all(resources:)
  resources.map do |resource|
    save(resource: resource)
  end
end

#wipe!Object

Wipes all data in the persistence backend.



44
45
46
47
48
49
# File 'lib/valkyrie/persistence/fedora/persister.rb', line 44

def wipe!
  connection.delete(base_path)
  connection.delete("#{base_path}/fcr:tombstone")
rescue => error
  Valkyrie.logger.debug("Failed to wipe Fedora for some reason.") unless error.is_a?(::Ldp::NotFound)
end