berkeley_library-av-core 0.4.2 → 0.4.3
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 +4 -4
- data/.github/workflows/build.yml +3 -3
- data/.github/workflows/gem-push.yml +1 -1
- data/CHANGES.md +6 -1
- data/lib/berkeley_library/av/core/module_info.rb +1 -1
- data/lib/berkeley_library/av/metadata/readers/tind.rb +2 -2
- data/lib/berkeley_library/av/util.rb +5 -1
- data/spec/lib/berkeley_library/av/metadata/metadata_spec.rb +5 -5
- data/spec/lib/berkeley_library/av/metadata/source_spec.rb +1 -1
- data/spec/lib/berkeley_library/av/record_spec.rb +5 -5
- data/spec/lib/berkeley_library/av/util_spec.rb +26 -0
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 971da7efa1200b726375ad3d140e194e430dd26f445640469bacebc9c9f2a7ea
|
|
4
|
+
data.tar.gz: 20d351482ba8d7d9e31ae026d250462abaca8e1285793737c51f1ce0f0fa6386
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ab15fd5cbb329b686211a62c6d653e2c8af16f6a1bb68414e8eedfcb183b5e4b0bbcecabff013d724051059540e6b5b7f42018733dbbf629e6e7c04e3fc36c95
|
|
7
|
+
data.tar.gz: 3b3f405f9c7abb05037963e51e92cf8a83d47ea80881d9d4ba4e96a0846a1d7d7a12a1a54f0a7b09aa6178b9f4c797e6e97755614b035e3c82976f46afe071a9
|
data/.github/workflows/build.yml
CHANGED
|
@@ -11,7 +11,7 @@ jobs:
|
|
|
11
11
|
|
|
12
12
|
steps:
|
|
13
13
|
- name: Check out repository
|
|
14
|
-
uses: actions/checkout@
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
15
|
|
|
16
16
|
- name: Set up Ruby
|
|
17
17
|
uses: ruby/setup-ruby@v1
|
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
|
|
25
25
|
- name: Upload artifacts
|
|
26
26
|
if: ${{ always() }}
|
|
27
|
-
uses: actions/upload-artifact@
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
28
|
with:
|
|
29
|
-
name: artifacts
|
|
29
|
+
name: artifacts-${{ matrix.os }}-${{ matrix.ruby }}
|
|
30
30
|
path: artifacts/**
|
data/CHANGES.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
# 0.4.3 (2025-11-04)
|
|
2
|
+
|
|
3
|
+
- BerkeleyLibrary::AV::Metadata::Readers:TIND now uses the /api/v1/search endpoint to retrieve records. The public /search endpoint stopped working for non-browser/human clients in the past week due to TIND changes.
|
|
4
|
+
- BerkeleyLibrary::AV::Util#do_get sources the TIND API key from ENV['LIT_TIND_API_KEY'] if it's set.
|
|
5
|
+
|
|
1
6
|
# 0.4.2 (2024-10-10)
|
|
2
7
|
|
|
3
8
|
- Add TRANSCRIPTS to `AV::METADATA::FIELDS`
|
|
@@ -18,7 +23,7 @@
|
|
|
18
23
|
- `Metadata#player_link_text`
|
|
19
24
|
- `Metadata#player_url`
|
|
20
25
|
- Remove the following constants:
|
|
21
|
-
- `AV::Constants::RESTRICTIONS_CALNET`
|
|
26
|
+
- `AV::Constants::RESTRICTIONS_CALNET`
|
|
22
27
|
- `AV::Constants::RESTRICTIONS_UCB_IP`
|
|
23
28
|
- `AV::Constants::RESTRICTIONS`
|
|
24
29
|
- `AV::Constants::RESTRICTIONS_NONE`
|
|
@@ -8,7 +8,7 @@ module BerkeleyLibrary
|
|
|
8
8
|
SUMMARY = 'UC Berkeley Library audio/video core code'.freeze
|
|
9
9
|
DESCRIPTION = 'Gem for UC Berkeley Library shared audio/video code'.freeze
|
|
10
10
|
LICENSE = 'MIT'.freeze
|
|
11
|
-
VERSION = '0.4.
|
|
11
|
+
VERSION = '0.4.3'.freeze
|
|
12
12
|
HOMEPAGE = 'https://github.com/BerkeleyLibrary/av-core'.freeze
|
|
13
13
|
|
|
14
14
|
private_class_method :new
|
|
@@ -22,9 +22,9 @@ module BerkeleyLibrary
|
|
|
22
22
|
id_field = id_field_for(record_id)
|
|
23
23
|
query_string = URI.encode_www_form(
|
|
24
24
|
'p' => "#{id_field}:\"#{record_id}\"",
|
|
25
|
-
'
|
|
25
|
+
'format' => 'xml'
|
|
26
26
|
)
|
|
27
|
-
URIs.append(base_uri, 'search', '?', query_string)
|
|
27
|
+
URIs.append(base_uri, 'api/v1/search', '?', query_string)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
protected
|
|
@@ -12,7 +12,11 @@ module BerkeleyLibrary
|
|
|
12
12
|
DEFAULT_USER_AGENT = "#{Core::ModuleInfo::NAME} #{Core::ModuleInfo::VERSION} (#{Core::ModuleInfo::HOMEPAGE})".freeze
|
|
13
13
|
|
|
14
14
|
def do_get(uri, ignore_errors: false)
|
|
15
|
-
|
|
15
|
+
headers = { user_agent: DEFAULT_USER_AGENT }
|
|
16
|
+
if uri.to_s.start_with?(BerkeleyLibrary::AV::Config.tind_base_uri.to_s) && ENV['LIT_TIND_API_KEY']
|
|
17
|
+
headers[:authorization] = "Token #{ENV['LIT_TIND_API_KEY']}"
|
|
18
|
+
end
|
|
19
|
+
body = URIs.get(uri, headers:)
|
|
16
20
|
body && body.scrub
|
|
17
21
|
rescue RestClient::Exception
|
|
18
22
|
raise unless ignore_errors
|
|
@@ -183,7 +183,7 @@ module BerkeleyLibrary
|
|
|
183
183
|
it 'injects a TIND URL if not present (1/2)' do
|
|
184
184
|
tind_035 = '(miscmat)00615'
|
|
185
185
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
186
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
186
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
187
187
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
188
188
|
metadata = Metadata.for_record(record_id: tind_035)
|
|
189
189
|
|
|
@@ -200,7 +200,7 @@ module BerkeleyLibrary
|
|
|
200
200
|
it 'injects a TIND URL if not present (2/2)' do
|
|
201
201
|
tind_035 = 'physcolloquia-bk00169017b'
|
|
202
202
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
203
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
203
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
204
204
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
205
205
|
metadata = Metadata.for_record(record_id: tind_035)
|
|
206
206
|
|
|
@@ -218,7 +218,7 @@ module BerkeleyLibrary
|
|
|
218
218
|
it 'works for TIND records with OskiCat URLs' do
|
|
219
219
|
tind_035 = '(pacradio)00107'
|
|
220
220
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
221
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
221
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
222
222
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
223
223
|
metadata = Metadata.for_record(record_id: tind_035)
|
|
224
224
|
|
|
@@ -239,7 +239,7 @@ module BerkeleyLibrary
|
|
|
239
239
|
it 'works for TIND-only records' do
|
|
240
240
|
tind_035 = 'physcolloquia-bk00169017b'
|
|
241
241
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
242
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
242
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
243
243
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
244
244
|
metadata = Metadata.for_record(record_id: tind_035)
|
|
245
245
|
|
|
@@ -259,7 +259,7 @@ module BerkeleyLibrary
|
|
|
259
259
|
it 'returns the values' do
|
|
260
260
|
tind_035 = 'physcolloquia-bk00169017b'
|
|
261
261
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
262
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
262
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
263
263
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
264
264
|
metadata = Metadata.for_record(record_id: tind_035)
|
|
265
265
|
|
|
@@ -161,7 +161,7 @@ module BerkeleyLibrary
|
|
|
161
161
|
|
|
162
162
|
before do
|
|
163
163
|
AV::Config.tind_base_uri = 'https://digicoll.lib.berkeley.edu'
|
|
164
|
-
@record_url = 'https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22%28pacradio%2900107%22&
|
|
164
|
+
@record_url = 'https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22%28pacradio%2900107%22&format=xml'
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
after do
|
|
@@ -46,7 +46,7 @@ module BerkeleyLibrary
|
|
|
46
46
|
it 'returns a player URI based on the record ID for TIND records' do
|
|
47
47
|
tind_035 = '(pacradio)01469'
|
|
48
48
|
marc_xml = File.read("spec/data/record-#{tind_035}.xml")
|
|
49
|
-
search_url = "https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&
|
|
49
|
+
search_url = "https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22#{CGI.escape(tind_035)}%22&format=xml"
|
|
50
50
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
51
51
|
|
|
52
52
|
collection = 'Pacifica'
|
|
@@ -145,7 +145,7 @@ module BerkeleyLibrary
|
|
|
145
145
|
|
|
146
146
|
it 'returns the TIND ID for TIND records' do
|
|
147
147
|
marc_xml = File.read('spec/data/record-(pacradio)01469.xml')
|
|
148
|
-
search_url = 'https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22%28pacradio%2901469%22&
|
|
148
|
+
search_url = 'https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22%28pacradio%2901469%22&format=xml'
|
|
149
149
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
150
150
|
|
|
151
151
|
record = Record.from_metadata(
|
|
@@ -168,7 +168,7 @@ module BerkeleyLibrary
|
|
|
168
168
|
it 'returns nil for TIND records with no bib number' do
|
|
169
169
|
tind_id = '(clir)00020'
|
|
170
170
|
marc_xml = File.read('spec/data/record-(clir)00020.xml')
|
|
171
|
-
search_url = 'https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22%28clir%2900020%22&
|
|
171
|
+
search_url = 'https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22%28clir%2900020%22&format=xml'
|
|
172
172
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
173
173
|
|
|
174
174
|
record = Record.from_metadata(collection: 'Video-Public-Bancroft', record_id: tind_id)
|
|
@@ -179,7 +179,7 @@ module BerkeleyLibrary
|
|
|
179
179
|
describe :from_metadata do
|
|
180
180
|
it 'loads the metadata' do
|
|
181
181
|
marc_xml = File.read('spec/data/record-(pacradio)01469.xml')
|
|
182
|
-
search_url = 'https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22%28pacradio%2901469%22&
|
|
182
|
+
search_url = 'https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22%28pacradio%2901469%22&format=xml'
|
|
183
183
|
stub_request(:get, search_url).to_return(status: 200, body: marc_xml)
|
|
184
184
|
|
|
185
185
|
record = Record.from_metadata(collection: 'Pacifica', record_id: '(pacradio)01469')
|
|
@@ -223,7 +223,7 @@ module BerkeleyLibrary
|
|
|
223
223
|
end
|
|
224
224
|
|
|
225
225
|
it "raises #{AV::RecordNotFound} if the record cannot be found" do
|
|
226
|
-
search_url = 'https://digicoll.lib.berkeley.edu/search?p=035__a%3A%22%28pacradio%2901469%22&
|
|
226
|
+
search_url = 'https://digicoll.lib.berkeley.edu/api/v1/search?p=035__a%3A%22%28pacradio%2901469%22&format=xml'
|
|
227
227
|
stub_request(:get, search_url).to_return(status: 404)
|
|
228
228
|
expect do
|
|
229
229
|
Record.from_metadata(
|
|
@@ -24,6 +24,32 @@ module BerkeleyLibrary
|
|
|
24
24
|
result = AV::Util.do_get(url, ignore_errors: true)
|
|
25
25
|
expect(result).to be_nil
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
it 'includes authorization header for TIND requests if LIT_TIND_API_KEY is set' do
|
|
29
|
+
expected_ua = Util::DEFAULT_USER_AGENT
|
|
30
|
+
expected_auth = 'Token some-long-api-token-value'
|
|
31
|
+
|
|
32
|
+
# expect do_get to call URIs.get with the correct headers
|
|
33
|
+
# but we don't need to actually perform the request
|
|
34
|
+
allow(BerkeleyLibrary::Util::URIs).to receive(:get).and_return('<response></response>')
|
|
35
|
+
allow(AV::Config).to receive(:tind_base_uri).and_return(URI('https://tind.example.edu/'))
|
|
36
|
+
url = "#{AV::Config.tind_base_uri}/some/api/endpoint"
|
|
37
|
+
ENV['LIT_TIND_API_KEY'] = 'some-long-api-token-value'
|
|
38
|
+
AV::Util.do_get(url)
|
|
39
|
+
expect(BerkeleyLibrary::Util::URIs).to have_received(:get).with(url, headers: { user_agent: expected_ua, authorization: expected_auth })
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'does not include authorization header for non-TIND requests' do
|
|
43
|
+
expected_ua = Util::DEFAULT_USER_AGENT
|
|
44
|
+
|
|
45
|
+
# expect do_get to call URIs.get with the correct headers
|
|
46
|
+
# but we don't need to actually perform the request
|
|
47
|
+
allow(BerkeleyLibrary::Util::URIs).to receive(:get).and_return('<response></response>')
|
|
48
|
+
url = URI('https://alma.example.edu/some/api/endpoint')
|
|
49
|
+
ENV['LIT_TIND_API_KEY'] = nil
|
|
50
|
+
AV::Util.do_get(url)
|
|
51
|
+
expect(BerkeleyLibrary::Util::URIs).to have_received(:get).with(url, headers: { user_agent: expected_ua })
|
|
52
|
+
end
|
|
27
53
|
end
|
|
28
54
|
end
|
|
29
55
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: berkeley_library-av-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Moles
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2025-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: berkeley_library-logging
|
|
@@ -428,7 +428,7 @@ licenses:
|
|
|
428
428
|
- MIT
|
|
429
429
|
metadata:
|
|
430
430
|
rubygems_mfa_required: 'true'
|
|
431
|
-
post_install_message:
|
|
431
|
+
post_install_message:
|
|
432
432
|
rdoc_options: []
|
|
433
433
|
require_paths:
|
|
434
434
|
- lib
|
|
@@ -444,7 +444,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
444
444
|
version: '0'
|
|
445
445
|
requirements: []
|
|
446
446
|
rubygems_version: 3.4.19
|
|
447
|
-
signing_key:
|
|
447
|
+
signing_key:
|
|
448
448
|
specification_version: 4
|
|
449
449
|
summary: UC Berkeley Library audio/video core code
|
|
450
450
|
test_files:
|