Sha256: 38aff61a4581476c8e2d95475248ff52ae1e586f4c7cd13bdac18ba6b8736ce3

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

module Alma
  class AvailabilityResponse


    attr_accessor :availability

    def initialize(response)
      @availability = parse_bibs_data(response.list)

    end

    def parse_bibs_data(bibs)

      bibs.map do |bib|
        record = Hash.new

        record['mms_id'] = bib.id
        record['holdings'] = build_holdings_for(bib)

        record
      end.reduce(Hash.new) do |acc, avail|
        acc[avail['mms_id']] = avail.select { |k, v| k != 'mms_id' }
        acc
      end
    end


    def build_holdings_for(bib)

      get_inventory_fields_for(bib).map do |inventory_field|
        subfield_codes_to_fieldnames = Alma::INVENTORY_TO_SUBFIELD_TO_FIELDNAME[inventory_field['tag']]

        # make sure subfields is always an Array (which isn't the case if there's only one subfield element)
        subfields = [inventory_field.fetch('subfield', [])].flatten(1)

        holding = subfields.reduce(Hash.new) do |acc, subfield|
          fieldname = subfield_codes_to_fieldnames[subfield['code']]
          acc[fieldname] = subfield['__content__']
          acc
        end
        holding['inventory_type'] = subfield_codes_to_fieldnames['INVENTORY_TYPE']
        holding
      end
    end

    def get_inventory_fields_for(bib)
      bib.record.fetch('datafield', []).select { |df| Alma::INVENTORY_TO_SUBFIELD_TO_FIELDNAME.key?(df['tag']) } || []
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alma-0.2.4 lib/alma/availability_response.rb
alma-0.2.3 lib/alma/availability_response.rb