module Hydra::PCDM::ObjectBehavior

Implements behavior for PCDM objects.

The behavior is summarized as:

1) Hydra::PCDM::Object can aggregate (pcdm:hasMember) Hydra::PCDM::Object
2) Hydra::PCDM::Object can aggregate (ore:aggregates) Hydra::PCDM::Object  (Object related to the Object)
3) Hydra::PCDM::Object can contain (pcdm:hasFile) Hydra::PCDM::File
4) Hydra::PCDM::Object can contain (pcdm:hasRelatedFile) Hydra::PCDM::File
5) Hydra::PCDM::Object can NOT aggregate Hydra::PCDM::Collection
6) Hydra::PCDM::Object can NOT aggregate non-PCDM object
7) Hydra::PCDM::Object can have descriptive metadata
8) Hydra::PCDM::Object can have access metadata

@example defining an object class and creating an object

class Book < ActiveFedora::Base
  include Hydra::PCDM::ObjectBehavior
end

my_book = Book.create
# #<Book id: "71/3f/07/e0/713f07e0-9d5c-493a-bdb9-7fbfe2160028", head: [], tail: []>

my_book.pcdm_object?     # => true
my_book.pcdm_collection? # => false

@example adding a members to an object

class Page < ActiveFedora::Base
  include Hydra::PCDM::ObjectBehavior
end

my_book = Book.create
a_page  = Page.create

my_book.members << a_page
my_book.members # => [a_page]

@see PcdmBehavior for details about the base behavior required by

this module.

Public Instance Methods

file_of_type(uri) click to toggle source

Finds or Initializes directly contained file with the requested RDF Type

@param [RDF::URI] uri for the desired Type @return [ActiveFedora::File]

@example

file_of_type(::RDF::URI("http://pcdm.org/ExtractedText"))
# File lib/hydra/pcdm/models/concerns/object_behavior.rb, line 110
def file_of_type(uri)
  matching_files = filter_files_by_type(uri)
  return matching_files.first unless matching_files.empty?
  Hydra::PCDM::AddTypeToFile.call(files.build, uri)
end
filter_files_by_type(uri) click to toggle source

Gives directly contained files that have the requested RDF Type

@param [RDF::URI] uri for the desired Type @return [Enumerable<ActiveFedora::File>]

@example

filter_files_by_type(::RDF::URI("http://pcdm.org/ExtractedText"))
# File lib/hydra/pcdm/models/concerns/object_behavior.rb, line 96
def filter_files_by_type(uri)
  files.reject do |file|
    !file.metadata_node.type.include?(uri)
  end
end
in_objects() click to toggle source

@return [Enumerable<Hydra::PCDM::ObjectBehavior>]

# File lib/hydra/pcdm/models/concerns/object_behavior.rb, line 84
def in_objects
  member_of.select(&:pcdm_object?).to_a
end
pcdm_collection?() click to toggle source

@return [Boolean] whether this instance is a PCDM Collection.

# File lib/hydra/pcdm/models/concerns/object_behavior.rb, line 78
def pcdm_collection?
  false
end
pcdm_object?() click to toggle source

@return [Boolean] whether this instance is a PCDM Object.

# File lib/hydra/pcdm/models/concerns/object_behavior.rb, line 72
def pcdm_object?
  true
end