Class: PennMARC::Genre
Overview
Genre field values come from the 655, but for some contexts we are only interested in a subset of the declared terms in a record.
Constant Summary
Constants included from Util
Util::TRAILING_PUNCTUATIONS_PATTERNS
Class Method Summary collapse
-
.facet(record) ⇒ Array<String>
Genre values for faceting.
-
.search(record) ⇒ Array<String>
Genre values for searching.
-
.show(record) ⇒ Array<String>
Genre values for display.
Methods included from Util
#append_relator, #append_trailing, #datafield_and_linked_alternate, #field_defined?, #field_or_its_linked_alternate?, #join_and_squish, #join_subfields, #linked_alternate, #linked_alternate_not_6_or_8, #no_subfield_value_matches?, #prefixed_subject_and_alternate, #relator, #relator_join_separator, #relator_term_subfield, #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_punctuation, #trim_trailing, #trim_trailing!, #valid_subject_genre_source_code?
Class Method Details
.facet(record) ⇒ Array<String>
the Genre facet in Franklin is pretty ugly. It could be cleaned up by limiting the subfields included here and cleaning up punctuation.
Genre values for faceting. We only set Genre facet values for movies (videos) and manuscripts(?)
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pennmarc/helpers/genre.rb', line 51 def facet(record) format_code = record.leader[6] || ' ' manuscript = Format.include_manuscripts?(format_code) video = record.fields('007').any? { |field| field.value.starts_with? 'v' } return [] unless manuscript || video record.fields('655').filter_map { |field| join_subfields field, &subfield_not_in?(%w[0 2 5 c]) }.uniq end |
.search(record) ⇒ Array<String>
Genre values for searching. We’re less picky about what is included here to enable discovery via any included 655 data.
13 14 15 16 17 |
# File 'lib/pennmarc/helpers/genre.rb', line 13 def search(record) record.fields('655').map { |field| join_subfields(field, &subfield_not_in?(%w[0 2 5 c])) }.uniq end |
.show(record) ⇒ Array<String>
subfields e and w do not appear in the documentation for 655, but we give them special consideration here, what gives?
legacy method returns a link object
Genre values for display. We display Genre/Term values if they fulfill the following criteria:
- The field is in {https://www.oclc.org/bibformats/en/6xx/655.html MARC 655}. Or the field is in MARC 880 with
subfield 6 including '655'.
AND
- Above fields have an indicator 2 value of: 0 (LSCH) or 4 (No source specified).
OR
- Above fields have a subfield 2 (ontology code) in the list of allowed values.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/pennmarc/helpers/genre.rb', line 31 def show(record) record.fields(%w[655 880]).filter_map { |field| next unless allowed_genre_field?(field) next if field.tag == '880' && no_subfield_value_matches?(field, '6', /^655/) subfields = %w[a b] sub_with_hyphens = field.find_all(&subfield_not_in?(%w[0 2 5 6 8 c e w])).map { |sf| sep = subfields.exclude?(sf.code) ? ' -- ' : ' ' sep + sf.value }.join.lstrip "#{sub_with_hyphens} #{field.find_all(&subfield_in?(%w[e w])).join(' -- ')}".strip }.uniq end |