Module: CocinaDisplay::Concerns::Events
- Included in:
- CocinaDisplay::CocinaRecord, RelatedResource
- Defined in:
- lib/cocina_display/concerns/events.rb
Instance Method Summary collapse
-
#admin_creation_event ⇒ CocinaDisplay::Events::Event
The adminMetadata creation event (When was it was deposited?).
-
#earliest_preferred_date(dates, ignore_qualified: false) ⇒ CocinaDisplay::Dates::Date?
Choose the earliest, best date from a provided list of event dates.
-
#event_date_display_data ⇒ Array<CocinaDisplay::DisplayData>
DisplayData for all dates associated with events.
-
#event_dates ⇒ Array<CocinaDisplay::Dates::Date>
All dates associated with the object via an event.
-
#event_note_display_data ⇒ Array<CocinaDisplay::DisplayData>
DisplayData for all notes associated with events.
-
#events ⇒ Array<CocinaDisplay::Events::Event>
All root level events associated with the object.
-
#imprint_events ⇒ Array<CocinaDisplay::Imprint>
Array of CocinaDisplay::Imprint objects for all relevant Cocina events.
-
#imprint_str ⇒ String?
String for displaying the imprint statement(s).
-
#pub_date(ignore_qualified: false) ⇒ CocinaDisplay::Dates::Date?
The earliest preferred publication date as a CocinaDisplay::Dates::Date object.
-
#pub_date_edtf(ignore_qualified: false) ⇒ Date?
The earliest preferred publication date as a Date object.
-
#pub_year_int(ignore_qualified: false) ⇒ Integer?
The earliest preferred publication year as an integer.
-
#pub_year_ints(ignore_qualified: false) ⇒ Array<Integer>?
The range of preferred publication years as an array of integers.
-
#pub_year_str(ignore_qualified: false) ⇒ String?
String for displaying the earliest preferred publication year or range.
-
#publication_countries ⇒ Array<String>
List of countries of publication as strings.
-
#publication_events ⇒ Array<CocinaDisplay::Events::Event>
All events that could be used to select a publication date.
-
#publication_places ⇒ Array<String>
List of places of publication as strings.
Instance Method Details
#admin_creation_event ⇒ CocinaDisplay::Events::Event
The adminMetadata creation event (When was it was deposited?)
93 94 95 |
# File 'lib/cocina_display/concerns/events.rb', line 93 def admin_creation_event @admin_events ||= path("$.description.adminMetadata.event[?(@.type==\"creation\")]").map { |event| CocinaDisplay::Events::Event.new(event) }.first end |
#earliest_preferred_date(dates, ignore_qualified: false) ⇒ CocinaDisplay::Dates::Date?
Choose the earliest, best date from a provided list of event dates. Rules to consider:
-
Reject any dates that were not parsed.
-
If
ignore_qualifiedis true, reject any qualified dates. -
If there are any primary dates, prefer those dates.
-
If there are any encoded dates, prefer those dates.
-
From whatever is left, choose the earliest date.
165 166 167 168 169 170 171 172 173 174 |
# File 'lib/cocina_display/concerns/events.rb', line 165 def earliest_preferred_date(dates, ignore_qualified: false) return nil if dates.empty? dates.filter!(&:parsed_date?) dates.reject!(&:approximate?) if ignore_qualified dates = dates.filter(&:primary?).presence || dates dates = dates.filter(&:encoding?).presence || dates dates.min end |
#event_date_display_data ⇒ Array<CocinaDisplay::DisplayData>
DisplayData for all dates associated with events.
134 135 136 |
# File 'lib/cocina_display/concerns/events.rb', line 134 def event_date_display_data CocinaDisplay::DisplayData.from_objects(event_dates) end |
#event_dates ⇒ Array<CocinaDisplay::Dates::Date>
All dates associated with the object via an event.
122 123 124 |
# File 'lib/cocina_display/concerns/events.rb', line 122 def event_dates @event_dates ||= events.flat_map(&:dates) end |
#event_note_display_data ⇒ Array<CocinaDisplay::DisplayData>
DisplayData for all notes associated with events.
128 129 130 |
# File 'lib/cocina_display/concerns/events.rb', line 128 def event_note_display_data CocinaDisplay::DisplayData.from_objects(events.flat_map(&:notes)) end |
#events ⇒ Array<CocinaDisplay::Events::Event>
All root level events associated with the object.
87 88 89 |
# File 'lib/cocina_display/concerns/events.rb', line 87 def events @events ||= path("$.description.event.*").map { |event| CocinaDisplay::Events::Event.new(event) } end |
#imprint_events ⇒ Array<CocinaDisplay::Imprint>
Array of CocinaDisplay::Imprint objects for all relevant Cocina events. Considers publication, creation, capture, and copyright events. Considers event types as well as date types if the event is untyped. Prefers events where the date was not encoded, if any.
110 111 112 113 114 115 116 117 118 |
# File 'lib/cocina_display/concerns/events.rb', line 110 def imprint_events imprints = events.filter do |event| event.has_any_type?("publication", "creation", "capture", "copyright") end.map do |event| CocinaDisplay::Events::Imprint.new(event.cocina) end imprints.reject(&:date_encoding?).presence || imprints end |
#imprint_str ⇒ String?
String for displaying the imprint statement(s). “New York : Meridian Book, 1993, c1967”
67 68 69 |
# File 'lib/cocina_display/concerns/events.rb', line 67 def imprint_str imprint_events.map(&:to_s).compact_blank.join("; ") end |
#pub_date(ignore_qualified: false) ⇒ CocinaDisplay::Dates::Date?
The earliest preferred publication date as a CocinaDisplay::Dates::Date object. Considers publication, creation, and capture dates in that order. Prefers dates marked as primary and those with a declared encoding.
144 145 146 147 148 149 150 151 152 |
# File 'lib/cocina_display/concerns/events.rb', line 144 def pub_date(ignore_qualified: false) pub_event_dates = event_dates.filter { |date| date.type == "publication" } creation_event_dates = event_dates.filter { |date| date.type == "creation" } capture_event_dates = event_dates.filter { |date| date.type == "capture" } [pub_event_dates, creation_event_dates, capture_event_dates].flat_map do |dates| earliest_preferred_date(dates, ignore_qualified: ignore_qualified) end.compact.first end |
#pub_date_edtf(ignore_qualified: false) ⇒ Date?
The earliest preferred publication date as a Date object. If the date was a range or interval, uses the start (or end if no start). Considers publication, creation, and capture dates in that order. Prefers dates marked as primary and those with a declared encoding.
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/cocina_display/concerns/events.rb', line 11 def pub_date_edtf(ignore_qualified: false) return unless (date = pub_date(ignore_qualified: ignore_qualified)) if date.is_a? CocinaDisplay::Dates::DateRange date = date.start&.known? ? date.start : date.stop end return unless date&.known? return date.date.from if date.date.is_a?(EDTF::Interval) date.date end |
#pub_year_int(ignore_qualified: false) ⇒ Integer?
6 BCE will return -5; 4 CE will return 4.
The earliest preferred publication year as an integer. If the date was a range or interval, uses the start (or end if no start). Considers publication, creation, and capture dates in that order. Prefers dates marked as primary and those with a declared encoding.
31 32 33 |
# File 'lib/cocina_display/concerns/events.rb', line 31 def pub_year_int(ignore_qualified: false) pub_date_edtf(ignore_qualified: ignore_qualified)&.year end |
#pub_year_ints(ignore_qualified: false) ⇒ Array<Integer>?
6 BCE will appear as -5; 4 CE will appear as 4.
The range of preferred publication years as an array of integers. Considers publication, creation, and capture dates in that order. Prefers dates marked as primary and those with a declared encoding.
41 42 43 44 45 46 |
# File 'lib/cocina_display/concerns/events.rb', line 41 def pub_year_ints(ignore_qualified: false) date = pub_date(ignore_qualified: ignore_qualified) return unless date date.to_a.map(&:year).compact.uniq.sort end |
#pub_year_str(ignore_qualified: false) ⇒ String?
String for displaying the earliest preferred publication year or range. Considers publication, creation, and capture dates in that order. Prefers dates marked as primary and those with a declared encoding.
55 56 57 58 59 60 |
# File 'lib/cocina_display/concerns/events.rb', line 55 def pub_year_str(ignore_qualified: false) date = pub_date(ignore_qualified: ignore_qualified) return unless date date.decoded_value(allowed_precisions: [:year, :decade, :century]) end |
#publication_countries ⇒ Array<String>
List of countries of publication as strings. Considers locations for all publication, creation, and capture events.
81 82 83 |
# File 'lib/cocina_display/concerns/events.rb', line 81 def publication_countries publication_events.flat_map { |event| event.locations.map(&:country_name) }.compact_blank.uniq end |
#publication_events ⇒ Array<CocinaDisplay::Events::Event>
All events that could be used to select a publication date. Includes publication, creation, and capture events. Considers event types as well as date types if the event is untyped.
101 102 103 |
# File 'lib/cocina_display/concerns/events.rb', line 101 def publication_events events.filter { |event| event.has_any_type?("publication", "creation", "capture") } end |
#publication_places ⇒ Array<String>
List of places of publication as strings. Considers locations for all publication, creation, and capture events.
74 75 76 |
# File 'lib/cocina_display/concerns/events.rb', line 74 def publication_places publication_events.flat_map { |event| event.locations.map(&:to_s) }.compact_blank.uniq end |