relaton 1.9.1 → 1.9.5

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/docs/README.adoc +6 -5
  3. data/lib/relaton/db.rb +20 -9
  4. data/lib/relaton/registry.rb +1 -1
  5. data/lib/relaton/version.rb +1 -1
  6. data/relaton.gemspec +1 -0
  7. data/spec/relaton/db_spec.rb +4 -2
  8. data/spec/relaton/registry_spec.rb +4 -0
  9. data/spec/relaton_spec.rb +19 -12
  10. data/spec/vcr_cassetes/async_fetch.yml +1298 -1301
  11. data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +16 -20
  12. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +12 -12
  13. data/spec/vcr_cassetes/cen_en_10160_1999.yml +38 -38
  14. data/spec/vcr_cassetes/cie_001_1980.yml +8 -8
  15. data/spec/vcr_cassetes/ecma_6.yml +8 -8
  16. data/spec/vcr_cassetes/fisp_140.yml +6 -6
  17. data/spec/vcr_cassetes/gb_t_20223_2006.yml +6 -6
  18. data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +98 -0
  19. data/spec/vcr_cassetes/iec_60050_102_2007.yml +28 -28
  20. data/spec/vcr_cassetes/iec_combined_included.yml +94 -94
  21. data/spec/vcr_cassetes/ieee_528_2019.yml +19 -19
  22. data/spec/vcr_cassetes/iho_b_11.yml +8 -8
  23. data/spec/vcr_cassetes/iso_111111119115_1.yml +4 -4
  24. data/spec/vcr_cassetes/iso_19115_1.yml +17 -17
  25. data/spec/vcr_cassetes/iso_19115_1_2.yml +31 -31
  26. data/spec/vcr_cassetes/iso_19115_all_parts.yml +16 -16
  27. data/spec/vcr_cassetes/iso_19133_2005.yml +15 -15
  28. data/spec/vcr_cassetes/iso_cd_14093.yml +17 -17
  29. data/spec/vcr_cassetes/iso_combined_applied.yml +30 -30
  30. data/spec/vcr_cassetes/iso_combined_included.yml +33 -33
  31. data/spec/vcr_cassetes/itu_combined_included.yml +302 -186
  32. data/spec/vcr_cassetes/ogc_19_025r1.yml +17 -13159
  33. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +4 -4
  34. data/spec/vcr_cassetes/rfc_8341.yml +8 -8
  35. data/spec/vcr_cassetes/sp_800_38b.yml +6 -6
  36. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +34 -34
  37. data/spec/vcr_cassetes/w3c_json_ld11.yml +93 -138
  38. metadata +17 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d217d10128648eabc4dbeed414e931b6bb4bfcb9f51f74a11e49fdc0af513c6e
4
- data.tar.gz: 8eb975a6ebbbee9176de5b8f20e928cd6512b04c29c412f9b3dbe8006a6383f8
3
+ metadata.gz: d130b4485dbbf753e79494a4d586acf8fd85df120d4e2f1f35aa5c7380e05811
4
+ data.tar.gz: 1872fc4d88f29de709f81dfca39132d1c7fb244b9069661d8c7c4bca70a80977
5
5
  SHA512:
6
- metadata.gz: '09009418c348753e9ef2222c8887120dc12e467e83c30cc2053d711ff53726cd57885ea07cd8bc21d15bd7174415cd977e2f225db13c1451444e97cffa49ebfd'
7
- data.tar.gz: d6da61ac6052d8bd15fde15cd03916e6521f7ebc11e62ff4a51600316b2d058eb1ccd2a4378fbc6403625599e484d372bf077abbe27a6ebb169b4272add17aa5
6
+ metadata.gz: 1209e92a74b33acc54fcc1f391ec4beb1833cb2886375188f16ff8feb6c7c12c6f2e56978b3a77b442599fafa5bfbc4b4edfec6305e422afdb97cbc3e07190a0
7
+ data.tar.gz: f5a8c37e80afa5b80d7779735d54f685e9ba85a2bea6acd2ad3a4608b4e74d75c76248b6989af7df05df1f50f975b0ab85397355c90c2c2f50bc00159fc7d5fe
data/docs/README.adoc CHANGED
@@ -182,20 +182,21 @@ x = db.fetch_db("ISO 5749")
182
182
  # prepare queue for results
183
183
  results = Queue.new
184
184
 
185
- # references ot fetch
185
+ # references to fetch
186
186
  refs = ["ISO 19011", "ISO 19115"]
187
187
 
188
188
  # fetch documents
189
189
  refs.each do |ref|
190
190
  db.fetch_async(ref) do |doc|
191
- results << [ref, doc]
191
+ results << [doc, ref]
192
192
  end
193
193
  end
194
194
 
195
- # wait until documets fetching
195
+ # wait until all the documents fetching
196
196
  refs.size.times do
197
- ref, doc = results.pop
198
- # do thatever you need with result x
197
+ doc, ref = results.pop
198
+ # do whatever you need with the result
199
+ # in case request error doc will be instance of Relaton::RequestError
199
200
  end
200
201
  ----
201
202
 
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
@@ -99,16 +100,20 @@ module Relaton
99
100
  end
100
101
 
101
102
  # Fetch asynchronously
102
- def fetch_async(code, year = nil, opts = {}, &_block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
103
+ def fetch_async(code, year = nil, opts = {}, &block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
103
104
  stdclass = standard_class code
104
105
  if stdclass
105
106
  unless @queues[stdclass]
106
107
  processor = @registry.processors[stdclass]
107
- wp = WorkersPool.new(processor.threads) { |args| yield fetch(*args) }
108
+ wp = WorkersPool.new(processor.threads) do |args|
109
+ args[3].call fetch(*args[0..2])
110
+ rescue RelatonBib::RequestError => e
111
+ args[3].call e
112
+ end
108
113
  @queues[stdclass] = { queue: Queue.new, workers_pool: wp }
109
114
  Thread.new { process_queue @queues[stdclass] }
110
115
  end
111
- @queues[stdclass][:queue] << [code, year, opts]
116
+ @queues[stdclass][:queue] << [code, year, opts, block]
112
117
  else yield nil
113
118
  end
114
119
  end
@@ -371,14 +376,20 @@ module Relaton
371
376
  return bib_retval(bibentry, stdclass)
372
377
  end
373
378
 
374
- db.delete(id) unless db.valid_entry?(id, year)
379
+ @semaphore.synchronize do
380
+ db.delete(id) unless db.valid_entry?(id, year)
381
+ end
375
382
  if altdb
376
383
  return bib_retval(altdb[id], stdclass) if opts[:fetch_db]
377
384
 
378
- db.clone_entry id, altdb if altdb.valid_entry? id, year
379
- db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db,
380
- id: id)
381
- altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
385
+ @semaphore.synchronize do
386
+ db.clone_entry id, altdb if altdb.valid_entry? id, year
387
+ end
388
+ entry = new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id) unless db[id]
389
+ @semaphore.synchronize do
390
+ db[id] ||= entry
391
+ altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
392
+ end
382
393
  else
383
394
  return bib_retval(db[id], stdclass) if opts[:fetch_db]
384
395
 
@@ -409,7 +420,7 @@ module Relaton
409
420
  if args[:db] && args[:id] &&
410
421
  bib_id && args[:id] !~ %r{#{Regexp.quote("(#{bib_id})")}}
411
422
  bid = std_id(bib.docidentifier.first.id, nil, {}, stdclass).first
412
- args[:db][bid] ||= bib_entry bib
423
+ @semaphore.synchronize { args[:db][bid] ||= bib_entry bib }
413
424
  "redirection #{bid}"
414
425
  else bib_entry bib
415
426
  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
13
13
  ].freeze
14
14
 
15
15
  include Singleton
@@ -1,3 +1,3 @@
1
1
  module Relaton
2
- VERSION = "1.9.1".freeze
2
+ VERSION = "1.9.5".freeze
3
3
  end
data/relaton.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_dependency "relaton-cie", "~> 1.9.0"
37
37
  spec.add_dependency "relaton-ecma", "~> 1.9.0"
38
38
  spec.add_dependency "relaton-gb", "~> 1.9.0"
39
+ spec.add_dependency "relaton-iana", "~> 1.9.0"
39
40
  spec.add_dependency "relaton-iec", "~> 1.9.0"
40
41
  spec.add_dependency "relaton-ieee", "~> 1.9.0"
41
42
  spec.add_dependency "relaton-ietf", "~> 1.9.0"
@@ -163,14 +163,16 @@ RSpec.describe Relaton::Db do
163
163
  results = []
164
164
  VCR.use_cassette "async_fetch", match_requests_on: %i[method uri body] do
165
165
  refs.each do |ref|
166
- db.fetch_async(ref) { |r| queue << r }
166
+ db.fetch_async(ref) do |r|
167
+ queue << [r, ref]
168
+ end
167
169
  end
168
170
  Timeout.timeout(60) do
169
171
  refs.size.times { results << queue.pop }
170
172
  end
171
173
  end
172
174
  results.each do |result|
173
- expect(result).to be_instance_of RelatonItu::ItuBibliographicItem
175
+ expect(result[0]).to be_instance_of RelatonItu::ItuBibliographicItem
174
176
  end
175
177
  end
176
178
 
@@ -87,6 +87,10 @@ 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
90
94
  end
91
95
 
92
96
  it "find processot by dataset" do
data/spec/relaton_spec.rb CHANGED
@@ -205,12 +205,12 @@ RSpec.describe Relaton::Db do
205
205
 
206
206
  it "get OGC refrence and cache it" do
207
207
  cc_fr = /\.relaton\/ogc\/bibliography\.json/
208
- expect(File).to receive(:exist?).with(cc_fr).and_return false
209
- expect(File).to receive(:exist?).with(/etag\.txt/).and_return false
208
+ allow(File).to receive(:exist?).with(cc_fr).and_return false
209
+ allow(File).to receive(:exist?).with(/etag\.txt/).and_return false
210
210
  expect(File).to receive(:exist?).and_call_original.at_least :once
211
211
  expect(File).to receive(:write).with(cc_fr, kind_of(String), kind_of(Hash))
212
212
  .at_most :once
213
- expect(File).to receive(:write).and_call_original.at_least :once
213
+ allow(File).to receive(:write).and_call_original
214
214
  VCR.use_cassette "ogc_19_025r1" do
215
215
  bib = @db.fetch "OGC 19-025r1", nil, {}
216
216
  expect(bib).to be_instance_of RelatonOgc::OgcBibliographicItem
@@ -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,13 @@ 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
+
302
309
  context "get combined documents" do
303
310
  context "ISO" do
304
311
  it "included" do
@@ -306,10 +313,10 @@ RSpec.describe Relaton::Db do
306
313
  bib = @db.fetch "ISO 19115-1 + Amd 1"
307
314
  expect(bib.docidentifier[0].id).to eq "ISO 19115-1 + Amd 1"
308
315
  expect(bib.relation[0].type).to eq "updates"
309
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1:2014"
316
+ expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1"
310
317
  expect(bib.relation[1].type).to eq "derivedFrom"
311
318
  expect(bib.relation[1].description).to be_nil
312
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1:2014/Amd 1:2018"
319
+ expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1/Amd 1:2018"
313
320
  end
314
321
  end
315
322
 
@@ -318,10 +325,10 @@ RSpec.describe Relaton::Db do
318
325
  bib = @db.fetch "ISO 19115-1, Amd 1"
319
326
  expect(bib.docidentifier[0].id).to eq "ISO 19115-1, Amd 1"
320
327
  expect(bib.relation[0].type).to eq "updates"
321
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1:2014"
328
+ expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1"
322
329
  expect(bib.relation[1].type).to eq "complements"
323
330
  expect(bib.relation[1].description.content).to eq "amendment"
324
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1:2014/Amd 1:2018"
331
+ expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1/Amd 1:2018"
325
332
  end
326
333
  end
327
334
  end