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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79eeca0ec147ccba75f22e0589b58821fea176bf4aac9759cf18932fdad1deec
4
- data.tar.gz: 48b3c4299e46475cf14b1d764eb84198d98e0571af648008ec3b46775bab478d
3
+ metadata.gz: 971da7efa1200b726375ad3d140e194e430dd26f445640469bacebc9c9f2a7ea
4
+ data.tar.gz: 20d351482ba8d7d9e31ae026d250462abaca8e1285793737c51f1ce0f0fa6386
5
5
  SHA512:
6
- metadata.gz: dd767008eaf6d51c5a4e1ce94feeaa5951332c07eba79ce13101a4b79ecfa885c978f2d258946b6a5cb3ac66637ff1a7679aa18f0a44d4e42027f8f016fa87c3
7
- data.tar.gz: f35e8b193c25d40ce110d7031875ac254c7521c4618c11c689ca853a92445be233c66da21ae7b3f895fe2db28290227cb23fd6cf6f48d3aabf8ea124b37e689d
6
+ metadata.gz: ab15fd5cbb329b686211a62c6d653e2c8af16f6a1bb68414e8eedfcb183b5e4b0bbcecabff013d724051059540e6b5b7f42018733dbbf629e6e7c04e3fc36c95
7
+ data.tar.gz: 3b3f405f9c7abb05037963e51e92cf8a83d47ea80881d9d4ba4e96a0846a1d7d7a12a1a54f0a7b09aa6178b9f4c797e6e97755614b035e3c82976f46afe071a9
@@ -11,7 +11,7 @@ jobs:
11
11
 
12
12
  steps:
13
13
  - name: Check out repository
14
- uses: actions/checkout@v3
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@v3
27
+ uses: actions/upload-artifact@v4
28
28
  with:
29
- name: artifacts
29
+ name: artifacts-${{ matrix.os }}-${{ matrix.ruby }}
30
30
  path: artifacts/**
@@ -13,7 +13,7 @@ jobs:
13
13
  packages: write
14
14
 
15
15
  steps:
16
- - uses: actions/checkout@v3
16
+ - uses: actions/checkout@v4
17
17
 
18
18
  - name: Set up Ruby
19
19
  uses: ruby/setup-ruby@v1
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.2'.freeze
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
- 'of' => 'xm'
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
- body = URIs.get(uri, headers: { user_agent: DEFAULT_USER_AGENT })
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&of=xm"
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&of=xm"
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&of=xm"
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&of=xm"
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&of=xm"
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&of=xm'
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&of=xm"
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&of=xm'
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&of=xm'
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&of=xm'
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&of=xm'
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.2
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: 2024-10-10 00:00:00.000000000 Z
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: