relaton 1.9.4 → 1.9.8

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -0
  3. data/docs/README.adoc +1 -0
  4. data/lib/relaton/db.rb +15 -7
  5. data/lib/relaton/registry.rb +1 -1
  6. data/lib/relaton/version.rb +1 -1
  7. data/lib/relaton/workers_pool.rb +3 -3
  8. data/relaton.gemspec +2 -1
  9. data/spec/relaton/db_spec.rb +10 -0
  10. data/spec/relaton/registry_spec.rb +4 -0
  11. data/spec/relaton_spec.rb +9 -2
  12. data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +121 -0
  13. data/spec/vcr_cassetes/async_fetch.yml +1230 -1230
  14. data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +11 -11
  15. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +14 -14
  16. data/spec/vcr_cassetes/cen_en_10160_1999.yml +29 -29
  17. data/spec/vcr_cassetes/cie_001_1980.yml +7 -7
  18. data/spec/vcr_cassetes/ecma_6.yml +7 -7
  19. data/spec/vcr_cassetes/fisp_140.yml +6 -6
  20. data/spec/vcr_cassetes/gb_t_20223_2006.yml +9 -9
  21. data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +35 -12
  22. data/spec/vcr_cassetes/iec_60050_102_2007.yml +28 -28
  23. data/spec/vcr_cassetes/iec_combined_included.yml +92 -90
  24. data/spec/vcr_cassetes/ieee_528_2019.yml +15 -15
  25. data/spec/vcr_cassetes/iho_b_11.yml +7 -7
  26. data/spec/vcr_cassetes/iso_111111119115_1.yml +115 -2
  27. data/spec/vcr_cassetes/iso_19115_1.yml +14 -14
  28. data/spec/vcr_cassetes/iso_19115_1_2.yml +32 -32
  29. data/spec/vcr_cassetes/iso_19115_all_parts.yml +17 -17
  30. data/spec/vcr_cassetes/iso_19133_2005.yml +14 -14
  31. data/spec/vcr_cassetes/iso_cd_14093.yml +15 -15
  32. data/spec/vcr_cassetes/iso_combined_applied.yml +31 -31
  33. data/spec/vcr_cassetes/iso_combined_included.yml +30 -30
  34. data/spec/vcr_cassetes/itu_combined_included.yml +177 -177
  35. data/spec/vcr_cassetes/ogc_19_025r1.yml +7 -7
  36. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +4 -4
  37. data/spec/vcr_cassetes/rfc_8341.yml +7 -7
  38. data/spec/vcr_cassetes/sp_800_38b.yml +6 -6
  39. data/spec/vcr_cassetes/threads_from_env.yml +448 -0
  40. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +31 -31
  41. data/spec/vcr_cassetes/w3c_json_ld11.yml +10 -10
  42. metadata +22 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 250207e6a1eaa872380c5b959d727be909d99874797832a4288a058259e96bb2
4
- data.tar.gz: df287ddd627ff37b9ecbcd3207a4eb8216690b9d3df9db2a9b31ff2a3648a363
3
+ metadata.gz: b61ad383992583e255cf71895ebc1304432a0c3ffd1df095fd89938b3bf574c3
4
+ data.tar.gz: e9c36b287cb349c5d027833b8e9b022bde3c77a19b1c5accf73dc1ebcbb53dea
5
5
  SHA512:
6
- metadata.gz: 75eecbdaa0c5d6bc954b790eecba13d987974be787181332343b23558534543fb4107366444fe49aab6fea2e54830dc46051449f482d494a9afad0f3bd502abf
7
- data.tar.gz: 159b1e402d0b8521634598412edb68cf8e468009d24e96be56f678df98a62099b568d8de04c77a10ed72faed770f4d87d536fd1e152fa24f39786540d5e51643
6
+ metadata.gz: 52eb6e058e7eb0a995c97eded558d4323bc320d2aa4a6021c5e7b477433e1319fa07d99f4cb93513d1b9e88422d9e59dbe8a35995a4a29ddef6ce1ca40cc54ef
7
+ data.tar.gz: a84f478f11b661459e4c6477de8d2ca4e84ebd5d43489238480de3b0ea48833292935f96eeaff6ac5d4a58cb7e51c9450b413ae78224a53f07d05a7fdeca411a
data/.rubocop.yml CHANGED
@@ -2,6 +2,8 @@
2
2
  # https://github.com/riboseinc/oss-guides
3
3
  # All project-specific additions and overrides should be specified in this file.
4
4
 
5
+ require: rubocop-rails
6
+
5
7
  inherit_from:
6
8
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
9
  AllCops:
data/docs/README.adoc CHANGED
@@ -178,6 +178,7 @@ x = db.fetch_db("ISO 5749")
178
178
  => nil
179
179
 
180
180
  # Fetching asynchronously
181
+ # RELATON_FETCH_PARALLEL environment variable can be used to ovveride default number of parallel fetches
181
182
 
182
183
  # prepare queue for results
183
184
  results = Queue.new
data/lib/relaton/db.rb CHANGED
@@ -17,6 +17,7 @@ module Relaton
17
17
  @static_db = open_cache_biblio File.expand_path("../relaton/static_cache",
18
18
  __dir__)
19
19
  @queues = {}
20
+ @semaphore = Mutex.new
20
21
  end
21
22
 
22
23
  # Move global or local caches to anothe dirs
@@ -104,7 +105,8 @@ module Relaton
104
105
  if stdclass
105
106
  unless @queues[stdclass]
106
107
  processor = @registry.processors[stdclass]
107
- wp = WorkersPool.new(processor.threads) do |args|
108
+ threads = ENV["RELATON_FETCH_PARALLEL"]&.to_i || processor.threads
109
+ wp = WorkersPool.new(threads) do |args|
108
110
  args[3].call fetch(*args[0..2])
109
111
  rescue RelatonBib::RequestError => e
110
112
  args[3].call e
@@ -375,14 +377,20 @@ module Relaton
375
377
  return bib_retval(bibentry, stdclass)
376
378
  end
377
379
 
378
- db.delete(id) unless db.valid_entry?(id, year)
380
+ @semaphore.synchronize do
381
+ db.delete(id) unless db.valid_entry?(id, year)
382
+ end
379
383
  if altdb
380
384
  return bib_retval(altdb[id], stdclass) if opts[:fetch_db]
381
385
 
382
- db.clone_entry id, altdb if altdb.valid_entry? id, year
383
- db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db,
384
- id: id)
385
- altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
386
+ @semaphore.synchronize do
387
+ db.clone_entry id, altdb if altdb.valid_entry? id, year
388
+ end
389
+ entry = new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id) unless db[id]
390
+ @semaphore.synchronize do
391
+ db[id] ||= entry
392
+ altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
393
+ end
386
394
  else
387
395
  return bib_retval(db[id], stdclass) if opts[:fetch_db]
388
396
 
@@ -413,7 +421,7 @@ module Relaton
413
421
  if args[:db] && args[:id] &&
414
422
  bib_id && args[:id] !~ %r{#{Regexp.quote("(#{bib_id})")}}
415
423
  bid = std_id(bib.docidentifier.first.id, nil, {}, stdclass).first
416
- args[:db][bid] ||= bib_entry bib
424
+ @semaphore.synchronize { args[:db][bid] ||= bib_entry bib }
417
425
  "redirection #{bid}"
418
426
  else bib_entry bib
419
427
  end
@@ -9,7 +9,7 @@ module Relaton
9
9
  relaton_gb relaton_iec relaton_ietf relaton_iso relaton_itu relaton_nist
10
10
  relaton_ogc relaton_calconnect relaton_omg relaton_un relaton_w3c
11
11
  relaton_ieee relaton_iho relaton_bipm relaton_ecma relaton_cie relaton_bsi
12
- relaton_cen relaton_iana
12
+ relaton_cen relaton_iana relaton_3gpp
13
13
  ].freeze
14
14
 
15
15
  include Singleton
@@ -1,3 +1,3 @@
1
1
  module Relaton
2
- VERSION = "1.9.4".freeze
2
+ VERSION = "1.9.8".freeze
3
3
  end
@@ -4,9 +4,9 @@ module Relaton
4
4
  # Workers poll.
5
5
  class WorkersPool
6
6
  def initialize(workers = 2, &_block)
7
- num_workers = workers < 2 ? 2 : workers
8
- @queue = SizedQueue.new(num_workers * 2)
9
- @threads = Array.new num_workers do
7
+ # num_workers = workers < 2 ? 2 : workers
8
+ @queue = SizedQueue.new(workers * 2)
9
+ @threads = Array.new workers do
10
10
  Thread.new do
11
11
  while item = @queue.pop; yield(item) end
12
12
  end
data/relaton.gemspec CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
30
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
+ spec.add_dependency "relaton-3gpp", "~> 1.9.0"
32
33
  spec.add_dependency "relaton-bipm", "~> 1.9.0"
33
34
  spec.add_dependency "relaton-bsi", "~> 1.9.0"
34
35
  spec.add_dependency "relaton-calconnect", "~> 1.9.0"
@@ -39,7 +40,7 @@ Gem::Specification.new do |spec|
39
40
  spec.add_dependency "relaton-iana", "~> 1.9.0"
40
41
  spec.add_dependency "relaton-iec", "~> 1.9.0"
41
42
  spec.add_dependency "relaton-ieee", "~> 1.9.0"
42
- spec.add_dependency "relaton-ietf", "~> 1.9.0"
43
+ spec.add_dependency "relaton-ietf", ">= 1.9.7"
43
44
  spec.add_dependency "relaton-iho", "~> 1.9.0"
44
45
  spec.add_dependency "relaton-iso", "~> 1.9.0"
45
46
  spec.add_dependency "relaton-itu", "~> 1.9.0"
@@ -184,6 +184,16 @@ RSpec.describe Relaton::Db do
184
184
  end
185
185
  expect(result).to be_nil
186
186
  end
187
+
188
+ it "use threads number from RELATON_FETCH_PARALLEL" do
189
+ expect(ENV).to receive(:[]).with("RELATON_FETCH_PARALLEL").and_return(1)
190
+ allow(ENV).to receive(:[]).and_call_original
191
+ expect(Relaton::WorkersPool).to receive(:new).with(1).and_call_original
192
+ VCR.use_cassette "threads_from_env" do
193
+ db.fetch_async("ITU-T G.993.5") { |r| queue << r }
194
+ Timeout.timeout(50) { queue.pop }
195
+ end
196
+ end
187
197
  end
188
198
 
189
199
  context "fetch documents form static cache" do
@@ -91,6 +91,10 @@ RSpec.describe Relaton::Registry do
91
91
  it "IANA" do
92
92
  expect(Relaton::Registry.instance.by_type("IANA")).to be_instance_of RelatonIana::Processor
93
93
  end
94
+
95
+ it "3GPP" do
96
+ expect(Relaton::Registry.instance.by_type("3GPP")).to be_instance_of Relaton3gpp::Processor
97
+ end
94
98
  end
95
99
 
96
100
  it "find processot by dataset" do
data/spec/relaton_spec.rb CHANGED
@@ -196,10 +196,10 @@ RSpec.describe Relaton::Db do
196
196
  expect(File.exist?("testcache2")).to be true
197
197
  testcache = Relaton::DbCache.new "testcache"
198
198
  expect(testcache["IETF(RFC 8341)"]).to include "<docidentifier "\
199
- "type=\"IETF\">RFC 8341</docidentifier>"
199
+ "type=\"IETF\" scope=\"anchor\">RFC8341</docidentifier>"
200
200
  testcache = Relaton::DbCache.new "testcache2"
201
201
  expect(testcache["IETF(RFC 8341)"]).to include "<docidentifier "\
202
- "type=\"IETF\">RFC 8341</docidentifier>"
202
+ "type=\"IETF\" scope=\"anchor\">RFC8341</docidentifier>"
203
203
  end
204
204
  end
205
205
 
@@ -306,6 +306,13 @@ RSpec.describe Relaton::Db do
306
306
  end
307
307
  end
308
308
 
309
+ it "get 3GPP reference" do
310
+ VCR.use_cassette "3gpp_tr_00_01u_umts_3_0_0" do
311
+ bib = @db.fetch "3GPP TR 00.01U:UMTS/3.0.0"
312
+ expect(bib).to be_instance_of Relaton3gpp::BibliographicItem
313
+ end
314
+ end
315
+
309
316
  context "get combined documents" do
310
317
  context "ISO" do
311
318
  it "included" do
@@ -0,0 +1,121 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://raw.githubusercontent.com/relaton/relaton-data-3gpp/main/data/TR_00.01U_UMTS_3.0.0.yaml
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - raw.githubusercontent.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Connection:
24
+ - keep-alive
25
+ Content-Length:
26
+ - '549'
27
+ Cache-Control:
28
+ - max-age=300
29
+ Content-Security-Policy:
30
+ - default-src 'none'; style-src 'unsafe-inline'; sandbox
31
+ Content-Type:
32
+ - text/plain; charset=utf-8
33
+ Etag:
34
+ - W/"c70f6628f95ac3979a5237c54995637171f2f370a6090b835ecd229ef159fb99"
35
+ Strict-Transport-Security:
36
+ - max-age=31536000
37
+ X-Content-Type-Options:
38
+ - nosniff
39
+ X-Frame-Options:
40
+ - deny
41
+ X-Xss-Protection:
42
+ - 1; mode=block
43
+ X-Github-Request-Id:
44
+ - 5F84:9E53:173E127:186CA31:61CAF6F2
45
+ Accept-Ranges:
46
+ - bytes
47
+ Date:
48
+ - Tue, 28 Dec 2021 11:37:22 GMT
49
+ Via:
50
+ - 1.1 varnish
51
+ X-Served-By:
52
+ - cache-sof1510075-SOF
53
+ X-Cache:
54
+ - MISS
55
+ X-Cache-Hits:
56
+ - '0'
57
+ X-Timer:
58
+ - S1640691442.275517,VS0,VE245
59
+ Vary:
60
+ - Authorization,Accept-Encoding,Origin
61
+ Access-Control-Allow-Origin:
62
+ - "*"
63
+ X-Fastly-Request-Id:
64
+ - f1d9e96d0649f362bbac0579ea916a9009733903
65
+ Expires:
66
+ - Tue, 28 Dec 2021 11:42:22 GMT
67
+ Source-Age:
68
+ - '0'
69
+ body:
70
+ encoding: ASCII-8BIT
71
+ string: |
72
+ ---
73
+ id: 3GPPTR00.01U-UMTS/3.0.0
74
+ title:
75
+ type: main
76
+ content: Work programme for the standardization of Universal Mobile Telecommunications
77
+ System (UMTS)
78
+ format: text/plain
79
+ link:
80
+ content: http://www.3gpp.org/ftp/Specs/archive/00_series/00.01U/0001U-300.zip
81
+ type: src
82
+ type: standard
83
+ docid:
84
+ id: 3GPP TR 00.01U:UMTS/3.0.0
85
+ type: 3GPP
86
+ docnumber: TR 00.01U:UMTS/3.0.0
87
+ contributor:
88
+ person:
89
+ name:
90
+ completename:
91
+ content: RAPELI, Juha
92
+ language: en
93
+ script: Latn
94
+ affiliation:
95
+ organization:
96
+ name: PHILIPS CONSUMER COMMUNICATION
97
+ role: author
98
+ language: en
99
+ script: Latn
100
+ docstatus:
101
+ stage:
102
+ value: withdrawn
103
+ fetched: '2021-12-24'
104
+ doctype: TR
105
+ editorialgroup:
106
+ name: SMG5
107
+ type: prime
108
+ radiotechnology: 3G
109
+ release:
110
+ version2g: '3'
111
+ version3g: '3'
112
+ defunct: true
113
+ freeze_meeting: SMG-28
114
+ freeze_stage1_meeting: SMG-28
115
+ freeze_stage2_meeting: SMG-28
116
+ freeze_stage3_meeting: SMG-28
117
+ close_meeting: SP-28
118
+ project_end: '1999-02-12'
119
+ http_version:
120
+ recorded_at: Tue, 28 Dec 2021 11:37:22 GMT
121
+ recorded_with: VCR 5.1.0