Module: CocinaDisplay::Concerns::Structural

Included in:
CocinaDisplay::CocinaRecord
Defined in:
lib/cocina_display/concerns/structural.rb

Overview

Methods for inspecting structural metadata (e.g. file hierarchy)

Instance Method Summary collapse

Instance Method Details

#containing_collectionsArray<String>

DRUIDs of collections this object is a member of.

Examples:

“sj775xm6965”

Returns:

  • (Array<String>)


43
44
45
# File 'lib/cocina_display/concerns/structural.rb', line 43

def containing_collections
  path("$.structural.isMemberOf.*").map { |druid| druid.delete_prefix("druid:") }
end

#file_mime_typesArray<String>

All unique MIME types of files in this object.

Examples:

“image/jpeg”, “application/pdf”

Returns:

  • (Array<String>)


22
23
24
# File 'lib/cocina_display/concerns/structural.rb', line 22

def file_mime_types
  files.pluck("hasMimeType").uniq
end

#filesArray<Hash>

Structured data for all individual files in the object. Traverses nested FileSet structure to return a flattened array.

Examples:

record.files.each do |file|
 puts file["filename"] #=> "image1.jpg"
 puts file["size"] #=> 123456
end

Returns:

  • (Array<Hash>)


15
16
17
# File 'lib/cocina_display/concerns/structural.rb', line 15

def files
  @files ||= path("$.structural.contains.*.structural.contains.*").search
end

#total_file_size_intInteger

Summed size of all files in bytes.

Examples:

2621440

Returns:

  • (Integer)


36
37
38
# File 'lib/cocina_display/concerns/structural.rb', line 36

def total_file_size_int
  files.pluck("size").sum
end

#total_file_size_strString

Human-readable string representation of #total_file_size_int.

Examples:

“2.5 MB”

Returns:

  • (String)


29
30
31
# File 'lib/cocina_display/concerns/structural.rb', line 29

def total_file_size_str
  ActiveSupport::NumberHelper.number_to_human_size(total_file_size_int)
end

#virtual_object?Boolean

Returns:

  • (Boolean)


47
48
49
50
51
# File 'lib/cocina_display/concerns/structural.rb', line 47

def virtual_object?
  return false if path("$.structural.contains.*").any?

  path("$.structural.hasMemberOrders.*.members.*").any?
end

#virtual_object_membersObject



53
54
55
56
57
# File 'lib/cocina_display/concerns/structural.rb', line 53

def virtual_object_members
  return [] unless virtual_object?

  path("$.structural.hasMemberOrders.*.members.*").map { |druid| druid.delete_prefix("druid:") }
end