Class: PennMARC::Date
Overview
Parser methods for extracting date info as DateTime objects
Class Method Summary collapse
-
.added(record) ⇒ DateTime?
Retrieve date added (subfield ‘q’) from enriched marc ‘itm’ field.
-
.last_updated(record) ⇒ DateTime?
Retrieve date last updated from 005 field.
-
.publication(record) ⇒ DateTime?
Retrieve publication date (Date 1) from 008 field.
Methods included from Util
#datafield_and_linked_alternate, #join_and_squish, #join_subfields, #linked_alternate, #linked_alternate_not_6_or_8, #prefixed_subject_and_alternate, #remove_paren_value_from_subfield_i, #subfield_defined?, #subfield_in?, #subfield_not_in?, #subfield_undefined?, #subfield_value?, #subfield_value_in?, #subfield_value_not_in?, #subfield_values, #subfield_values_for, #substring_after, #substring_before, #translate_relator, #trim_trailing, #valid_subject_genre_source_code?
Class Method Details
.added(record) ⇒ DateTime?
Retrieve date added (subfield ‘q’) from enriched marc ‘itm’ field. EnrichedMarc maps enriched marc fields and subfields created during Alma publishing.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/pennmarc/helpers/date.rb', line 26 def added(record) record.fields(EnrichedMarc::TAG_ITEM).flat_map { |field| field.filter_map do |subfield| # skip unless field has date created subfield next unless subfield_defined?(field, EnrichedMarc::SUB_ITEM_DATE_CREATED) # On 2022-05-02, this field value (as exported in enriched publishing # job from Alma) began truncating time to day-level granularity. We have # no guarantee that this won't switch back in the future, so for the # foreseeable future we should support both formats. format = subfield.value.size == 10 ? '%Y-%m-%d' : '%Y-%m-%d %H:%M:%S' DateTime.strptime(subfield.value, format) rescue StandardError => e puts "Error parsing date in date added subfield: #{subfield.value} - #{e}" nil end }.max end |
.last_updated(record) ⇒ DateTime?
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/pennmarc/helpers/date.rb', line 53 def last_updated(record) record.fields('005').filter_map { |field| begin date_time_string = field.value next if date_time_string.blank? next if date_time_string.start_with?('0000') DateTime.iso8601(date_time_string).to_datetime rescue ArgumentError => e puts "Error parsing last updated date: #{date_time_string} - #{e}" nil end }.first end |
.publication(record) ⇒ DateTime?
Retrieve publication date (Date 1) from 008 field. Publication date is a four-digit year found in position 7-10 and may contain ‘u’ characters to represent partially known dates. We replace any occurrences of ‘u’ with ‘0’ before converting to DateTime object.
12 13 14 15 16 17 18 19 20 |
# File 'lib/pennmarc/helpers/date.rb', line 12 def publication(record) record.fields('008').filter_map { |field| four_digit_year = sanitize_partially_known_date(field.value[7, 4], '0') next if four_digit_year.blank? DateTime.new(four_digit_year.to_i) }.first end |