lib/alma/availability_response.rb in alma-0.3.1 vs lib/alma/availability_response.rb in alma-0.3.2

- old
+ new

@@ -1,91 +1,88 @@ -require 'xmlsimple' +# frozen_string_literal: true +require "xmlsimple" + module Alma class AvailabilityResponse - - attr_accessor :availability def initialize(response) @availability = parse_bibs_data(response.each) end - # Data structure for holdings information of bib records. + # Data structure for holdings information of bib records. # A hash with mms ids as keys, with values of an array of # one or more hashes of holdings info def parse_bibs_data(bibs) bibs.reduce(Hash.new) { |acc, bib| - acc.merge({"#{bib.id}" => {holdings: build_holdings_for(bib)}}) + acc.merge({ "#{bib.id}" => { holdings: build_holdings_for(bib) } }) } end def build_holdings_for(bib) get_inventory_fields_for(bib).map do |inventory_field| # Use the mapping for this inventory type - subfield_codes = Alma::INVENTORY_SUBFIELD_MAPPING[inventory_field['tag']] - + subfield_codes = Alma::INVENTORY_SUBFIELD_MAPPING[inventory_field["tag"]] + inventory_field. # Get all the subfields for this inventory field - fetch('subfield', []). + fetch("subfield", []). # Limit to only subfields codes for which we have a mapping - select {|sf| subfield_codes.key? sf['code'] }. - # Transform the array of subfields into a hash with mapped code as key - reduce(Hash.new) { |acc, subfield| - acc.merge({"#{subfield_codes[subfield['code']]}" => subfield['content']}) + select { |sf| subfield_codes.key? sf["code"] }. + # Transform the array of subfields into a hash with mapped code as key + reduce(Hash.new) { |acc, subfield| + acc.merge({ "#{subfield_codes[subfield['code']]}" => subfield["content"] }) }. # Include the inventory type - merge({'inventory_type' => subfield_codes['INVENTORY_TYPE']}) + merge({ "inventory_type" => subfield_codes["INVENTORY_TYPE"] }) end end def get_inventory_fields_for(bib) - # Return only the datafields with tags AVA, AVD, or AVE + # Return only the datafields with tags AVA, AVD, or AVE bib.record - .fetch('datafield', []) - .select { |df| Alma::INVENTORY_SUBFIELD_MAPPING.key?(df['tag']) } + .fetch("datafield", []) + .select { |df| Alma::INVENTORY_SUBFIELD_MAPPING.key?(df["tag"]) } end end INVENTORY_SUBFIELD_MAPPING = { - 'AVA' => { - 'INVENTORY_TYPE' => 'physical', - 'a' => 'institution', - 'b' => 'library_code', - 'c' => 'location', - 'd' => 'call_number', - 'e' => 'availability', - 'f' => 'total_items', - 'g' => 'non_available_items', - 'j' => 'location_code', - 'k' => 'call_number_type', - 'p' => 'priority', - 'q' => 'library', - 't' => 'holding_info', - '8' => 'holding_id', + "AVA" => { + "INVENTORY_TYPE" => "physical", + "a" => "institution", + "b" => "library_code", + "c" => "location", + "d" => "call_number", + "e" => "availability", + "f" => "total_items", + "g" => "non_available_items", + "j" => "location_code", + "k" => "call_number_type", + "p" => "priority", + "q" => "library", + "t" => "holding_info", + "8" => "holding_id", }, - 'AVD' => { - 'INVENTORY_TYPE' => 'digital', - 'a' => 'institution', - 'b' => 'representations_id', - 'c' => 'representation', - 'd' => 'repository_name', - 'e' => 'label', + "AVD" => { + "INVENTORY_TYPE" => "digital", + "a" => "institution", + "b" => "representations_id", + "c" => "representation", + "d" => "repository_name", + "e" => "label", }, - 'AVE' => { - 'INVENTORY_TYPE' => 'electronic', - 'c' => 'collection_id', - 'e' => 'activation_status', - 'l' => 'library_code', - 'm' => 'collection', - 'n' => 'public_note', - 's' => 'coverage_statement', - 't' => 'interface_name', - 'u' => 'link_to_service_page', - '8' => 'portfolio_pid', + "AVE" => { + "INVENTORY_TYPE" => "electronic", + "c" => "collection_id", + "e" => "activation_status", + "l" => "library_code", + "m" => "collection", + "n" => "public_note", + "s" => "coverage_statement", + "t" => "interface_name", + "u" => "link_to_service_page", + "8" => "portfolio_pid", } } - - - end