Class: Hyrax::CustomQueries::Navigators::ParentWorkNavigator

Inherits:
Object
  • Object
show all
Defined in:
app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb

Overview

Navigate from a resource to it’s parent work.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_service:) ⇒ ParentWorkNavigator

Returns a new instance of ParentWorkNavigator.

Since:

  • 3.4.0



19
20
21
# File 'app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb', line 19

def initialize(query_service:)
  @query_service = query_service
end

Instance Attribute Details

#query_serviceObject (readonly)

Since:

  • 3.4.0



17
18
19
# File 'app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb', line 17

def query_service
  @query_service
end

Class Method Details

.queriesObject

Define the queries that can be fulfilled by this navigator.

Since:

  • 3.4.0



13
14
15
# File 'app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb', line 13

def self.queries
  [:find_parent_work, :find_parent_work_id]
end

Instance Method Details

#find_parent_work(resource:) ⇒ Array<Valkyrie::Resource>

Note:

There should be only one parent resource. A warning is logged if more than one resource is found and the first of the resources is returned.

Find parent work of a given resource, and map to Valkyrie Resources

Parameters:

  • resource (Valkyrie::Resource)

Returns:

  • (Array<Valkyrie::Resource>)

Since:

  • 3.4.0



30
31
32
33
34
35
36
37
38
39
# File 'app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb', line 30

def find_parent_work(resource:)
  results = Hyrax.query_service.find_inverse_references_by(resource: resource,
                                                           property: :member_ids).select(&:work?)
  if results.count > 1
    Hyrax.logger.warn("#{resource.work? ? 'Work' : 'File set'} " \
                      "#{resource.id} is in #{results.count} works when it " \
                      "should be in no more than one. Found in #{results.map(&:id).join(', ')}.")
  end
  results.first
end

#find_parent_work_id(resource:) ⇒ Array<Valkyrie::ID>

Note:

There should be only one parent resource. A warning is logged if more than one resource is found and the first of the resources is returned.

Find the id of the parent work of a given resource, and map to Valkyrie Resources IDs

Parameters:

  • resource (Valkyrie::Resource)

Returns:

  • (Array<Valkyrie::ID>)

Since:

  • 3.4.0



48
49
50
# File 'app/services/hyrax/custom_queries/navigators/parent_work_navigator.rb', line 48

def find_parent_work_id(resource:)
  find_parent_work(resource: resource)&.id
end