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
-
#containing_collections ⇒ Array<String>
DRUIDs of collections this object is a member of.
-
#file_mime_types ⇒ Array<String>
All unique MIME types of files in this object.
-
#files ⇒ Array<CocinaDisplay::Structural::File>
Structured data for all individual files in the object.
-
#fileset_types ⇒ Array<String>
All unique types of filesets in this object.
-
#filesets ⇒ Array<CocinaDisplay::Structural::FileSet>
Structured data for all file sets in the object.
-
#thumbnail? ⇒ Boolean
True if the object has a usable thumbnail file.
-
#thumbnail_file ⇒ CocinaDisplay::Structural::File?
The thumbnail file for this object, if any.
-
#thumbnail_url(region: "full", width: "!400", height: "400") ⇒ String?
URL to a thumbnail image for this object, if any.
-
#total_file_size_int ⇒ Integer
Summed size of all files in bytes.
-
#total_file_size_str ⇒ String
Human-readable string representation of #total_file_size_int.
-
#virtual_object? ⇒ Boolean
Whether this object is a virtual object.
-
#virtual_object_members ⇒ Array<String>
DRUIDs of members of this virtual object.
-
#virtual_object_parents ⇒ Array<String>
DRUIDs of virtual objects this object is a part of.
Instance Method Details
#containing_collections ⇒ Array<String>
DRUIDs of collections this object is a member of.
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_types ⇒ Array<String>
All unique MIME types of files in this object.
36 37 38 |
# File 'lib/cocina_display/concerns/structural.rb', line 36 def file_mime_types files.map(&:mime_type).compact.uniq end |
#files ⇒ Array<CocinaDisplay::Structural::File>
Structured data for all individual files in the object. Traverses nested FileSet structure to return a flattened array.
29 30 31 |
# File 'lib/cocina_display/concerns/structural.rb', line 29 def files filesets.flat_map(&:files) end |
#fileset_types ⇒ Array<String>
All unique types of filesets in this object.
43 44 45 |
# File 'lib/cocina_display/concerns/structural.rb', line 43 def fileset_types filesets.map(&:type).compact.uniq end |
#filesets ⇒ Array<CocinaDisplay::Structural::FileSet>
Structured data for all file sets in the object. Each fileset contains one or more files.
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: , base_url: stacks_base_url) end end |
#thumbnail? ⇒ Boolean
Does not attempt to crawl virtual object members for thumbnails.
True if the object has a usable thumbnail file.
75 76 77 |
# File 'lib/cocina_display/concerns/structural.rb', line 75 def thumbnail? thumbnail_file.present? end |
#thumbnail_file ⇒ CocinaDisplay::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?
Uses the IIIF image server to generate an image of the given size.
URL to a thumbnail image for this object, if any.
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_int ⇒ Integer
Summed size of all files in bytes.
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_str ⇒ String
Human-readable string representation of #total_file_size_int.
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.
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_members ⇒ Array<String>
DRUIDs of members of this virtual object.
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_parents ⇒ Array<String>
DRUIDs of virtual objects this object is a part of.
106 107 108 |
# File 'lib/cocina_display/concerns/structural.rb', line 106 def virtual_object_parents .filter { |res| res.type == "part of" }.map(&:druid).compact_blank end |
”