Class: PennMARC::Location

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

Overview

Methods that return Library and Location values from Alma enhanced MARC fields

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

.library(record, location_map: Mappers.location) ⇒ Array<String>

Retrieves library location from enriched marc ‘itm’ or ‘hld’ fields, giving priority to the item location over the holdings location. Returns item’s location if available. Otherwise, returns holding’s location. EnrichedMarc maps enriched marc fields and subfields created during Alma publishing.

Parameters:

  • record (MARC::Record)
  • location_map (Hash) (defaults to: Mappers.location)

    hash with location_code as key and location hash as value

Returns:

  • (Array<String>)

    Array of library locations retrieved from location_map

See Also:



15
16
17
# File 'lib/pennmarc/helpers/location.rb', line 15

def library(record, location_map: Mappers.location)
  location(record: record, location_map: location_map, display_value: 'library')
end

.location(record:, display_value:, location_map:) ⇒ Array<String>

Base method to retrieve location data from enriched marc ‘itm’ or ‘hld’ fields, giving priority to the item location over the holdings location. Returns item location if available. Otherwise, returns holdings location. EnrichedMarc maps enriched marc fields and subfields created during Alma publishing.

Parameters:

  • record (MARC::Record)
  • display_value (Symbol | String)

    field in location hash to retrieve

  • location_map (Hash)

    hash with location_code as key and location hash as value

Returns:

  • (Array<String>)

See Also:



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/pennmarc/helpers/location.rb', line 41

def location(record:, display_value:, location_map:)
  # get enriched marc location tag and subfield code
  location_tag_and_subfield_code(record) => {tag:, subfield_code:}

  locations = record.fields(tag).flat_map { |field|
    field.filter_map { |subfield|
      # skip unless subfield code does not match enriched marc tag subfield code
      next unless subfield.code == subfield_code

      # skip if subfield value is 'web'
      # we don't facet for 'web' which is the 'Penn Library Web' location used in Voyager.
      # this location should eventually go away completely with data cleanup in Alma.
      next if subfield.value == 'web'

      # skip unless subfield value is a key in location_map
      # sometimes "happening locations" are mistakenly used in holdings records.
      # that's a data problem that should be fixed.
      # here, if we encounter a code we can't map, we ignore it, for faceting purposes
      next unless location_map.key?(subfield.value.to_sym)

      location_map[subfield.value.to_sym][display_value.to_sym]
    }.flatten.compact_blank
  }.uniq
  locations << 'Online library' if record.fields(PennMARC::EnrichedMarc::TAG_ELECTRONIC_INVENTORY).any?
  locations
end

.specific_location(record, location_map: Mappers.location) ⇒ Array<String>

Retrieves the specific location from enriched marc ‘itm’ or ‘hld’ fields, giving priority to the item location over the holdings location. Returns item library location if available. Otherwise, returns holdings library location. EnrichedMarc maps enriched marc fields and subfields created during Alma publishing.

Parameters:

  • record (MARC::Record)
  • location_map (Hash) (defaults to: Mappers.location)

    hash with location_code as key and location hash as value

Returns:

  • (Array<String>)

    Array of specific locations retrieved from location_map

See Also:



28
29
30
# File 'lib/pennmarc/helpers/location.rb', line 28

def specific_location(record, location_map: Mappers.location)
  location(record: record, location_map: location_map, display_value: 'specific_location')
end