Class: Valkyrie::Persistence::Solr::Repository
- Inherits:
-
Object
- Object
- Valkyrie::Persistence::Solr::Repository
- Defined in:
- lib/valkyrie/persistence/solr/repository.rb
Overview
Responsible for handling the logic for persisting or deleting multiple objects into or out of solr.
Constant Summary collapse
- COMMIT_PARAMS =
{ softCommit: true }.freeze
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#resource_factory ⇒ Object
readonly
Returns the value of attribute resource_factory.
-
#resources ⇒ Object
readonly
Returns the value of attribute resources.
Instance Method Summary collapse
- #delete ⇒ Object
- #ensure_multiple_values!(resource) ⇒ Object
- #generate_id(resource) ⇒ Object
-
#initialize(resources:, connection:, resource_factory:) ⇒ Repository
constructor
A new instance of Repository.
- #persist ⇒ Object
- #solr_document(resource) ⇒ Object
Constructor Details
#initialize(resources:, connection:, resource_factory:) ⇒ Repository
Returns a new instance of Repository.
9 10 11 12 13 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 9 def initialize(resources:, connection:, resource_factory:) @resources = resources @connection = connection @resource_factory = resource_factory end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
8 9 10 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 8 def connection @connection end |
#resource_factory ⇒ Object (readonly)
Returns the value of attribute resource_factory.
8 9 10 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 8 def resource_factory @resource_factory end |
#resources ⇒ Object (readonly)
Returns the value of attribute resources.
8 9 10 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 8 def resources @resources end |
Instance Method Details
#delete ⇒ Object
27 28 29 30 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 27 def delete connection.delete_by_id resources.map { |resource| resource.id.to_s }, params: COMMIT_PARAMS resources end |
#ensure_multiple_values!(resource) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 41 def ensure_multiple_values!(resource) bad_keys = resource.attributes.except(:internal_resource, :alternate_ids, :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 |
#generate_id(resource) ⇒ Object
36 37 38 39 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 36 def generate_id(resource) Valkyrie.logger.warn "The Solr adapter is not meant to persist new resources, but is now generating an ID." resource.id = SecureRandom.uuid end |
#persist ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 15 def persist documents = resources.map do |resource| generate_id(resource) if resource.id.blank? ensure_multiple_values!(resource) solr_document(resource) end connection.add documents, params: COMMIT_PARAMS documents.map do |document| resource_factory.to_resource(object: document.stringify_keys) end end |
#solr_document(resource) ⇒ Object
32 33 34 |
# File 'lib/valkyrie/persistence/solr/repository.rb', line 32 def solr_document(resource) resource_factory.from_resource(resource: resource).to_h end |