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>)


82
83
84
# File 'lib/cocina_display/concerns/structural.rb', line 82

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>)


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

def file_mime_types
  files.map(&:mime_type).compact.uniq
end

#filesArray<CocinaDisplay::Structural::File>

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:



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

def files
  filesets.flat_map(&:files)
end

#fileset_typesArray<String>

All unique types of filesets in this object.

Examples:

“image”, “document”

Returns:

  • (Array<String>)


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

def fileset_types
  filesets.map(&:type).compact.uniq
end

#filesetsArray<CocinaDisplay::Structural::FileSet>

Structured data for all file sets in the object. Each fileset contains one or more files.

Examples:

record.filesets.each do |fileset|
 puts fileset.type #=> "image"
 puts fileset.label #=> "High Resolution Images"
end

Returns:



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

def filesets
  @filesets ||= path("$.structural.contains.*").map do |fileset|
    CocinaDisplay::Structural::FileSet.new(fileset, druid: bare_druid, base_url: stacks_base_url)
  end
end

#thumbnail?Boolean

Note:

Does not attempt to crawl virtual object members for thumbnails.

True if the object has a usable thumbnail file.

Returns:

  • (Boolean)


75
76
77
# File 'lib/cocina_display/concerns/structural.rb', line 75

def thumbnail?
  thumbnail_file.present?
end

#thumbnail_fileCocinaDisplay::Structural::File?

The thumbnail file for this object, if any. Prefers files marked as thumbnails; falls back to any JP2 image.



113
114
115
# File 'lib/cocina_display/concerns/structural.rb', line 113

def thumbnail_file
  files.find(&:thumbnail?) || files.find(&:jp2_image?)
end

#thumbnail_url(region: "full", width: "!400", height: "400") ⇒ String?

Note:

Uses the IIIF image server to generate an image of the given size.

URL to a thumbnail image for this object, if any.

Examples:

Parameters:

  • region (String) (defaults to: "full")

    Desired region of the image (e.g., “full”, “square”, “x,y,w,h”, “pct:x,y,w,h”).

  • width (String) (defaults to: "!400")

    Desired width of the image in pixels (use “!” prefix to preserve aspect ratio).

  • height (String) (defaults to: "400")

    Desired height of the image in pixels.

Returns:

  • (String, nil)


68
69
70
# File 'lib/cocina_display/concerns/structural.rb', line 68

def thumbnail_url(region: "full", width: "!400", height: "400")
  thumbnail_file&.iiif_url(region: region, width: width, height: height)
end

#total_file_size_intInteger

Summed size of all files in bytes.

Examples:

2621440

Returns:

  • (Integer)


57
58
59
# File 'lib/cocina_display/concerns/structural.rb', line 57

def total_file_size_int
  files.map(&:size).compact.sum
end

#total_file_size_strString

Human-readable string representation of #total_file_size_int.

Examples:

“2.5 MB”

Returns:

  • (String)


50
51
52
# File 'lib/cocina_display/concerns/structural.rb', line 50

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

#virtual_object?Boolean

Whether this object is a virtual object.

Returns:

  • (Boolean)


88
89
90
91
92
# File 'lib/cocina_display/concerns/structural.rb', line 88

def virtual_object?
  return false if filesets.any?

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

#virtual_object_membersArray<String>

DRUIDs of members of this virtual object.

Examples:

“ts786ny5936”, “tp006ms8736”, “tj297ys4758”

Returns:

  • (Array<String>)


97
98
99
100
101
# File 'lib/cocina_display/concerns/structural.rb', line 97

def virtual_object_members
  return [] unless virtual_object?

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

#virtual_object_parentsArray<String>

DRUIDs of virtual objects this object is a part of.

Examples:

“hj097bm8879”

Returns:

  • (Array<String>)


106
107
108
# File 'lib/cocina_display/concerns/structural.rb', line 106

def virtual_object_parents
  related_resources.filter { |res| res.type == "part of" }.map(&:druid).compact_blank
end