relaton 1.9.3 → 1.9.7

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 -0
  9. data/spec/relaton/db_spec.rb +10 -0
  10. data/spec/relaton/registry_spec.rb +8 -0
  11. data/spec/relaton_spec.rb +19 -5
  12. data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +112 -0
  13. data/spec/vcr_cassetes/async_fetch.yml +1572 -1619
  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 +8 -8
  21. data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +98 -0
  22. data/spec/vcr_cassetes/iec_60050_102_2007.yml +28 -28
  23. data/spec/vcr_cassetes/iec_combined_included.yml +90 -88
  24. data/spec/vcr_cassetes/ieee_528_2019.yml +14 -14
  25. data/spec/vcr_cassetes/iho_b_11.yml +7 -7
  26. data/spec/vcr_cassetes/iso_111111119115_1.yml +2 -2
  27. data/spec/vcr_cassetes/iso_19115_1.yml +15 -15
  28. data/spec/vcr_cassetes/iso_19115_1_2.yml +32 -32
  29. data/spec/vcr_cassetes/iso_19115_all_parts.yml +16 -16
  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 +30 -30
  33. data/spec/vcr_cassetes/iso_combined_included.yml +32 -32
  34. data/spec/vcr_cassetes/itu_combined_included.yml +170 -170
  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 +30 -30
  41. data/spec/vcr_cassetes/w3c_json_ld11.yml +93 -138
  42. metadata +33 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3599c52bacdd454603dc095055338b4a89b8264ee9391fa2a2b25f1724a46e2
4
- data.tar.gz: aa64435911173af46c12a522b05d063c4cfa0644f1919c96ec3879f9b8f9af39
3
+ metadata.gz: daae758f0751cfb8c4682b4f74c4d67b4046290562d47e84bc7103df5da670d4
4
+ data.tar.gz: 1348bdfebcf234ac6b29c0ba5e09a357eb3d8885645671932d937a95e2528a91
5
5
  SHA512:
6
- metadata.gz: 74fc610b35697515cf2f925349ff9ad076c50a3ec8e0fa08a9cbfa3fc82217c32b2f5e2869af604a58e12f70898de41addade73971a6fae9085b56eb7b3b5ff0
7
- data.tar.gz: 8cda3116f9e84eb3f549dc1a4c5a74fb6957d4834d0cf140f587434f2b9ff84e7cae93946147b7151fa6cf1739f13aba1639f92c2f73fce552999e3a7dfe35fd
6
+ metadata.gz: 01c4d8fcc1c8a77e4425a87be0f28e5d178b758a1bedb19aaceacde9df7f9f138da4bd1df849d819d6ad2e6675a7e79479168ab9edce7800bd5491e4ee2e123d
7
+ data.tar.gz: 115ce0d39bf35ae82c973fc2043bc5f07d5b0d87ca5f6f1fc7e36cdc032c4e97c7aea9129d168c2e30f2073713f2d0128fd5d2f8de78eaa5f07344cb949723a4
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
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.3".freeze
2
+ VERSION = "1.9.7".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"
@@ -36,6 +37,7 @@ Gem::Specification.new do |spec|
36
37
  spec.add_dependency "relaton-cie", "~> 1.9.0"
37
38
  spec.add_dependency "relaton-ecma", "~> 1.9.0"
38
39
  spec.add_dependency "relaton-gb", "~> 1.9.0"
40
+ spec.add_dependency "relaton-iana", "~> 1.9.0"
39
41
  spec.add_dependency "relaton-iec", "~> 1.9.0"
40
42
  spec.add_dependency "relaton-ieee", "~> 1.9.0"
41
43
  spec.add_dependency "relaton-ietf", "~> 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(5) { queue.pop }
195
+ end
196
+ end
187
197
  end
188
198
 
189
199
  context "fetch documents form static cache" do
@@ -87,6 +87,14 @@ RSpec.describe Relaton::Registry do
87
87
  it "CEN" do
88
88
  expect(Relaton::Registry.instance.by_type("CEN")).to be_instance_of RelatonCen::Processor
89
89
  end
90
+
91
+ it "IANA" do
92
+ expect(Relaton::Registry.instance.by_type("IANA")).to be_instance_of RelatonIana::Processor
93
+ end
94
+
95
+ it "3GPP" do
96
+ expect(Relaton::Registry.instance.by_type("3GPP")).to be_instance_of Relaton3gpp::Processor
97
+ end
90
98
  end
91
99
 
92
100
  it "find processot by dataset" do
data/spec/relaton_spec.rb CHANGED
@@ -246,13 +246,13 @@ RSpec.describe Relaton::Db do
246
246
  end
247
247
 
248
248
  it "get W3C reference" do
249
- w3c_fr = /\.relaton\/w3c\/bibliography\.yml/
250
- expect(File).to receive(:exist?).with(w3c_fr).and_return false
251
- expect(File).to receive(:exist?).and_call_original.at_least :once
252
- expect(File).to receive(:write).with w3c_fr, kind_of(String), kind_of(Hash)
249
+ # w3c_fr = /\.relaton\/w3c\/bibliography\.yml/
250
+ # expect(File).to receive(:exist?).with(w3c_fr).and_return false
251
+ # expect(File).to receive(:exist?).and_call_original.at_least :once
252
+ # expect(File).to receive(:write).with w3c_fr, kind_of(String), kind_of(Hash)
253
253
  # expect(File).to receive(:write).and_call_original.at_least :once
254
254
  VCR.use_cassette "w3c_json_ld11" do
255
- bib = @db.fetch "W3C JSON-LD 1.1", nil, {}
255
+ bib = @db.fetch "W3C REC-json-ld11-20200716", nil, {}
256
256
  expect(bib).to be_instance_of RelatonW3c::W3cBibliographicItem
257
257
  end
258
258
  end
@@ -299,6 +299,20 @@ RSpec.describe Relaton::Db do
299
299
  end
300
300
  end
301
301
 
302
+ it "get IANA reference" do
303
+ VCR.use_cassette "iana_service_names_port_numbers" do
304
+ bib = @db.fetch "IANA service-names-port-numbers"
305
+ expect(bib).to be_instance_of RelatonBib::BibliographicItem
306
+ end
307
+ end
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
+
302
316
  context "get combined documents" do
303
317
  context "ISO" do
304
318
  it "included" do
@@ -0,0 +1,112 @@
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
+ - '457'
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/"5d2f491d96c7faf0fe7b769cefadb3f744327d06d70da694edc1386de14fee7a"
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
+ - 45B8:60DB:8C2BC7:933607:61B60A00
45
+ Accept-Ranges:
46
+ - bytes
47
+ Date:
48
+ - Sun, 12 Dec 2021 14:41:05 GMT
49
+ Via:
50
+ - 1.1 varnish
51
+ X-Served-By:
52
+ - cache-sof1510064-SOF
53
+ X-Cache:
54
+ - MISS
55
+ X-Cache-Hits:
56
+ - '0'
57
+ X-Timer:
58
+ - S1639320065.893291,VS0,VE196
59
+ Vary:
60
+ - Authorization,Accept-Encoding,Origin
61
+ Access-Control-Allow-Origin:
62
+ - "*"
63
+ X-Fastly-Request-Id:
64
+ - 93f34b3047b3a5fc6b81f1b6684eeb810830e9b0
65
+ Expires:
66
+ - Sun, 12 Dec 2021 14:46:05 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
+ - id: '2261'
87
+ type: rapporteurId
88
+ docnumber: TR 00.01U:UMTS/3.0.0
89
+ language: en
90
+ script: Latn
91
+ docstatus:
92
+ stage:
93
+ value: withdrawn
94
+ fetched: '2021-12-09'
95
+ doctype: TR
96
+ editorialgroup:
97
+ name: SMG5
98
+ type: prime
99
+ radiotechnology: 3G
100
+ release:
101
+ version2g: '3'
102
+ version3g: '3'
103
+ defunct: true
104
+ freeze_meeting: SMG-28
105
+ freeze_stage1_meeting: SMG-28
106
+ freeze_stage2_meeting: SMG-28
107
+ freeze_stage3_meeting: SMG-28
108
+ close_meeting: SP-28
109
+ project_end: '1999-02-12'
110
+ http_version:
111
+ recorded_at: Sun, 12 Dec 2021 14:41:05 GMT
112
+ recorded_with: VCR 5.1.0