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