berkeley_library-alma 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16a46868b570b1ebae5581407ffa071c63ea95a2d1c31d0a422fa89f2dd359df
4
- data.tar.gz: 5e1106e53a671ffa3ae695cdb8ebff1b61c5f965642fbc66d8e95fd0affaabd3
3
+ metadata.gz: '0805d8fb305dd644ede89efb0c71845c479df3cc8b69334bbfc4e747312c229d'
4
+ data.tar.gz: 80b1576c6dc7d5bbfd5bd5a0a53985167c4c3929668d505dae92ffcac196988e
5
5
  SHA512:
6
- metadata.gz: 801e395bcffaa40afa629c8449b0d9e2c3d2ee31751b6f09698e3531eb96db9b5c45cdb5794ea74aee1665e67c6713190161b0a6f064f20eceec5c0275ab1756
7
- data.tar.gz: 1636e32d6c5cff6ecf7c5d4ac923463905190fb2a221a7c37b8a05da9c294d31a0790ee0d955e0b956f32ff37ba1594bf80a5f172db80d62a76baadc8d24f474
6
+ metadata.gz: 879cb4ef386caa8543bf883ac3b62888c4ca810ef431562618ad456c9d560ee81f6dada5b9ae850ca15523cd6f58d5487919c3e782c817313deaff346912c257
7
+ data.tar.gz: b10240d0571733f28f90ab099da879647cdd670da05c5af5aa396f0fcd8c9ae026d2ec9b4c1246764a6b919bc594c665ff0096140b400cb2626af893bdcd3b21
data/.idea/alma.iml CHANGED
@@ -12,9 +12,9 @@
12
12
  </content>
13
13
  <orderEntry type="jdk" jdkName="RVM: ruby-2.7.5" jdkType="RUBY_SDK" />
14
14
  <orderEntry type="sourceFolder" forTests="false" />
15
- <orderEntry type="library" scope="PROVIDED" name="actionpack (v6.1.4.4, RVM: ruby-2.7.5) [gem]" level="application" />
16
- <orderEntry type="library" scope="PROVIDED" name="actionview (v6.1.4.4, RVM: ruby-2.7.5) [gem]" level="application" />
17
- <orderEntry type="library" scope="PROVIDED" name="activesupport (v6.1.4.4, RVM: ruby-2.7.5) [gem]" level="application" />
15
+ <orderEntry type="library" scope="PROVIDED" name="actionpack (v6.1.4.6, RVM: ruby-2.7.5) [gem]" level="application" />
16
+ <orderEntry type="library" scope="PROVIDED" name="actionview (v6.1.4.6, RVM: ruby-2.7.5) [gem]" level="application" />
17
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v6.1.4.6, RVM: ruby-2.7.5) [gem]" level="application" />
18
18
  <orderEntry type="library" scope="PROVIDED" name="addressable (v2.8.0, RVM: ruby-2.7.5) [gem]" level="application" />
19
19
  <orderEntry type="library" scope="PROVIDED" name="amazing_print (v1.4.0, RVM: ruby-2.7.5) [gem]" level="application" />
20
20
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, RVM: ruby-2.7.5) [gem]" level="application" />
@@ -38,13 +38,14 @@
38
38
  <orderEntry type="library" scope="PROVIDED" name="hashdiff (v1.0.1, RVM: ruby-2.7.5) [gem]" level="application" />
39
39
  <orderEntry type="library" scope="PROVIDED" name="http-accept (v1.7.0, RVM: ruby-2.7.5) [gem]" level="application" />
40
40
  <orderEntry type="library" scope="PROVIDED" name="http-cookie (v1.0.4, RVM: ruby-2.7.5) [gem]" level="application" />
41
- <orderEntry type="library" scope="PROVIDED" name="i18n (v1.9.1, RVM: ruby-2.7.5) [gem]" level="application" />
41
+ <orderEntry type="library" scope="PROVIDED" name="i18n (v1.10.0, RVM: ruby-2.7.5) [gem]" level="application" />
42
42
  <orderEntry type="library" scope="PROVIDED" name="lograge (v0.11.2, RVM: ruby-2.7.5) [gem]" level="application" />
43
- <orderEntry type="library" scope="PROVIDED" name="loofah (v2.13.0, RVM: ruby-2.7.5) [gem]" level="application" />
43
+ <orderEntry type="library" scope="PROVIDED" name="loofah (v2.14.0, RVM: ruby-2.7.5) [gem]" level="application" />
44
44
  <orderEntry type="library" scope="PROVIDED" name="marc (v1.1.1, RVM: ruby-2.7.5) [gem]" level="application" />
45
45
  <orderEntry type="library" scope="PROVIDED" name="method_source (v1.0.0, RVM: ruby-2.7.5) [gem]" level="application" />
46
46
  <orderEntry type="library" scope="PROVIDED" name="mime-types (v3.4.1, RVM: ruby-2.7.5) [gem]" level="application" />
47
47
  <orderEntry type="library" scope="PROVIDED" name="mime-types-data (v3.2022.0105, RVM: ruby-2.7.5) [gem]" level="application" />
48
+ <orderEntry type="library" scope="PROVIDED" name="mini_portile2 (v2.7.1, RVM: ruby-2.7.5) [gem]" level="application" />
48
49
  <orderEntry type="library" scope="PROVIDED" name="minitest (v5.15.0, RVM: ruby-2.7.5) [gem]" level="application" />
49
50
  <orderEntry type="library" scope="PROVIDED" name="netrc (v0.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
50
51
  <orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.13.1, RVM: ruby-2.7.5) [gem]" level="application" />
@@ -59,7 +60,7 @@
59
60
  <orderEntry type="library" scope="PROVIDED" name="rack-test (v1.1.0, RVM: ruby-2.7.5) [gem]" level="application" />
60
61
  <orderEntry type="library" scope="PROVIDED" name="rails-dom-testing (v2.0.3, RVM: ruby-2.7.5) [gem]" level="application" />
61
62
  <orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.4.2, RVM: ruby-2.7.5) [gem]" level="application" />
62
- <orderEntry type="library" scope="PROVIDED" name="railties (v6.1.4.4, RVM: ruby-2.7.5) [gem]" level="application" />
63
+ <orderEntry type="library" scope="PROVIDED" name="railties (v6.1.4.6, RVM: ruby-2.7.5) [gem]" level="application" />
63
64
  <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, RVM: ruby-2.7.5) [gem]" level="application" />
64
65
  <orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, RVM: ruby-2.7.5) [gem]" level="application" />
65
66
  <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.2.0, RVM: ruby-2.7.5) [gem]" level="application" />
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.0.5 (4 May 2022)
2
+
3
+ - extracts `SRU` module for performing SRU queries.
4
+ - MARCXML parsing now uses `MARC::NokogiriReader` rather than the `REXML` default.
5
+
1
6
  # 0.0.4 (15 February 2022)
2
7
 
3
8
  - adds `BarCode` subclass of `RecordId`, to look up bibliographic records by
data/README.md CHANGED
@@ -41,10 +41,34 @@ options to either:
41
41
 
42
42
  ## Retrieving Alma records
43
43
 
44
- The [`RecordId`](lib/berkeley_library/alma/record_id.rb) class encapsulates
45
- an ID that can be used to look up records in Alma via
46
- [SRU](https://developers.exlibrisgroup.com/alma/integrations/sru/).
47
- This can be either an Alma MMS ID:
44
+ ### Via `SRU`
45
+
46
+ The [`SRU`](lib/berkeley_library/alma/sru.rb) module encapsulates Alma
47
+ [SRU](https://developers.exlibrisgroup.com/alma/integrations/sru/) queries.
48
+
49
+ Retrieving MARC records:
50
+
51
+ ```ruby
52
+ reader = BerkeleyLibrary::Alma::SRU.get_marc_records('991005668209706532', '991005668359706532')
53
+ # => #<MARC::XMLReader:0x0000000135b940e8 @freeze=false, @handle=#<StringIO:0x0000000135b94160>...
54
+ ```
55
+
56
+ Making arbitrary SRU queries:
57
+
58
+ ```ruby
59
+ BerkeleyLibrary::Alma::SRU.make_sru_query('alma.other_system_number=UCB-b123230470-01ucs_ber')
60
+ # => "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><searchRetrieveResponse xmlns=...
61
+ ```
62
+
63
+ ### Via `RecordId`
64
+
65
+ In addition, individual records can be retrieved from an instance of the
66
+ [`RecordId`](lib/berkeley_library/alma/record_id.rb) class, which encapsulates
67
+ an Alma MMS ID, Millennium bib number, or item barcode.
68
+
69
+ #### Initializing `RecordID` objects
70
+
71
+ Alma MMS ID:
48
72
 
49
73
  ```ruby
50
74
  mms_id_str = '991054360089706532'
@@ -52,7 +76,7 @@ record_id = BerkeleyLibrary::Alma::RecordId.parse(mms_id_str)
52
76
  # => #<BerkeleyLibrary::Alma::MMSID:0x0000000138949830 @institution="6532", @mms_id="991054360089706532", @type_prefix="99", @unique_part="105436008970">
53
77
  ```
54
78
 
55
- Or a Millennium bib number:
79
+ Millennium bib number:
56
80
 
57
81
  ```ruby
58
82
  bib_number_str = 'b11082434'
@@ -60,6 +84,20 @@ record_id = BerkeleyLibrary::Alma::RecordId.parse(bib_number_str)
60
84
  # => #<BerkeleyLibrary::Alma::BibNumber:0x0000000118815038 @check_str="9", @digit_str="11082434">
61
85
  ```
62
86
 
87
+ Item barcode:
88
+
89
+ ```ruby
90
+ barcode_str = 'C084093187'
91
+ barcode = BerkeleyLibrary::Alma::BarCode.new(barcode_str)
92
+ # => #<BerkeleyLibrary::Alma::BarCode:0x000000013fac4c08 @barcode="C084093187">
93
+ ```
94
+
95
+ ⚠️ Note that because of the free-form nature of barcodes, they cannot be auto-detected,
96
+ and hence are **not** supported by the `RecordId#parse` method; they must be instantiated
97
+ directly.
98
+
99
+ #### Using `RecordId` objects to make SRU queries
100
+
63
101
  Given a `RecordId` object, you can get the SRU query URI for the corresponding MARC record:
64
102
 
65
103
  ```ruby
@@ -7,7 +7,7 @@ module BerkeleyLibrary
7
7
  SUMMARY = 'Alma/Primo utilities for the UC Berkeley Library'.freeze
8
8
  DESCRIPTION = 'A gem providing Alma/Primo-related utility code for the UC Berkeley Library'.freeze
9
9
  LICENSE = 'MIT'.freeze
10
- VERSION = '0.0.4'.freeze
10
+ VERSION = '0.0.5'.freeze
11
11
  HOMEPAGE = 'https://github.com/BerkeleyLibrary/alma'.freeze
12
12
  end
13
13
  end
@@ -2,6 +2,7 @@ require 'berkeley_library/logging'
2
2
  require 'berkeley_library/marc'
3
3
  require 'berkeley_library/util/uris'
4
4
  require 'berkeley_library/alma/constants'
5
+ require 'berkeley_library/alma/sru'
5
6
 
6
7
  module BerkeleyLibrary
7
8
  module Alma
@@ -47,13 +48,7 @@ module BerkeleyLibrary
47
48
  #
48
49
  # @return [URI] the MARC URI
49
50
  def marc_uri
50
- query_string = URI.encode_www_form(
51
- 'version' => '1.2',
52
- 'operation' => 'searchRetrieve',
53
- 'query' => sru_query_value
54
- )
55
-
56
- URIs.append(Config.alma_sru_base_uri, '?', query_string)
51
+ SRU.sru_query_uri(sru_query_value)
57
52
  end
58
53
 
59
54
  # Makes an SRU query for this record and returns a MARC record, or nil if the
@@ -65,8 +60,12 @@ module BerkeleyLibrary
65
60
  # @return [MARC::Record, nil] the MARC record
66
61
  # rubocop:disable Naming/AccessorMethodName
67
62
  def get_marc_record
68
- marc_xml = get_marc_xml
69
- logger.warn("GET #{marc_uri} did not return a MARC record") unless (marc_record = parse_marc_xml(marc_xml))
63
+ unless (marc_reader = SRU.marc_records_for(sru_query_value))
64
+ logger.warn("GET #{marc_uri} did not return a MARC record")
65
+ return nil
66
+ end
67
+
68
+ logger.warn("GET #{marc_uri} did not return a MARC record") unless (marc_record = marc_reader.first)
70
69
  marc_record
71
70
  end
72
71
  # rubocop:enable Naming/AccessorMethodName
@@ -77,10 +76,7 @@ module BerkeleyLibrary
77
76
  # @return [String, nil] the SRU query response body, or nil in the event of an error.
78
77
  # rubocop:disable Naming/AccessorMethodName
79
78
  def get_marc_xml
80
- URIs.get(marc_uri, headers: { user_agent: DEFAULT_USER_AGENT })
81
- rescue RestClient::Exception => e
82
- logger.warn("GET #{marc_uri} failed", e)
83
- nil
79
+ SRU.make_sru_query(sru_query_value)
84
80
  end
85
81
  # rubocop:enable Naming/AccessorMethodName
86
82
 
@@ -98,19 +94,6 @@ module BerkeleyLibrary
98
94
 
99
95
  to_s <=> other.to_s
100
96
  end
101
-
102
- # ------------------------------------------------------------
103
- # Private methods
104
-
105
- private
106
-
107
- def parse_marc_xml(xml)
108
- return unless xml
109
-
110
- input = StringIO.new(xml.scrub)
111
- reader = MARC::XMLReader.new(input)
112
- reader.first
113
- end
114
97
  end
115
98
  end
116
99
  end
@@ -0,0 +1,79 @@
1
+ require 'uri'
2
+ require 'berkeley_library/alma/config'
3
+ require 'berkeley_library/alma/constants'
4
+ require 'berkeley_library/alma/record_id'
5
+ require 'berkeley_library/util/uris'
6
+
7
+ module BerkeleyLibrary
8
+ module Alma
9
+ module SRU
10
+ include BerkeleyLibrary::Logging
11
+ include Constants
12
+
13
+ class << self
14
+ include SRU
15
+ end
16
+
17
+ # Given a list of record IDs, returns the MARC records for each ID (if found).
18
+ #
19
+ # @param record_ids [Array<String, RecordId>] the record IDs to look up
20
+ # @return [MARC::XMLReader, nil] a reader for the MARC records, or nil if
21
+ # the records could not be read
22
+ def get_marc_records(*record_ids)
23
+ # noinspection RubyMismatchedReturnType
24
+ parsed_ids = record_ids.filter_map { |id| RecordId.parse(id) }
25
+ raise ArgumentError, "Argument #{record_ids.inspect} contain no valid record IDs" if parsed_ids.empty?
26
+
27
+ sru_query_value = parsed_ids.map(&:sru_query_value).join(' or ')
28
+ SRU.marc_records_for(sru_query_value)
29
+ end
30
+
31
+ # Returns a URI for retrieving records for the specified query
32
+ # via SRU. Requires {Config#alma_sru_base_uri} to be set.
33
+ #
34
+ # @return [URI] the MARC URI
35
+ def sru_query_uri(sru_query_value)
36
+ query_string = URI.encode_www_form(
37
+ 'version' => '1.2',
38
+ 'operation' => 'searchRetrieve',
39
+ 'query' => sru_query_value
40
+ )
41
+
42
+ Util::URIs.append(Config.alma_sru_base_uri, '?', query_string)
43
+ end
44
+
45
+ # Makes an SRU query for the specified query value and returns the query response
46
+ # as a string.
47
+ #
48
+ # @param query_value [String] the value of the SRU query parameter
49
+ # @return [String, nil] the SRU query response body, or nil in the event of an error.
50
+ def make_sru_query(query_value)
51
+ uri = sru_query_uri(query_value)
52
+ do_get(uri)
53
+ end
54
+
55
+ # Makes an SRU query for the specified query value and returns the query response
56
+ # as MARC records.
57
+ #
58
+ # @param query_value [String] the value of the SRU query parameter
59
+ # @return [MARC::XMLReader, nil] a reader for the MARC records, or nil if
60
+ # the records could not be read
61
+ def marc_records_for(query_value)
62
+ return unless (xml = make_sru_query(query_value))
63
+
64
+ input = StringIO.new(xml.scrub)
65
+ MARC::XMLReader.new(input, parser: 'nokogiri')
66
+ end
67
+
68
+ private
69
+
70
+ def do_get(uri)
71
+ # TODO: can we get the XML as an IO rather than as a string?
72
+ Util::URIs.get(uri, headers: { user_agent: DEFAULT_USER_AGENT })
73
+ rescue RestClient::Exception => e
74
+ logger.warn("GET #{uri} failed", e)
75
+ nil
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,109 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
2
+ <version>1.2</version>
3
+ <numberOfRecords>2</numberOfRecords>
4
+ <records>
5
+ <record>
6
+ <recordSchema>marcxml</recordSchema>
7
+ <recordPacking>xml</recordPacking>
8
+ <recordData>
9
+ <record xmlns="http://www.loc.gov/MARC21/slim">
10
+ <leader>00307nam a2200085 a 4500</leader>
11
+ <controlfield tag="001">991005668359706532</controlfield>
12
+ <controlfield tag="008">^^</controlfield>
13
+ <datafield ind1=" " ind2=" " tag="035">
14
+ <subfield code="a">(CUY)UCB-b207766733-01ucs_ber</subfield>
15
+ </datafield>
16
+ <datafield ind1="1" ind2=" " tag="100">
17
+ <subfield code="a">Fukazawa, Yukio,</subfield>
18
+ <subfield code="d">1924-2017.</subfield>
19
+ </datafield>
20
+ <datafield ind1="1" ind2="0" tag="245">
21
+ <subfield code="a">Blue Doors</subfield>
22
+ <subfield code="h">[graphic]</subfield>
23
+ </datafield>
24
+ <datafield ind1=" " ind2=" " tag="300">
25
+ <subfield code="a">1 relief etching and aquatint :</subfield>
26
+ <subfield code="b">col.</subfield>
27
+ </datafield>
28
+ <datafield ind1=" " ind2=" " tag="996">
29
+ <subfield code="a">b207766733</subfield>
30
+ <subfield code="b">Updated: 01-09-19</subfield>
31
+ <subfield code="c">Created: 11-01-13</subfield>
32
+ <subfield code="d">CatDate: - -</subfield>
33
+ <subfield code="9">LOCAL</subfield>
34
+ </datafield>
35
+ <datafield ind1=" " ind2=" " tag="AVA">
36
+ <subfield code="0">991005668359706532</subfield>
37
+ <subfield code="8">22928381510006532</subfield>
38
+ <subfield code="a">01UCS_BER</subfield>
39
+ <subfield code="b">MORR</subfield>
40
+ <subfield code="c">Morrison</subfield>
41
+ <subfield code="e">unavailable</subfield>
42
+ <subfield code="f">1</subfield>
43
+ <subfield code="g">1</subfield>
44
+ <subfield code="i">UCB_Campus</subfield>
45
+ <subfield code="j">mo</subfield>
46
+ <subfield code="k">#</subfield>
47
+ <subfield code="p">1</subfield>
48
+ <subfield code="q">Morrison Library</subfield>
49
+ </datafield>
50
+ </record>
51
+ </recordData>
52
+ <recordIdentifier>991005668359706532</recordIdentifier>
53
+ <recordPosition>1</recordPosition>
54
+ </record>
55
+ <record>
56
+ <recordSchema>marcxml</recordSchema>
57
+ <recordPacking>xml</recordPacking>
58
+ <recordData>
59
+ <record xmlns="http://www.loc.gov/MARC21/slim">
60
+ <leader>00273nam a2200085 a 4500</leader>
61
+ <controlfield tag="001">991005668209706532</controlfield>
62
+ <controlfield tag="008">^^</controlfield>
63
+ <datafield ind1=" " ind2=" " tag="035">
64
+ <subfield code="a">(CUY)UCB-b207766708-01ucs_ber</subfield>
65
+ </datafield>
66
+ <datafield ind1="1" ind2=" " tag="100">
67
+ <subfield code="a">Beutlich, Tadek.</subfield>
68
+ </datafield>
69
+ <datafield ind1="1" ind2="0" tag="245">
70
+ <subfield code="a">River</subfield>
71
+ <subfield code="h">[graphic]</subfield>
72
+ </datafield>
73
+ <datafield ind1=" " ind2=" " tag="300">
74
+ <subfield code="a">1 lithograph :</subfield>
75
+ <subfield code="b">col.</subfield>
76
+ </datafield>
77
+ <datafield ind1=" " ind2=" " tag="996">
78
+ <subfield code="a">b207766708</subfield>
79
+ <subfield code="b">Updated: 11-01-13</subfield>
80
+ <subfield code="c">Created: 11-01-13</subfield>
81
+ <subfield code="d">CatDate: - -</subfield>
82
+ <subfield code="9">LOCAL</subfield>
83
+ </datafield>
84
+ <datafield ind1=" " ind2=" " tag="AVA">
85
+ <subfield code="0">991005668209706532</subfield>
86
+ <subfield code="8">22928389410006532</subfield>
87
+ <subfield code="a">01UCS_BER</subfield>
88
+ <subfield code="b">MORR</subfield>
89
+ <subfield code="c">Morrison</subfield>
90
+ <subfield code="e">available</subfield>
91
+ <subfield code="f">1</subfield>
92
+ <subfield code="g">0</subfield>
93
+ <subfield code="i">UCB_Campus</subfield>
94
+ <subfield code="j">mo</subfield>
95
+ <subfield code="k">#</subfield>
96
+ <subfield code="p">1</subfield>
97
+ <subfield code="q">Morrison Library</subfield>
98
+ </datafield>
99
+ </record>
100
+ </recordData>
101
+ <recordIdentifier>991005668209706532</recordIdentifier>
102
+ <recordPosition>2</recordPosition>
103
+ </record>
104
+ </records>
105
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
106
+ <xb:exact>true</xb:exact>
107
+ <xb:responseDate>2022-05-04T14:31:01-0700</xb:responseDate>
108
+ </extraResponseData>
109
+ </searchRetrieveResponse>
@@ -36,6 +36,26 @@ module BerkeleyLibrary
36
36
  end
37
37
  end
38
38
  end
39
+
40
+ describe 'SRU methods' do
41
+ before { Config.default! }
42
+ after { Config.send(:clear!) }
43
+
44
+ describe :get_marc_xml do
45
+ let(:record_id) { RecordId.parse('991054360089706532') }
46
+ let(:expected_body) { File.read('spec/data/991054360089706532-sru.xml') }
47
+
48
+ before do
49
+ sru_query_uri = record_id.marc_uri
50
+ stub_request(:get, sru_query_uri).to_return(body: expected_body)
51
+ end
52
+
53
+ it 'returns the MARC XML' do
54
+ marc_xml = record_id.get_marc_xml
55
+ expect(marc_xml).to eq(expected_body)
56
+ end
57
+ end
58
+ end
39
59
  end
40
60
  end
41
61
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ describe SRU do
6
+ before { Config.default! }
7
+ after { Config.send(:clear!) }
8
+
9
+ describe :get_marc_records do
10
+ let(:mms_ids) { %w[991005668209706532 991005668359706532] }
11
+
12
+ before do
13
+ sru_query_value = mms_ids.map { |id| RecordId.parse(id) }.map(&:sru_query_value).join(' or ')
14
+ sru_query_uri = SRU.sru_query_uri(sru_query_value)
15
+ stub_request(:get, sru_query_uri).to_return(body: File.read('spec/data/availability-sru.xml'))
16
+ end
17
+
18
+ it 'returns the MARC records' do
19
+ reader = SRU.get_marc_records(*mms_ids)
20
+ expect(reader).to be_a(MARC::XMLReader)
21
+
22
+ marc_records = reader.to_a
23
+ expect(marc_records.size).to eq(mms_ids.size)
24
+ expect(marc_records.map(&:record_id)).to contain_exactly(*mms_ids)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkeley_library-alma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Moles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-15 00:00:00.000000000 Z
11
+ date: 2022-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: berkeley_library-logging
@@ -276,6 +276,7 @@ files:
276
276
  - lib/berkeley_library/alma/mms_id.rb
277
277
  - lib/berkeley_library/alma/module_info.rb
278
278
  - lib/berkeley_library/alma/record_id.rb
279
+ - lib/berkeley_library/alma/sru.rb
279
280
  - rakelib/bundle.rake
280
281
  - rakelib/coverage.rake
281
282
  - rakelib/gem.rake
@@ -284,6 +285,7 @@ files:
284
285
  - spec/.rubocop.yml
285
286
  - spec/data/991054360089706532-sru.xml
286
287
  - spec/data/C084093187-sru.xml
288
+ - spec/data/availability-sru.xml
287
289
  - spec/data/b110824349-sru.xml
288
290
  - spec/data/bibs_with_check_digits.txt
289
291
  - spec/lib/berkeley_library/alma/barcode_spec.rb
@@ -291,6 +293,7 @@ files:
291
293
  - spec/lib/berkeley_library/alma/config_spec.rb
292
294
  - spec/lib/berkeley_library/alma/mms_id_spec.rb
293
295
  - spec/lib/berkeley_library/alma/record_id_spec.rb
296
+ - spec/lib/berkeley_library/alma/sru_spec.rb
294
297
  - spec/spec_helper.rb
295
298
  homepage: https://github.com/BerkeleyLibrary/alma
296
299
  licenses:
@@ -319,6 +322,7 @@ test_files:
319
322
  - spec/.rubocop.yml
320
323
  - spec/data/991054360089706532-sru.xml
321
324
  - spec/data/C084093187-sru.xml
325
+ - spec/data/availability-sru.xml
322
326
  - spec/data/b110824349-sru.xml
323
327
  - spec/data/bibs_with_check_digits.txt
324
328
  - spec/lib/berkeley_library/alma/barcode_spec.rb
@@ -326,4 +330,5 @@ test_files:
326
330
  - spec/lib/berkeley_library/alma/config_spec.rb
327
331
  - spec/lib/berkeley_library/alma/mms_id_spec.rb
328
332
  - spec/lib/berkeley_library/alma/record_id_spec.rb
333
+ - spec/lib/berkeley_library/alma/sru_spec.rb
329
334
  - spec/spec_helper.rb