Module: CocinaDisplay::Concerns::Forms
- Included in:
- CocinaDisplay::CocinaRecord, RelatedResource
- Defined in:
- lib/cocina_display/concerns/forms.rb
Overview
Methods for extracting format/genre information from a Cocina object
Instance Method Summary collapse
-
#all_forms ⇒ Array<Form>
Collapses all nested form values into an array of Form objects.
-
#all_resource_types ⇒ Array<ResourceType>
All resource types forms, as ResourceTypes.
-
#archived_website? ⇒ Boolean
Is the object a web archive?.
-
#cartographic? ⇒ Boolean
Is the object a cartographic resource?.
-
#dataset? ⇒ Boolean
Is the object a dataset?.
-
#extent_forms ⇒ Array<Form>
Form objects with type “extent”.
-
#extents ⇒ Array<String>
Extent of the object, such as “1 audiotape” or “1 map”.
-
#form_display_data ⇒ Array<DisplayData>
All form-related data to be rendered for display.
-
#form_forms ⇒ Array<Form>
Form objects with type “form”.
-
#form_note_display_data ⇒ Array<DisplayData>
All form notes to be rendered for display.
-
#forms ⇒ Array<String>
Physical or digital forms of the object.
-
#frequency ⇒ Array<String>
Frequency terms for a periodical, drawn from the event notes.
-
#genre_display_data ⇒ Array<DisplayData>
All genre-related data to be rendered for display.
-
#genre_forms ⇒ Array<Form>
Form objects with type “genre”.
-
#genres ⇒ Array<String>
Genres of the object, capitalized for display.
-
#genres_search ⇒ Array<String>
Genres of the object, with additional values added for search/faceting.
-
#issuance_terms ⇒ Array<String>
Issuance terms for a work, drawn from the event notes.
-
#map_display_data ⇒ Array<DisplayData>
All map-related data to be rendered for display.
-
#map_forms ⇒ Array<Form>
Form objects with types related to map data.
-
#media_forms ⇒ Array<Form>
Form objects with types that are media-related.
-
#mods_resource_types ⇒ Array<String>
Resource types of the object, expressed in SearchWorks controlled vocabulary.
-
#periodical? ⇒ Boolean
Is the object a periodical or serial?.
-
#resource_type_values ⇒ Array<String>
Display values of all resource types.
-
#searchworks_resource_types ⇒ Array<String>
Resource types of the object, expressed in SearchWorks controlled vocabulary.
-
#self_deposit_resource_types ⇒ Array<ResourceType>
ResourceType objects that are Stanford self-deposit resource types.
Instance Method Details
#all_forms ⇒ Array<Form>
Collapses all nested form values into an array of Form objects. Checks both description.form and description.geographic.form. Preserves resource type without flattening, since it can be structured.
118 119 120 121 122 123 124 125 |
# File 'lib/cocina_display/concerns/forms.rb', line 118 def all_forms @all_forms ||= Enumerator::Chain.new( path("$.description.form.*"), path("$.description.geographic.*.form.*") ) .flat_map { |form| Utils.flatten_nested_values(form, atomic_types: ["resource type"]) } .map { |form| CocinaDisplay::Forms::Form.from_cocina(form) } end |
#all_resource_types ⇒ Array<ResourceType>
All resource types forms, as ResourceTypes.
160 161 162 |
# File 'lib/cocina_display/concerns/forms.rb', line 160 def all_resource_types all_forms.filter { |form| form.is_a?(CocinaDisplay::Forms::ResourceType) } end |
#archived_website? ⇒ Boolean
Is the object a web archive?
104 105 106 |
# File 'lib/cocina_display/concerns/forms.rb', line 104 def archived_website? genres.include?("Archived website") end |
#cartographic? ⇒ Boolean
Is the object a cartographic resource?
98 99 100 |
# File 'lib/cocina_display/concerns/forms.rb', line 98 def cartographic? resource_type_values.include?("cartographic") end |
#dataset? ⇒ Boolean
Is the object a dataset?
110 111 112 |
# File 'lib/cocina_display/concerns/forms.rb', line 110 def dataset? genres.include?("Dataset") end |
#extent_forms ⇒ Array<Form>
Form objects with type “extent”.
141 142 143 |
# File 'lib/cocina_display/concerns/forms.rb', line 141 def extent_forms all_forms.filter { |form| form.type == "extent" } end |
#extents ⇒ Array<String>
Extent of the object, such as “1 audiotape” or “1 map”.
33 34 35 |
# File 'lib/cocina_display/concerns/forms.rb', line 33 def extents extent_forms.map(&:to_s).compact_blank.uniq end |
#form_display_data ⇒ Array<DisplayData>
All form-related data to be rendered for display. Includes form, extent, resource type, etc. (but not self-deposit resource types).
59 60 61 |
# File 'lib/cocina_display/concerns/forms.rb', line 59 def form_display_data CocinaDisplay::DisplayData.from_objects(all_forms - genre_forms - map_forms - media_forms - self_deposit_resource_types) end |
#form_forms ⇒ Array<Form>
Form objects with type “form”.
129 130 131 |
# File 'lib/cocina_display/concerns/forms.rb', line 129 def form_forms all_forms.filter { |form| form.type == "form" } end |
#form_note_display_data ⇒ Array<DisplayData>
All form notes to be rendered for display. Checks both description.form.note and description.geographic.form.note.
80 81 82 83 84 85 86 87 88 |
# File 'lib/cocina_display/concerns/forms.rb', line 80 def form_note_display_data CocinaDisplay::DisplayData.from_cocina( Enumerator::Chain.new( path("$.description.form.*.note.*"), path("$.description.geographic.*.form.*.note.*") ), label: I18n.t("cocina_display.field_label.form.note") ) end |
#forms ⇒ Array<String>
Physical or digital forms of the object.
25 26 27 |
# File 'lib/cocina_display/concerns/forms.rb', line 25 def forms form_forms.map(&:to_s).compact_blank.uniq end |
#frequency ⇒ Array<String>
Frequency terms for a periodical, drawn from the event notes.
184 185 186 |
# File 'lib/cocina_display/concerns/forms.rb', line 184 def frequency events.flat_map(&:notes).filter { |note| note.type == "frequency" }.map { |note| note.to_s.downcase }.uniq end |
#genre_display_data ⇒ Array<DisplayData>
All genre-related data to be rendered for display. Includes both form genres, subject genres, and self-deposit resource types.
66 67 68 |
# File 'lib/cocina_display/concerns/forms.rb', line 66 def genre_display_data CocinaDisplay::DisplayData.from_objects(genre_forms + genre_subjects + self_deposit_resource_types) end |
#genre_forms ⇒ Array<Form>
Form objects with type “genre”.
135 136 137 |
# File 'lib/cocina_display/concerns/forms.rb', line 135 def genre_forms all_forms.filter { |form| form.type == "genre" } end |
#genres ⇒ Array<String>
Genres of the object, capitalized for display.
41 42 43 |
# File 'lib/cocina_display/concerns/forms.rb', line 41 def genres genre_forms.map(&:to_s).compact_blank.uniq end |
#genres_search ⇒ Array<String>
These values are added for discovery in SearchWorks but not for display.
Genres of the object, with additional values added for search/faceting.
48 49 50 51 52 53 54 |
# File 'lib/cocina_display/concerns/forms.rb', line 48 def genres_search genres.tap do |values| values << "Thesis/Dissertation" if values.include?("Thesis") values << "Conference proceedings" if values.include?("Conference publication") values << "Government document" if values.include?("Government publication") end.uniq end |
#issuance_terms ⇒ Array<String>
Issuance terms for a work, drawn from the event notes.
178 179 180 |
# File 'lib/cocina_display/concerns/forms.rb', line 178 def issuance_terms events.flat_map(&:notes).filter { |note| note.type == "issuance" }.map { |note| note.to_s.downcase }.uniq end |
#map_display_data ⇒ Array<DisplayData>
All map-related data to be rendered for display. Includes map scale, projection info, and geographic coordinate subjects.
73 74 75 |
# File 'lib/cocina_display/concerns/forms.rb', line 73 def map_display_data CocinaDisplay::DisplayData.from_objects(map_forms + coordinate_subjects) end |
#map_forms ⇒ Array<Form>
Form objects with types related to map data.
147 148 149 |
# File 'lib/cocina_display/concerns/forms.rb', line 147 def map_forms all_forms.filter { |form| ["map scale", "map projection"].include?(form.type) } end |
#media_forms ⇒ Array<Form>
These are excluded from the general form display data.
Form objects with types that are media-related.
154 155 156 |
# File 'lib/cocina_display/concerns/forms.rb', line 154 def media_forms all_forms.filter { |form| ["reformatting quality", "media type"].include?(form.type) } end |
#mods_resource_types ⇒ Array<String>
Resource types of the object, expressed in SearchWorks controlled vocabulary.
17 18 19 |
# File 'lib/cocina_display/concerns/forms.rb', line 17 def mods_resource_types all_resource_types.select { |type| type.mods? }.map(&:to_s) end |
#periodical? ⇒ Boolean
Is the object a periodical or serial?
92 93 94 |
# File 'lib/cocina_display/concerns/forms.rb', line 92 def periodical? issuance_terms.include?("periodical") || issuance_terms.include?("serial") || frequency.any? end |
#resource_type_values ⇒ Array<String>
Display values of all resource types.
172 173 174 |
# File 'lib/cocina_display/concerns/forms.rb', line 172 def resource_type_values all_resource_types.map(&:to_s).uniq end |
#searchworks_resource_types ⇒ Array<String>
Resource types of the object, expressed in SearchWorks controlled vocabulary.
9 10 11 12 13 |
# File 'lib/cocina_display/concerns/forms.rb', line 9 def searchworks_resource_types mapped_values = resource_type_values.flat_map { |resource_type| searchworks_resource_type(resource_type) } mapped_values << "Dataset" if dataset? mapped_values.uniq end |
#self_deposit_resource_types ⇒ Array<ResourceType>
ResourceType objects that are Stanford self-deposit resource types.
166 167 168 |
# File 'lib/cocina_display/concerns/forms.rb', line 166 def self_deposit_resource_types all_resource_types.filter { |resource_type| resource_type.stanford_self_deposit? } end |