Class: Hyrax::Work

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

Overview

TODO:

The description in Hydra::Works Shared Modeling is out of date and uses terminology to describe the relationships that is no longer used in code. Update the model and link to it. This can be a simple relationship diagram with a link to the original Works Shared Modeling for historical perspective.

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:

Instance Method Summary collapse

Methods inherited from Resource

#collection?, #file?, #file_set?, human_readable_type, #permission_manager, #visibility, #visibility=

Methods included from WithEvents

#event_class, #events, #log_event, #stream

Instance Method Details

#pcdm_object?Boolean

Returns true.

Returns:

  • (Boolean)

    true


114
115
116
# File 'app/models/hyrax/work.rb', line 114

def pcdm_object?
  true
end

#work?Boolean

Returns true.

Returns:

  • (Boolean)

    true


120
121
122
# File 'app/models/hyrax/work.rb', line 120

def work?
  true
end