Class: Hyrax::Work

Inherits:
Resource
  • Object
show all
Defined in:
app/models/hyrax/work.rb

Overview

Note:

Some collection types limit a work to belong to one and only one collection of that type.

Note:

‘:member_ids` holds ids of child works and file sets.

Valkyrie model for ‘Work` domain objects in the Hydra Works model.

## Relationships

### Administrative Set and Work

  • Defined: The relationship is defined by the work’s ‘:admin_set_id` attribute.

  • Tested: The relationship is tested in shared spec ‘’a Hyrax::Work’‘ by testing `#admin_set_id`. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.

  • Administrative Set to Work: (1..m) An admin set can have many works.

    • See Hyrax::AdministrativeSet for code to get works in an admin set.

  • Work to Administrative Set: (1..1) A work must be in one and only one admin set.

### Collection and Work

  • Defined: The relationship is defined by the work’s ‘:member_of_collection_ids` attribute.

  • Tested: The relationship is tested in shared spec ‘’a Hyrax::Work’‘ by testing `it_behaves_like ’belongs to collections’‘. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.

  • Collection to Work: (0..m) A collection can have many works.

    • See Hyrax::PcdmCollection for code to get works in a collection.

  • Work to Collection: (0..m) A work can be in many collections.

### Work and Work

  • Defined: The relationship is defined in the parent work’s ‘:member_ids` attribute.

  • Tested: The relationship is tested in shared spec ‘’a Hyrax::Work’‘ by testing `it_behaves_like ’has_members’‘. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.

  • Work to child Work: (0..m) A work can have many child works.

  • Work to parent Work: (0..1) A work can be in at most one parent work.

### Work and File Set

  • Defined: The relationship is defined in the parent work’s ‘:member_ids` attribute.

  • Tested: The relationship is tested in shared spec ‘’a Hyrax::Work’‘ by testing `it_behaves_like ’has_members’‘. Shared specs are defined in /lib/hyrax/specs/shared_specs/hydra_works.rb.

  • Work to File Set: (0..m) A work can have many file sets.

  • File Set to Work: (1..1) A file set must be in one and only one work.

    • See Hyrax::FileSet for code to get the work a file set is in.

Examples:

Set admin set for a work:

work.admin_set_id = admin_set.id

Get admin set a work is in:

admin_set = Hyrax.query_service.find_by(id: work.admin_set_id)

Add a work to a collection using Hyrax::CollectionMemberService (multiple method options)

Hyrax::CollectionMemberService.add_members(collection_id: col.id, members: works, user: current_user)

Get collections a work is in:

collections = Hyrax.custom_queries.find_collections_for(resource: work)

Add a child work to a work:

Hyrax::Transactions::Container['work_resource.add_to_parent']
  .call(child_work, parent_id: parent_work.id, user: current_user)

Get child works:

works = Hyrax.custom_queries.find_child_works(resource: parent_work)

Get parent work:

parent_work = Hyrax.custom_queries.find_parent_work(resource: child_work)

Add a file set to a work (code from Hyrax::WorkUploadsHandler#append_to_work)

work.member_ids += [file_set.id]
work.representative_id = file_set.id if work.respond_to?(:representative_id) && work.representative_id.blank?
work.thumbnail_id = file_set.id if work.respond_to?(:thumbnail_id) && work.thumbnail_id.blank?
Hyrax.persister.save(resource: work)
Hyrax.publisher.publish('object.metadata.updated', object: work, user: files.first.user)

Get file sets:

file_sets = Hyrax.custom_queries.find_child_file_sets(resource: work)

See Also:

Class Method Summary collapse

Methods inherited from Resource

#==, collection?, #collection?, #embargo, #embargo=, file?, #file?, file_set?, #file_set?, human_readable_type, #lease, #lease=, pcdm_collection?, #pcdm_collection?, #pcdm_object?, #permission_manager, #to_rdf_representation, to_rdf_representation, #visibility, #visibility=, #work?, work?

Methods included from WithEvents

#event_class, #events, #log_event, #stream

Class Method Details

.pcdm_object?Boolean

Returns true.

Returns:

  • (Boolean)

    true



111
112
113
# File 'app/models/hyrax/work.rb', line 111

def self.pcdm_object?
  true
end