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_int_range(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_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?)
87 88 89 |
# File 'lib/cocina_display/concerns/events.rb', line 87 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_qualified` is 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.
159 160 161 162 163 164 165 166 167 168 |
# File 'lib/cocina_display/concerns/events.rb', line 159 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.
128 129 130 |
# File 'lib/cocina_display/concerns/events.rb', line 128 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.
116 117 118 |
# File 'lib/cocina_display/concerns/events.rb', line 116 def event_dates @event_dates ||= events.flat_map(&:dates) end |
#event_note_display_data ⇒ Array<CocinaDisplay::DisplayData>
DisplayData for all notes associated with events.
122 123 124 |
# File 'lib/cocina_display/concerns/events.rb', line 122 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.
81 82 83 |
# File 'lib/cocina_display/concerns/events.rb', line 81 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.
104 105 106 107 108 109 110 111 112 |
# File 'lib/cocina_display/concerns/events.rb', line 104 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).
68 69 70 |
# File 'lib/cocina_display/concerns/events.rb', line 68 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.
138 139 140 141 142 143 144 145 146 |
# File 'lib/cocina_display/concerns/events.rb', line 138 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_int_range(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 47 |
# File 'lib/cocina_display/concerns/events.rb', line 41 def pub_year_int_range(ignore_qualified: false) date = pub_date(ignore_qualified: ignore_qualified) return unless date date = date.as_interval if date.is_a? CocinaDisplay::Dates::DateRange 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.
56 57 58 59 60 61 |
# File 'lib/cocina_display/concerns/events.rb', line 56 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_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.
95 96 97 |
# File 'lib/cocina_display/concerns/events.rb', line 95 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.
75 76 77 |
# File 'lib/cocina_display/concerns/events.rb', line 75 def publication_places publication_events.flat_map { |event| event.locations.map(&:to_s) } end |