Class: PennMARC::Language

Inherits:
Helper
  • Object
show all
Defined in:
lib/pennmarc/helpers/language.rb

Overview

TODO:

should we consider values in the 041 field?

Logic for extracting and translating Language values for a record. Penn practice is to verify the value present in the 008 control field as a three letter code. This code is then mapped to a display-friendly value using the a provided mapping hash.

Constant Summary collapse

UNDETERMINED_CODE =

Used when no value is present in the control field - still mapped

:und

Class Method Summary collapse

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

.search(record, language_map: Mappers.language) ⇒ String

Get language values for searching and faceting of a record. The value is extracted from a defined position in the 008 control field. Language facet and search values will typically be the same.



30
31
32
33
34
# File 'lib/pennmarc/helpers/language.rb', line 30

def search(record, language_map: Mappers.language)
  control_field = record['008']&.value
  language_code = control_field[35..37]
  language_map[language_code.to_sym || UNDETERMINED_CODE]
end

.show(record) ⇒ Array<String>

Get language values for display from the 546 field and related 880.



17
18
19
20
21
22
# File 'lib/pennmarc/helpers/language.rb', line 17

def show(record)
  values = record.fields('546').map do |field|
    join_subfields field, &subfield_not_in?(%w[6 8])
  end
  values + linked_alternate(record, '546', &subfield_not_in?(%w[6 8]))
end