berkeley_library-alma 0.0.3 → 0.0.4

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: 581717a54a7d13196acbf99d46db7c2e24931038a144994b9a262097efa3aae1
4
- data.tar.gz: 3d9aad321ac4dcb7ee392c2ffb509a53c143936ae8256c758de0689a40c5be60
3
+ metadata.gz: 16a46868b570b1ebae5581407ffa071c63ea95a2d1c31d0a422fa89f2dd359df
4
+ data.tar.gz: 5e1106e53a671ffa3ae695cdb8ebff1b61c5f965642fbc66d8e95fd0affaabd3
5
5
  SHA512:
6
- metadata.gz: fd8d67af487bac3d335a672d538fe72289a08e9abe470f560c3af5157a5724acd2619937b3e35dc802811a33e7181719516eece6a9c894ecfb1e38899ff6fe0f
7
- data.tar.gz: 7f3d90e3777dd0b129931a7a919366afbb0db0fbb6ca4d5aa331c4be42c925f8ffc0d9b31f3b05bfcf4957c61afd343f3d496697ff10a979fb3b75c2c8f6db50
6
+ metadata.gz: 801e395bcffaa40afa629c8449b0d9e2c3d2ee31751b6f09698e3531eb96db9b5c45cdb5794ea74aee1665e67c6713190161b0a6f064f20eceec5c0275ab1756
7
+ data.tar.gz: 1636e32d6c5cff6ecf7c5d4ac923463905190fb2a221a7c37b8a05da9c294d31a0790ee0d955e0b956f32ff37ba1594bf80a5f172db80d62a76baadc8d24f474
data/.idea/alma.iml CHANGED
@@ -23,7 +23,7 @@
23
23
  <orderEntry type="library" scope="PROVIDED" name="berkeley_library-util (v0.1.1, RVM: ruby-2.7.5) [gem]" level="application" />
24
24
  <orderEntry type="library" scope="PROVIDED" name="builder (v3.2.4, RVM: ruby-2.7.5) [gem]" level="application" />
25
25
  <orderEntry type="library" scope="PROVIDED" name="bundle-audit (v0.1.0, RVM: ruby-2.7.5) [gem]" level="application" />
26
- <orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.31, RVM: ruby-2.7.5) [gem]" level="application" />
26
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v2.1.4, RVM: ruby-2.7.5) [gem]" level="application" />
27
27
  <orderEntry type="library" scope="PROVIDED" name="bundler-audit (v0.9.0.1, RVM: ruby-2.7.5) [gem]" level="application" />
28
28
  <orderEntry type="library" scope="PROVIDED" name="ci_reporter (v2.0.0, RVM: ruby-2.7.5) [gem]" level="application" />
29
29
  <orderEntry type="library" scope="PROVIDED" name="ci_reporter_rspec (v1.0.0, RVM: ruby-2.7.5) [gem]" level="application" />
@@ -38,7 +38,7 @@
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.0, 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" />
42
42
  <orderEntry type="library" scope="PROVIDED" name="lograge (v0.11.2, RVM: ruby-2.7.5) [gem]" level="application" />
43
43
  <orderEntry type="library" scope="PROVIDED" name="loofah (v2.13.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" />
@@ -66,16 +66,16 @@
66
66
  <orderEntry type="library" scope="PROVIDED" name="request_store (v1.5.1, RVM: ruby-2.7.5) [gem]" level="application" />
67
67
  <orderEntry type="library" scope="PROVIDED" name="rest-client (v2.1.0, RVM: ruby-2.7.5) [gem]" level="application" />
68
68
  <orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.5, RVM: ruby-2.7.5) [gem]" level="application" />
69
- <orderEntry type="library" scope="PROVIDED" name="rspec (v3.10.0, RVM: ruby-2.7.5) [gem]" level="application" />
70
- <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.10.1, RVM: ruby-2.7.5) [gem]" level="application" />
71
- <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.10.2, RVM: ruby-2.7.5) [gem]" level="application" />
72
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.10.2, RVM: ruby-2.7.5) [gem]" level="application" />
73
- <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.10.3, RVM: ruby-2.7.5) [gem]" level="application" />
69
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v3.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
70
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
71
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
72
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
73
+ <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
74
74
  <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
75
75
  <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.15.1, RVM: ruby-2.7.5) [gem]" level="application" />
76
76
  <orderEntry type="library" scope="PROVIDED" name="rubocop-rake (v0.6.0, RVM: ruby-2.7.5) [gem]" level="application" />
77
77
  <orderEntry type="library" scope="PROVIDED" name="rubocop-rspec (v2.4.0, RVM: ruby-2.7.5) [gem]" level="application" />
78
- <orderEntry type="library" scope="PROVIDED" name="ruby-marc-spec (v0.1.1, RVM: ruby-2.7.5) [gem]" level="application" />
78
+ <orderEntry type="library" scope="PROVIDED" name="ruby-marc-spec (v0.1.3, RVM: ruby-2.7.5) [gem]" level="application" />
79
79
  <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, RVM: ruby-2.7.5) [gem]" level="application" />
80
80
  <orderEntry type="library" scope="PROVIDED" name="scrub_rb (v1.0.1, RVM: ruby-2.7.5) [gem]" level="application" />
81
81
  <orderEntry type="library" scope="PROVIDED" name="simplecov (v0.21.2, RVM: ruby-2.7.5) [gem]" level="application" />
@@ -91,7 +91,7 @@
91
91
  <orderEntry type="library" scope="PROVIDED" name="webmock (v3.14.0, RVM: ruby-2.7.5) [gem]" level="application" />
92
92
  <orderEntry type="library" scope="PROVIDED" name="webrick (v1.7.0, RVM: ruby-2.7.5) [gem]" level="application" />
93
93
  <orderEntry type="library" scope="PROVIDED" name="yard (v0.9.27, RVM: ruby-2.7.5) [gem]" level="application" />
94
- <orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.5.3, RVM: ruby-2.7.5) [gem]" level="application" />
94
+ <orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.5.4, RVM: ruby-2.7.5) [gem]" level="application" />
95
95
  </component>
96
96
  <component name="RModuleSettingsStorage">
97
97
  <LOAD_PATH number="2" string0="$MODULE_DIR$/lib" string1="$MODULE_DIR$/spec" />
@@ -108,7 +108,7 @@
108
108
  </RakeTaskImpl>
109
109
  <RakeTaskImpl description="Run all specs in spec directory, with coverage" fullCommand="coverage" id="coverage" />
110
110
  <RakeTaskImpl description="Run tests, check test coverage, check code style, check for vulnerabilities, build gem" fullCommand="default" id="default" />
111
- <RakeTaskImpl description="Build berkeley_library-alma.gemspec as berkeley_library-alma-0.0.2.gem" fullCommand="gem" id="gem" />
111
+ <RakeTaskImpl description="Build berkeley_library-alma.gemspec as berkeley_library-alma-0.0.3.gem" fullCommand="gem" id="gem" />
112
112
  <RakeTaskImpl description="Run RuboCop with auto-correct, and output results to console" fullCommand="ra" id="ra" />
113
113
  <RakeTaskImpl description="Run rubocop with HTML output" fullCommand="rubocop" id="rubocop" />
114
114
  <RakeTaskImpl id="rubocop">
data/CHANGES.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.0.4 (15 February 2022)
2
+
3
+ - adds `BarCode` subclass of `RecordId`, to look up bibliographic records by
4
+ item barcode. Note that since barcodes have no consistent format, `BarCode`
5
+ objects need to be constructed deliberately with `BarCode#new`, not with
6
+ `RecordId#parse`.
7
+
1
8
  # 0.0.3 (3 February 2022)
2
9
 
3
10
  - use `local_field_996` instead of `other_system_number` when making SRU queries
data/bin/alma-mms-lookup CHANGED
@@ -25,9 +25,7 @@ require 'berkeley_library/alma'
25
25
  # Configuration
26
26
 
27
27
  # Configure Alma URLs etc.
28
- BerkeleyLibrary::Alma.configure do
29
- Config.default!
30
- end
28
+ BerkeleyLibrary::Alma::Config.default!
31
29
 
32
30
  # Set log level
33
31
  BerkeleyLibrary::Logging.logger.level = Logger::Severity::WARN
@@ -0,0 +1,33 @@
1
+ require 'berkeley_library/alma/record_id'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ # {RecordId} subclass representing an item barcode.
6
+ class BarCode
7
+ include RecordId
8
+
9
+ attr_reader :barcode
10
+
11
+ # Initialize a barcode. Since we purchase barcodes of varied formats and accept vendor
12
+ # barcodes as well we are only validating whether it's a string or not.
13
+ def initialize(barcode)
14
+ string?(barcode)
15
+ @barcode = barcode
16
+ end
17
+
18
+ # Returns the SRU query value for this Barcode.
19
+ #
20
+ # @return [String] the Barcode query value
21
+ def sru_query_value
22
+ "alma.barcode=#{@barcode}"
23
+ end
24
+
25
+ private
26
+
27
+ def string?(barcode)
28
+ raise ArgumentError, "Barcode must be a string: #{barcode.inspect}" unless barcode.is_a?(String)
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -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.3'.freeze
10
+ VERSION = '0.0.4'.freeze
11
11
  HOMEPAGE = 'https://github.com/BerkeleyLibrary/alma'.freeze
12
12
  end
13
13
  end
@@ -22,6 +22,9 @@ module BerkeleyLibrary
22
22
  # also accepts a {RecordId} and simply returns it, so it can be used in
23
23
  # situations where it may not be clear whether the ID has already been parsed.
24
24
  #
25
+ # **Note:** Use the {BarCode} class for barcodes, which don't have a consistent
26
+ # format and hence can't be auto-detected.
27
+ #
25
28
  # @param id [String, RecordId] the ID to parse
26
29
  # @return [RecordId, nil] an {MMSID} or {BibNumber}, depending on the type of ID,
27
30
  # or `nil` if the specified `id` is neither an MMS ID nor a bib number
@@ -0,0 +1,299 @@
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>1</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>03480cgm a2200781Mi 4500</leader>
11
+ <controlfield tag="001">991039354509706532</controlfield>
12
+ <controlfield tag="005">20210615124013.0</controlfield>
13
+ <controlfield tag="007">vd cvaizs</controlfield>
14
+ <controlfield tag="008">050601p19971996quc135 vleng d</controlfield>
15
+ <datafield ind1="1" ind2=" " tag="024">
16
+ <subfield code="a">774212007033</subfield>
17
+ </datafield>
18
+ <datafield ind1="4" ind2="2" tag="028">
19
+ <subfield code="a">20070</subfield>
20
+ <subfield code="b">Seville Pictures</subfield>
21
+ </datafield>
22
+ <datafield ind1=" " ind2=" " tag="035">
23
+ <subfield code="a">(OCoLC)613118288</subfield>
24
+ <subfield code="z">(OCoLC)800045975</subfield>
25
+ <subfield code="z">(OCoLC)811619021</subfield>
26
+ </datafield>
27
+ <datafield ind1=" " ind2=" " tag="035">
28
+ <subfield code="a">(CLU)8266514-ucladb-Voyager</subfield>
29
+ </datafield>
30
+ <datafield ind1=" " ind2=" " tag="035">
31
+ <subfield code="a">(EXLNZ-01UCS_NETWORK)9912724001006531</subfield>
32
+ </datafield>
33
+ <datafield ind1=" " ind2=" " tag="040">
34
+ <subfield code="a">W2U</subfield>
35
+ <subfield code="b">eng</subfield>
36
+ <subfield code="c">W2U</subfield>
37
+ <subfield code="d">OCLCF</subfield>
38
+ <subfield code="d">OCLCO</subfield>
39
+ <subfield code="d">TOH</subfield>
40
+ <subfield code="d">GK8</subfield>
41
+ <subfield code="d">OCL</subfield>
42
+ <subfield code="d">OCLCQ</subfield>
43
+ <subfield code="d">OCLCO</subfield>
44
+ <subfield code="e">rda</subfield>
45
+ <subfield code="d">CDS</subfield>
46
+ <subfield code="d">OCLCA</subfield>
47
+ </datafield>
48
+ <datafield ind1="1" ind2=" " tag="041">
49
+ <subfield code="a">eng</subfield>
50
+ <subfield code="a">fre</subfield>
51
+ </datafield>
52
+ <datafield ind1=" " ind2=" " tag="043">
53
+ <subfield code="a">n-us---</subfield>
54
+ </datafield>
55
+ <datafield ind1=" " ind2=" " tag="044">
56
+ <subfield code="a">quc</subfield>
57
+ <subfield code="a">xxu</subfield>
58
+ <subfield code="a">fr</subfield>
59
+ </datafield>
60
+ <datafield ind1=" " ind2=" " tag="046">
61
+ <subfield code="k">1996</subfield>
62
+ </datafield>
63
+ <datafield ind1="1" ind2="4" tag="050">
64
+ <subfield code="a">PN1997</subfield>
65
+ <subfield code="b">.L735 1997</subfield>
66
+ </datafield>
67
+ <datafield ind1=" " ind2=" " tag="090">
68
+ <subfield code="b">DVD 3916</subfield>
69
+ <subfield code="9">LOCAL</subfield>
70
+ </datafield>
71
+ <datafield ind1="0" ind2="0" tag="245">
72
+ <subfield code="a">Lost highway /</subfield>
73
+ <subfield code="c">October Films presents a CIBY 2000/Asymmetrical production ; a David Lynch film ; produced by Deepak Nayar, Tom Sternberg, Mahy Sweeney ; written by David Lynch &amp; Barry Gifford ; directed by David Lynch.</subfield>
74
+ </datafield>
75
+ <datafield ind1=" " ind2=" " tag="257">
76
+ <subfield code="a">United States</subfield>
77
+ <subfield code="a">France</subfield>
78
+ <subfield code="2">naf</subfield>
79
+ </datafield>
80
+ <datafield ind1=" " ind2="1" tag="264">
81
+ <subfield code="a">[Montreal] :</subfield>
82
+ <subfield code="b">Seville Pictures,</subfield>
83
+ <subfield code="c">1997.</subfield>
84
+ </datafield>
85
+ <datafield ind1=" " ind2=" " tag="300">
86
+ <subfield code="a">1 videodisc (135 min.) :</subfield>
87
+ <subfield code="b">sound, color ;</subfield>
88
+ <subfield code="c">4 3/4 in.</subfield>
89
+ </datafield>
90
+ <datafield ind1=" " ind2=" " tag="336">
91
+ <subfield code="a">two-dimensional moving image</subfield>
92
+ <subfield code="b">tdi</subfield>
93
+ <subfield code="2">rdacontent</subfield>
94
+ </datafield>
95
+ <datafield ind1=" " ind2=" " tag="337">
96
+ <subfield code="a">video</subfield>
97
+ <subfield code="b">v</subfield>
98
+ <subfield code="2">rdamedia</subfield>
99
+ </datafield>
100
+ <datafield ind1=" " ind2=" " tag="338">
101
+ <subfield code="a">videodisc</subfield>
102
+ <subfield code="b">vd</subfield>
103
+ <subfield code="2">rdacarrier</subfield>
104
+ </datafield>
105
+ <datafield ind1=" " ind2=" " tag="344">
106
+ <subfield code="a">digital</subfield>
107
+ <subfield code="b">optical</subfield>
108
+ <subfield code="g">stereo</subfield>
109
+ </datafield>
110
+ <datafield ind1=" " ind2=" " tag="346">
111
+ <subfield code="b">NTSC</subfield>
112
+ </datafield>
113
+ <datafield ind1=" " ind2=" " tag="347">
114
+ <subfield code="a">video file</subfield>
115
+ <subfield code="b">DVD video</subfield>
116
+ <subfield code="e">Region 1</subfield>
117
+ <subfield code="2">rda</subfield>
118
+ </datafield>
119
+ <datafield ind1=" " ind2=" " tag="380">
120
+ <subfield code="a">Motion picture</subfield>
121
+ </datafield>
122
+ <datafield ind1=" " ind2=" " tag="500">
123
+ <subfield code="a">Pan and scan version.</subfield>
124
+ </datafield>
125
+ <datafield ind1=" " ind2=" " tag="500">
126
+ <subfield code="a">Special features include: theatrical trailer; interactive menus; scene selection.</subfield>
127
+ </datafield>
128
+ <datafield ind1=" " ind2=" " tag="500">
129
+ <subfield code="a">Originally released as a motion picture in 1996.</subfield>
130
+ </datafield>
131
+ <datafield ind1=" " ind2=" " tag="508">
132
+ <subfield code="a">Music, Angelo Badalamenti ; editor, Mary Sweeney ; director of photography, Peter Deming.</subfield>
133
+ </datafield>
134
+ <datafield ind1="1" ind2=" " tag="511">
135
+ <subfield code="a">Bill Pullman, Patricia Arquette, Balthazar Getty, Robert Blake, Natasha Gregson Wagner, Gary Busey, Robert Loggia.</subfield>
136
+ </datafield>
137
+ <datafield ind1=" " ind2=" " tag="520">
138
+ <subfield code="a">A successful jazz musician whose marriage is on the rocks, a man in black who threatens to expose him, a young mechanic with links to a mobster, and the mobster's moll are all riders on the lost highway, trapped in their worlds of desire, destiny and unknown destination where the truth is always a short way further down the road.</subfield>
139
+ </datafield>
140
+ <datafield ind1="8" ind2=" " tag="521">
141
+ <subfield code="a">Canadian home video rating: R.</subfield>
142
+ </datafield>
143
+ <datafield ind1=" " ind2=" " tag="538">
144
+ <subfield code="a">DVD, Dolby stereo; Region 1; NTSC.</subfield>
145
+ </datafield>
146
+ <datafield ind1=" " ind2=" " tag="546">
147
+ <subfield code="a">In English or dubbed French.</subfield>
148
+ </datafield>
149
+ <datafield ind1=" " ind2="0" tag="650">
150
+ <subfield code="a">Jazz musicians</subfield>
151
+ <subfield code="z">United States</subfield>
152
+ <subfield code="v">Drama.</subfield>
153
+ </datafield>
154
+ <datafield ind1=" " ind2="7" tag="650">
155
+ <subfield code="a">Jazz musicians.</subfield>
156
+ <subfield code="2">fast</subfield>
157
+ <subfield code="0">(OCoLC)fst00982205</subfield>
158
+ </datafield>
159
+ <datafield ind1=" " ind2="7" tag="651">
160
+ <subfield code="a">United States.</subfield>
161
+ <subfield code="2">fast</subfield>
162
+ <subfield code="0">(OCoLC)fst01204155</subfield>
163
+ </datafield>
164
+ <datafield ind1=" " ind2="7" tag="655">
165
+ <subfield code="a">Drama.</subfield>
166
+ <subfield code="2">fast</subfield>
167
+ <subfield code="0">(OCoLC)fst01423879</subfield>
168
+ </datafield>
169
+ <datafield ind1=" " ind2="7" tag="655">
170
+ <subfield code="a">Feature films.</subfield>
171
+ <subfield code="2">fast</subfield>
172
+ <subfield code="0">(OCoLC)fst01710384</subfield>
173
+ </datafield>
174
+ <datafield ind1=" " ind2="7" tag="655">
175
+ <subfield code="a">Fiction films.</subfield>
176
+ <subfield code="2">fast</subfield>
177
+ <subfield code="0">(OCoLC)fst01710264</subfield>
178
+ </datafield>
179
+ <datafield ind1=" " ind2="7" tag="655">
180
+ <subfield code="a">Feature films.</subfield>
181
+ <subfield code="2">lcgft</subfield>
182
+ </datafield>
183
+ <datafield ind1=" " ind2="7" tag="655">
184
+ <subfield code="a">Fiction films.</subfield>
185
+ <subfield code="2">lcgft</subfield>
186
+ </datafield>
187
+ <datafield ind1="1" ind2=" " tag="700">
188
+ <subfield code="a">Pullman, Bill,</subfield>
189
+ <subfield code="e">actor.</subfield>
190
+ </datafield>
191
+ <datafield ind1="1" ind2=" " tag="700">
192
+ <subfield code="a">Arquette, Patricia,</subfield>
193
+ <subfield code="d">1968-</subfield>
194
+ <subfield code="e">actor.</subfield>
195
+ </datafield>
196
+ <datafield ind1="1" ind2=" " tag="700">
197
+ <subfield code="a">Getty, Balthazar,</subfield>
198
+ <subfield code="e">actor.</subfield>
199
+ </datafield>
200
+ <datafield ind1="1" ind2=" " tag="700">
201
+ <subfield code="a">Blake, Robert,</subfield>
202
+ <subfield code="d">1933-</subfield>
203
+ <subfield code="e">actor.</subfield>
204
+ </datafield>
205
+ <datafield ind1="1" ind2=" " tag="700">
206
+ <subfield code="a">Wagner, Natasha Gregson,</subfield>
207
+ <subfield code="d">1970-</subfield>
208
+ <subfield code="e">actor.</subfield>
209
+ </datafield>
210
+ <datafield ind1="1" ind2=" " tag="700">
211
+ <subfield code="a">Busey, Gary,</subfield>
212
+ <subfield code="e">actor.</subfield>
213
+ </datafield>
214
+ <datafield ind1="1" ind2=" " tag="700">
215
+ <subfield code="a">Loggia, Robert,</subfield>
216
+ <subfield code="e">actor.</subfield>
217
+ </datafield>
218
+ <datafield ind1="1" ind2=" " tag="700">
219
+ <subfield code="a">Nayar, Deepak.</subfield>
220
+ <subfield code="e">film producer.</subfield>
221
+ </datafield>
222
+ <datafield ind1="1" ind2=" " tag="700">
223
+ <subfield code="a">Sternberg, Tom.</subfield>
224
+ <subfield code="e">film producer.</subfield>
225
+ </datafield>
226
+ <datafield ind1="1" ind2=" " tag="700">
227
+ <subfield code="a">Sweeney, Mahy.</subfield>
228
+ <subfield code="e">film produer</subfield>
229
+ </datafield>
230
+ <datafield ind1="1" ind2=" " tag="700">
231
+ <subfield code="a">Lynch, David,</subfield>
232
+ <subfield code="d">1946-</subfield>
233
+ <subfield code="e">screenwriter,</subfield>
234
+ <subfield code="e">director.</subfield>
235
+ </datafield>
236
+ <datafield ind1="1" ind2=" " tag="700">
237
+ <subfield code="a">Gifford, Barry,</subfield>
238
+ <subfield code="d">1946-</subfield>
239
+ <subfield code="e">screenwriter.</subfield>
240
+ </datafield>
241
+ <datafield ind1="2" ind2=" " tag="710">
242
+ <subfield code="a">Séville Pictures.</subfield>
243
+ </datafield>
244
+ <datafield ind1="2" ind2=" " tag="710">
245
+ <subfield code="a">Asymmetrical (Firm)</subfield>
246
+ </datafield>
247
+ <datafield ind1="2" ind2=" " tag="710">
248
+ <subfield code="a">CIBY 2000 (Firm)</subfield>
249
+ </datafield>
250
+ <datafield ind1="2" ind2=" " tag="710">
251
+ <subfield code="a">October Films.</subfield>
252
+ </datafield>
253
+ <datafield ind1="4" ind2="2" tag="956">
254
+ <subfield code="z">Credits from Internet Movie Database</subfield>
255
+ <subfield code="u">http://www.imdb.com/title/tt0116922/</subfield>
256
+ <subfield code="9">LOCAL</subfield>
257
+ </datafield>
258
+ <datafield ind1=" " ind2=" " tag="968">
259
+ <subfield code="a">Reclvl: f Addate: 050601 Addid: SMI Moddate: 090214 Modid: MRC</subfield>
260
+ <subfield code="9">LOCAL</subfield>
261
+ </datafield>
262
+ <datafield ind1=" " ind2=" " tag="996">
263
+ <subfield code="e">GLADN151847889</subfield>
264
+ <subfield code="9">LOCAL</subfield>
265
+ </datafield>
266
+ <datafield ind1=" " ind2=" " tag="996">
267
+ <subfield code="a">b111084751</subfield>
268
+ <subfield code="b">Updated: 06-14-21</subfield>
269
+ <subfield code="c">Created: 03-17-09</subfield>
270
+ <subfield code="d">CatDate: 06-01-05</subfield>
271
+ <subfield code="9">LOCAL</subfield>
272
+ </datafield>
273
+ <datafield ind1=" " ind2=" " tag="AVA">
274
+ <subfield code="0">991039354509706532</subfield>
275
+ <subfield code="8">22725145850006532</subfield>
276
+ <subfield code="a">01UCS_BER</subfield>
277
+ <subfield code="b">MRC</subfield>
278
+ <subfield code="c">Media Resources Center</subfield>
279
+ <subfield code="d">DVD 3916</subfield>
280
+ <subfield code="e">available</subfield>
281
+ <subfield code="f">1</subfield>
282
+ <subfield code="g">0</subfield>
283
+ <subfield code="i">UCB_Campus</subfield>
284
+ <subfield code="j">mc</subfield>
285
+ <subfield code="k">8</subfield>
286
+ <subfield code="p">1</subfield>
287
+ <subfield code="q">Media Resources Center</subfield>
288
+ </datafield>
289
+ </record>
290
+ </recordData>
291
+ <recordIdentifier>991039354509706532</recordIdentifier>
292
+ <recordPosition>1</recordPosition>
293
+ </record>
294
+ </records>
295
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
296
+ <xb:exact>true</xb:exact>
297
+ <xb:responseDate>2022-02-10T12:40:32-0800</xb:responseDate>
298
+ </extraResponseData>
299
+ </searchRetrieveResponse>
File without changes
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ describe BarCode do
6
+ before(:each) do
7
+ BerkeleyLibrary::Alma.configure do
8
+ Config.alma_sru_host = 'berkeley.alma.exlibrisgroup.com'
9
+ Config.alma_institution_code = '01UCS_BER'
10
+ Config.alma_primo_host = 'search.library.berkeley.edu'
11
+ Config.alma_permalink_key = 'iqob43'
12
+ end
13
+ end
14
+
15
+ after(:each) do
16
+ BerkeleyLibrary::Alma::Config.send(:clear!)
17
+ end
18
+
19
+ describe :new do
20
+ bad_barcode = 1234
21
+ it "raises an error for input that's not an string" do
22
+ expect { BarCode.new(bad_barcode) }.to raise_error(ArgumentError), "#{bad_barcode}: No error raised for #{bad_barcode}"
23
+ end
24
+ end
25
+
26
+ describe :marc_record do
27
+ it 'returns the MARC record' do
28
+ barcode_id = 'C084093187'
29
+ stub_sru_request('alma.barcode', barcode_id)
30
+
31
+ barcode = BerkeleyLibrary::Alma::BarCode.new(barcode_id)
32
+ marc_record = barcode.get_marc_record
33
+ expect(marc_record).not_to be_nil
34
+ end
35
+
36
+ it 'returns nil for an empty response' do
37
+ empty_sru_response = <<~XML.strip
38
+ <?xml version="1.0" encoding="UTF-8"?>
39
+ <searchRetrieveResponse>
40
+ <version>1.2</version>
41
+ <numberOfRecords>0</numberOfRecords>
42
+ <records/>
43
+ </searchRetrieveResponse>
44
+ XML
45
+
46
+ barcode_id = '991054360089706532doesntexist'
47
+ sru_url = sru_url_for('alma.barcode', barcode_id)
48
+ stub_request(:get, sru_url).to_return(status: 200, body: empty_sru_response)
49
+
50
+ barcode = BarCode.new(barcode_id)
51
+ marc_record = barcode.get_marc_record
52
+ expect(marc_record).to be_nil
53
+ end
54
+
55
+ it 'returns nil for an HTTP error response' do
56
+ barcode_id = '991054360089706532934j3h'
57
+ sru_url = sru_url_for('alma.barcode', barcode_id)
58
+ stub_request(:get, sru_url).to_return(status: 404)
59
+
60
+ barcode = BarCode.new(barcode_id)
61
+ marc_record = barcode.get_marc_record
62
+ expect(marc_record).to be_nil
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -90,7 +90,8 @@ module BerkeleyLibrary
90
90
  describe :marc_record do
91
91
  it 'returns the MARC record' do
92
92
  raw_bib_number = 'b11082434'
93
- stub_sru_request(raw_bib_number)
93
+ full_bib_number = 'b110824349'
94
+ stub_sru_request('alma.local_field_996', full_bib_number)
94
95
 
95
96
  bib_number = BibNumber.new(raw_bib_number)
96
97
  marc_record = bib_number.get_marc_record
@@ -58,7 +58,7 @@ module BerkeleyLibrary
58
58
  describe :marc_record do
59
59
  it 'returns the MARC record' do
60
60
  raw_mms_id = '991054360089706532'
61
- stub_sru_request(raw_mms_id)
61
+ stub_sru_request('alma.mms_id', raw_mms_id)
62
62
 
63
63
  mms_id = MMSID.new(raw_mms_id)
64
64
  marc_record = mms_id.get_marc_record
@@ -77,7 +77,7 @@ module BerkeleyLibrary
77
77
  XML
78
78
 
79
79
  raw_mms_id = '991054360089706532'
80
- sru_url = sru_url_for(raw_mms_id)
80
+ sru_url = sru_url_for('alma.mms_id', raw_mms_id)
81
81
  stub_request(:get, sru_url).to_return(status: 200, body: empty_sru_response)
82
82
 
83
83
  mms_id = MMSID.new(raw_mms_id)
@@ -87,7 +87,7 @@ module BerkeleyLibrary
87
87
 
88
88
  it 'returns nil for an HTTP error response' do
89
89
  raw_mms_id = '991054360089706532'
90
- sru_url = sru_url_for(raw_mms_id)
90
+ sru_url = sru_url_for('alma.mms_id', raw_mms_id)
91
91
  stub_request(:get, sru_url).to_return(status: 404)
92
92
 
93
93
  mms_id = MMSID.new(raw_mms_id)
data/spec/spec_helper.rb CHANGED
@@ -31,26 +31,17 @@ require 'berkeley_library/alma'
31
31
  # ------------------------------------------------------------
32
32
  # Utility methods
33
33
 
34
- def sru_url_for(record_id)
35
- sru_url_base = 'https://berkeley.alma.exlibrisgroup.com/view/sru/01UCS_BER?version=1.2&operation=searchRetrieve&query='
36
-
37
- if BerkeleyLibrary::Alma::Constants::ALMA_RECORD_RE =~ record_id
38
- "#{sru_url_base}alma.mms_id%3D#{record_id}"
39
- elsif BerkeleyLibrary::Alma::Constants::MILLENNIUM_RECORD_RE =~ record_id
40
- full_bib_number = BerkeleyLibrary::Alma::BibNumber.new(record_id).to_s
41
- "#{sru_url_base}alma.local_field_996%3D#{full_bib_number}"
42
- else
43
- raise ArgumentError, "Unknown record ID type: #{record_id}"
44
- end
34
+ def sru_url_for(index, value)
35
+ "https://berkeley.alma.exlibrisgroup.com/view/sru/01UCS_BER?version=1.2&operation=searchRetrieve&query=#{index}%3D#{value}"
45
36
  end
46
37
 
47
38
  def sru_data_path_for(record_id)
48
39
  "spec/data/#{record_id}-sru.xml"
49
40
  end
50
41
 
51
- def stub_sru_request(record_id)
52
- sru_url = sru_url_for(record_id)
53
- marc_xml_path = sru_data_path_for(record_id)
42
+ def stub_sru_request(index, value)
43
+ sru_url_ = sru_url_for(index, value)
44
+ marc_xml_path = sru_data_path_for(value)
54
45
 
55
- stub_request(:get, sru_url).to_return(status: 200, body: File.read(marc_xml_path))
46
+ stub_request(:get, sru_url_).to_return(status: 200, body: File.read(marc_xml_path))
56
47
  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.3
4
+ version: 0.0.4
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-03 00:00:00.000000000 Z
11
+ date: 2022-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: berkeley_library-logging
@@ -269,6 +269,7 @@ files:
269
269
  - bin/alma-mms-lookup
270
270
  - docker-compose.yml
271
271
  - lib/berkeley_library/alma.rb
272
+ - lib/berkeley_library/alma/barcode.rb
272
273
  - lib/berkeley_library/alma/bib_number.rb
273
274
  - lib/berkeley_library/alma/config.rb
274
275
  - lib/berkeley_library/alma/constants.rb
@@ -282,8 +283,10 @@ files:
282
283
  - rakelib/spec.rake
283
284
  - spec/.rubocop.yml
284
285
  - spec/data/991054360089706532-sru.xml
285
- - spec/data/b11082434-sru.xml
286
+ - spec/data/C084093187-sru.xml
287
+ - spec/data/b110824349-sru.xml
286
288
  - spec/data/bibs_with_check_digits.txt
289
+ - spec/lib/berkeley_library/alma/barcode_spec.rb
287
290
  - spec/lib/berkeley_library/alma/bib_number_spec.rb
288
291
  - spec/lib/berkeley_library/alma/config_spec.rb
289
292
  - spec/lib/berkeley_library/alma/mms_id_spec.rb
@@ -315,8 +318,10 @@ summary: Alma/Primo utilities for the UC Berkeley Library
315
318
  test_files:
316
319
  - spec/.rubocop.yml
317
320
  - spec/data/991054360089706532-sru.xml
318
- - spec/data/b11082434-sru.xml
321
+ - spec/data/C084093187-sru.xml
322
+ - spec/data/b110824349-sru.xml
319
323
  - spec/data/bibs_with_check_digits.txt
324
+ - spec/lib/berkeley_library/alma/barcode_spec.rb
320
325
  - spec/lib/berkeley_library/alma/bib_number_spec.rb
321
326
  - spec/lib/berkeley_library/alma/config_spec.rb
322
327
  - spec/lib/berkeley_library/alma/mms_id_spec.rb