relaton 1.12.0 → 1.12.1
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/lib/relaton/db.rb +45 -27
- data/lib/relaton/db_cache.rb +7 -1
- data/lib/relaton/version.rb +1 -1
- data/spec/relaton/db_spec.rb +34 -0
- data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +7 -7
- data/spec/vcr_cassetes/async_fetch.yml +1343 -1343
- data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +10 -10
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +8 -8
- data/spec/vcr_cassetes/cie_001_1980.yml +10 -9
- data/spec/vcr_cassetes/ecma_6.yml +47 -16
- data/spec/vcr_cassetes/en_10160_1999.yml +27 -27
- data/spec/vcr_cassetes/fisp_140.yml +6 -6
- data/spec/vcr_cassetes/gb_t_20223_2006.yml +6 -6
- data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +10 -13
- data/spec/vcr_cassetes/iec_60050_102_2007.yml +33 -43
- data/spec/vcr_cassetes/iec_combined_included.yml +95 -105
- data/spec/vcr_cassetes/ieee_528_2019.yml +1164 -1485
- data/spec/vcr_cassetes/iho_b_11.yml +7 -7
- data/spec/vcr_cassetes/iso_111111119115_1.yml +2 -2
- data/spec/vcr_cassetes/iso_19115_1.yml +13 -13
- data/spec/vcr_cassetes/iso_19115_1_2.yml +25 -25
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +12 -12
- data/spec/vcr_cassetes/iso_19133_2005.yml +13 -13
- data/spec/vcr_cassetes/iso_combined_applied.yml +27 -27
- data/spec/vcr_cassetes/iso_combined_included.yml +28 -28
- data/spec/vcr_cassetes/iso_dis_14093.yml +14 -14
- data/spec/vcr_cassetes/itu_combined_included.yml +168 -168
- data/spec/vcr_cassetes/oasis_amqp_core_types_v1_0_pt1.yml +9 -9
- data/spec/vcr_cassetes/ogc_19_025r1.yml +7 -7
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +4 -4
- data/spec/vcr_cassetes/rfc_8341.yml +11 -11
- data/spec/vcr_cassetes/sp_800_38b.yml +6 -6
- data/spec/vcr_cassetes/threads_from_env.yml +59 -59
- data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +31 -29
- data/spec/vcr_cassetes/w3c_json_ld11.yml +19 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8299cf7ea6a28e344f438461d16233fe9acd733bc00441583ce9768c702b15fa
|
4
|
+
data.tar.gz: 28d87384bb3b763981ae98902b144236254b7cce20c3d608ef746be679b0661a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5720aed26b5585b6673d92fd8c99fbae0883689c254344d5dbad5549a157388bd6422a2550942eb58a8d32f1c2d0aeafd6485de55274c0c02271ec5f87661405
|
7
|
+
data.tar.gz: 45fca34e30fe15699b9b3933f4060c877d54947ae31c5bc70ff05812b654c0876175eedda1d71ef16755a4db02a797c30199cd2128d081ae46b186a4939964f5
|
data/lib/relaton/db.rb
CHANGED
@@ -208,7 +208,7 @@ module Relaton
|
|
208
208
|
end
|
209
209
|
|
210
210
|
# @param file [String] file path
|
211
|
-
# @param content [String] content in XML or
|
211
|
+
# @param content [String] content in XML or YAML format
|
212
212
|
# @param edition [String, nil] edition to filter
|
213
213
|
# @param year [Integer, nil] year to filter
|
214
214
|
# @return [BibliographicItem, nil]
|
@@ -305,8 +305,10 @@ module Relaton
|
|
305
305
|
[prefix, code]
|
306
306
|
end
|
307
307
|
|
308
|
+
#
|
308
309
|
# @param entry [String] XML string
|
309
310
|
# @param stdclass [Symbol]
|
311
|
+
#
|
310
312
|
# @return [nil, RelatonBib::BibliographicItem,
|
311
313
|
# RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
|
312
314
|
# RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
|
@@ -316,9 +318,7 @@ module Relaton
|
|
316
318
|
# RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
|
317
319
|
# RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
|
318
320
|
def bib_retval(entry, stdclass)
|
319
|
-
|
320
|
-
else @registry.processors[stdclass].from_xml(entry)
|
321
|
-
end
|
321
|
+
@registry.processors[stdclass].from_xml(entry) if entry
|
322
322
|
end
|
323
323
|
|
324
324
|
# @param code [String]
|
@@ -346,8 +346,7 @@ module Relaton
|
|
346
346
|
if db.nil?
|
347
347
|
return if opts[:fetch_db]
|
348
348
|
|
349
|
-
bibentry = new_bib_entry(searchcode, year, opts, stdclass
|
350
|
-
id: id)
|
349
|
+
bibentry = new_bib_entry(searchcode, year, opts, stdclass)
|
351
350
|
return bib_retval(bibentry, stdclass)
|
352
351
|
end
|
353
352
|
|
@@ -360,45 +359,58 @@ module Relaton
|
|
360
359
|
@semaphore.synchronize do
|
361
360
|
db.clone_entry id, altdb if altdb.valid_entry? id, year
|
362
361
|
end
|
363
|
-
|
362
|
+
new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id)
|
364
363
|
@semaphore.synchronize do
|
365
|
-
db[id] ||= entry
|
366
364
|
altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
|
367
365
|
end
|
368
366
|
else
|
369
367
|
return bib_retval(db[id], stdclass) if opts[:fetch_db]
|
370
368
|
|
371
|
-
|
372
|
-
@semaphore.synchronize { db[id] ||= entry }
|
369
|
+
new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id)
|
373
370
|
end
|
374
371
|
bib_retval(db[id], stdclass)
|
375
372
|
end
|
376
373
|
|
374
|
+
#
|
375
|
+
# Create new bibliographic entry if it doesn't exist in database
|
376
|
+
#
|
377
377
|
# @param code [String]
|
378
378
|
# @param year [String]
|
379
379
|
#
|
380
380
|
# @param opts [Hash]
|
381
|
-
# @option opts [Boolean] :all_parts If all-parts reference is
|
382
|
-
#
|
383
|
-
#
|
381
|
+
# @option opts [Boolean, nil] :all_parts If true then all-parts reference is
|
382
|
+
# requested
|
383
|
+
# @option opts [Boolean, nil] :keep_year If true then undated reference
|
384
|
+
# should return actual reference with year
|
384
385
|
# @option opts [Integer] :retries (1) Number of network retries
|
385
386
|
#
|
386
387
|
# @param stdclass [Symbol]
|
387
|
-
# @param db [Relaton::DbCache,`
|
388
|
-
# @param id [String] docid
|
389
|
-
#
|
390
|
-
|
388
|
+
# @param db [Relaton::DbCache,`nil]
|
389
|
+
# @param id [String, nil] docid
|
390
|
+
#
|
391
|
+
# @return [String] bibliographic entry
|
392
|
+
# XML or "redirection ID" or "not_found YYYY-MM-DD" string
|
393
|
+
#
|
394
|
+
def new_bib_entry(code, year, opts, stdclass, **args) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
395
|
+
entry = @semaphore.synchronize { args[:db] && args[:db][args[:id]] }
|
396
|
+
if entry
|
397
|
+
Util.log "[relaton] (#{code}) not found." if entry&.match?(/^not_found/)
|
398
|
+
return entry
|
399
|
+
end
|
400
|
+
|
391
401
|
bib = net_retry(code, year, opts, stdclass, opts.fetch(:retries, 1))
|
392
402
|
bib_id = bib&.docidentifier&.first&.id
|
393
403
|
|
394
404
|
# when docid doesn't match bib's id then return a reference to bib's id
|
395
|
-
if args[:db] && args[:id] &&
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
405
|
+
entry = if args[:db] && args[:id] && bib_id && args[:id] !~ %r{#{Regexp.quote("(#{bib_id})")}}
|
406
|
+
bid = std_id(bib.docidentifier.first.id, nil, {}, stdclass).first
|
407
|
+
@semaphore.synchronize { args[:db][bid] ||= bib_entry bib }
|
408
|
+
"redirection #{bid}"
|
409
|
+
else bib_entry bib
|
410
|
+
end
|
411
|
+
return entry if args[:db].nil? || args[:id].nil?
|
412
|
+
|
413
|
+
@semaphore.synchronize { args[:db][args[:id]] ||= entry }
|
402
414
|
end
|
403
415
|
|
404
416
|
# @raise [RelatonBib::RequestError]
|
@@ -454,10 +466,16 @@ module Relaton
|
|
454
466
|
end
|
455
467
|
|
456
468
|
class << self
|
469
|
+
#
|
457
470
|
# Initialse and return relaton instance, with local and global cache names
|
458
|
-
#
|
459
|
-
#
|
460
|
-
#
|
471
|
+
#
|
472
|
+
# @param local_cache [String, nil] local cache name;
|
473
|
+
# "relaton" created if empty or nil
|
474
|
+
# @param global_cache [Boolean, nil] create global_cache if true
|
475
|
+
# @param flush_caches [Boolean, nil] flush caches if true
|
476
|
+
#
|
477
|
+
# @return [Relaton::Db] relaton DB instance
|
478
|
+
#
|
461
479
|
def init_bib_caches(**opts) # rubocop:disable Metrics/CyclomaticComplexity
|
462
480
|
globalname = global_bibliocache_name if opts[:global_cache]
|
463
481
|
localname = local_bibliocache_name(opts[:local_cache])
|
data/lib/relaton/db_cache.rb
CHANGED
@@ -45,7 +45,7 @@ module Relaton
|
|
45
45
|
end
|
46
46
|
|
47
47
|
prefix_dir = "#{@dir}/#{prefix(key)}"
|
48
|
-
FileUtils::mkdir_p prefix_dir
|
48
|
+
FileUtils::mkdir_p prefix_dir
|
49
49
|
set_version prefix_dir
|
50
50
|
file_safe_write "#{filename(key)}.#{ext(value)}", value
|
51
51
|
end
|
@@ -72,6 +72,12 @@ module Relaton
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
#
|
76
|
+
# Save entry from cache of `db` to this cache.
|
77
|
+
#
|
78
|
+
# @param [String] key key of the entry
|
79
|
+
# @param [Relaton::Db] db database
|
80
|
+
#
|
75
81
|
def clone_entry(key, db)
|
76
82
|
self[key] ||= db.get(key)
|
77
83
|
if (code = redirect? get(key))
|
data/lib/relaton/version.rb
CHANGED
data/spec/relaton/db_spec.rb
CHANGED
@@ -1,6 +1,40 @@
|
|
1
1
|
RSpec.describe Relaton::Db do
|
2
2
|
before(:each) { FileUtils.rm_rf %w[testcache testcache2] }
|
3
3
|
|
4
|
+
context "instance methods" do
|
5
|
+
subject { Relaton::Db.new nil, nil }
|
6
|
+
|
7
|
+
context "#search_edition_year" do
|
8
|
+
it "create bibitem from YAML content" do
|
9
|
+
h = { "docid" => [{ "id" => "ISO 123", type: "ISO", "primary" => true }] }
|
10
|
+
expect(YAML).to receive(:safe_load).with(:content).and_return h
|
11
|
+
item = subject.send :search_edition_year, "iso/item.yaml", :content, nil, nil
|
12
|
+
expect(item).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "#new_bib_entry" do
|
17
|
+
it "warn if cached entry is not_found" do
|
18
|
+
id = "ISO(ISO 123)"
|
19
|
+
db = double "db"
|
20
|
+
expect(db).to receive(:[]).with(id).and_return "not_found"
|
21
|
+
expect do
|
22
|
+
entry = subject.send :new_bib_entry, "ISO 123", nil, {}, :relaton_iso, db: db, id: id
|
23
|
+
expect(entry).to eq "not_found"
|
24
|
+
end.to output("[relaton] (ISO 123) not found.\n").to_stderr
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "class methods" do
|
30
|
+
it "::init_bib_caches" do
|
31
|
+
expect(FileUtils).to receive(:rm_rf).with(/\/\.relaton\/cache$/)
|
32
|
+
expect(FileUtils).to receive(:rm_rf).with(/testcache\/cache$/)
|
33
|
+
expect(Relaton::Db).to receive(:new).with(/\/\.relaton\/cache$/, /testcache\/cache$/)
|
34
|
+
Relaton::Db.init_bib_caches(global_cache: true, local_cache: "testcache", flush_caches: true)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
4
38
|
context "modifing database" do
|
5
39
|
let(:db) { Relaton::Db.new "testcache", "testcache2" }
|
6
40
|
|
@@ -41,29 +41,29 @@ http_interactions:
|
|
41
41
|
X-Xss-Protection:
|
42
42
|
- 1; mode=block
|
43
43
|
X-Github-Request-Id:
|
44
|
-
-
|
44
|
+
- 7D28:10C50:1BF854C:1DDFC0B:62BDDA6B
|
45
45
|
Accept-Ranges:
|
46
46
|
- bytes
|
47
47
|
Date:
|
48
|
-
- Thu,
|
48
|
+
- Thu, 30 Jun 2022 17:16:27 GMT
|
49
49
|
Via:
|
50
50
|
- 1.1 varnish
|
51
51
|
X-Served-By:
|
52
|
-
- cache-
|
52
|
+
- cache-vie6348-VIE
|
53
53
|
X-Cache:
|
54
54
|
- MISS
|
55
55
|
X-Cache-Hits:
|
56
56
|
- '0'
|
57
57
|
X-Timer:
|
58
|
-
-
|
58
|
+
- S1656609387.047148,VS0,VE235
|
59
59
|
Vary:
|
60
60
|
- Authorization,Accept-Encoding,Origin
|
61
61
|
Access-Control-Allow-Origin:
|
62
62
|
- "*"
|
63
63
|
X-Fastly-Request-Id:
|
64
|
-
-
|
64
|
+
- 93a267346ed97c52087b05f16495084f70b848e8
|
65
65
|
Expires:
|
66
|
-
- Thu,
|
66
|
+
- Thu, 30 Jun 2022 17:21:27 GMT
|
67
67
|
Source-Age:
|
68
68
|
- '0'
|
69
69
|
body:
|
@@ -143,5 +143,5 @@ http_interactions:
|
|
143
143
|
freeze_stage3_meeting: SMG-28
|
144
144
|
close_meeting: SP-28
|
145
145
|
project_end: '1999-02-12'
|
146
|
-
recorded_at: Thu,
|
146
|
+
recorded_at: Thu, 30 Jun 2022 17:16:27 GMT
|
147
147
|
recorded_with: VCR 6.1.0
|