relaton 1.9.0 → 1.9.4

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/docs/README.adoc +6 -5
  3. data/lib/relaton/db.rb +7 -3
  4. data/lib/relaton/processor.rb +13 -2
  5. data/lib/relaton/registry.rb +12 -1
  6. data/lib/relaton/version.rb +1 -1
  7. data/relaton.gemspec +5 -4
  8. data/spec/relaton/db_spec.rb +4 -2
  9. data/spec/relaton/processor_spec.rb +4 -0
  10. data/spec/relaton/{regirtry_spec.rb → registry_spec.rb} +10 -0
  11. data/spec/relaton_spec.rb +27 -13
  12. data/spec/vcr_cassetes/async_fetch.yml +1397 -1400
  13. data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +16 -20
  14. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +16 -16
  15. data/spec/vcr_cassetes/cen_en_10160_1999.yml +42 -42
  16. data/spec/vcr_cassetes/cie_001_1980.yml +8 -8
  17. data/spec/vcr_cassetes/ecma_6.yml +8 -8
  18. data/spec/vcr_cassetes/fisp_140.yml +6 -57
  19. data/spec/vcr_cassetes/gb_t_20223_2006.yml +6 -6
  20. data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +75 -0
  21. data/spec/vcr_cassetes/iec_60050_102_2007.yml +28 -28
  22. data/spec/vcr_cassetes/iec_combined_included.yml +94 -92
  23. data/spec/vcr_cassetes/ieee_528_2019.yml +19 -19
  24. data/spec/vcr_cassetes/iho_b_11.yml +8 -8
  25. data/spec/vcr_cassetes/iso_111111119115_1.yml +4 -4
  26. data/spec/vcr_cassetes/iso_19115_1.yml +16 -16
  27. data/spec/vcr_cassetes/iso_19115_1_2.yml +32 -32
  28. data/spec/vcr_cassetes/iso_19115_all_parts.yml +16 -16
  29. data/spec/vcr_cassetes/iso_19133_2005.yml +16 -16
  30. data/spec/vcr_cassetes/iso_cd_14093.yml +202 -0
  31. data/spec/vcr_cassetes/iso_combined_applied.yml +34 -34
  32. data/spec/vcr_cassetes/iso_combined_included.yml +32 -32
  33. data/spec/vcr_cassetes/itu_combined_included.yml +303 -187
  34. data/spec/vcr_cassetes/ogc_19_025r1.yml +14 -13156
  35. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +4 -4
  36. data/spec/vcr_cassetes/rfc_8341.yml +8 -8
  37. data/spec/vcr_cassetes/sp_800_38b.yml +6 -57
  38. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +34 -34
  39. data/spec/vcr_cassetes/w3c_json_ld11.yml +93 -138
  40. metadata +27 -12
  41. data/spec/vcr_cassetes/iso_awi_14093.yml +0 -202
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a47a3437f5f8afb131ea6cf2a0cf1714875f45e3bd3881c17bc8c7ab9cc2101
4
- data.tar.gz: b2a25232edd0d71d5597c06c011362771326bdf3369272e9ca5c862b76947427
3
+ metadata.gz: 250207e6a1eaa872380c5b959d727be909d99874797832a4288a058259e96bb2
4
+ data.tar.gz: df287ddd627ff37b9ecbcd3207a4eb8216690b9d3df9db2a9b31ff2a3648a363
5
5
  SHA512:
6
- metadata.gz: 2c99ab3fe479d11714a2848656076685057f9169d59d548530a60e8405d8be23d7f1a04b79744e6fbd112d4495e2cf5d1451d7e3f769fa0bb8844874281dee72
7
- data.tar.gz: 48d30e142c8a611f97ebc9eb0aed6f3619ec2784e9856b1e659473b52c48fdae77c131c29241087c8a31e59623ed3830e383d75103fe42e18416a0a06c251c66
6
+ metadata.gz: 75eecbdaa0c5d6bc954b790eecba13d987974be787181332343b23558534543fb4107366444fe49aab6fea2e54830dc46051449f482d494a9afad0f3bd502abf
7
+ data.tar.gz: 159b1e402d0b8521634598412edb68cf8e468009d24e96be56f678df98a62099b568d8de04c77a10ed72faed770f4d87d536fd1e152fa24f39786540d5e51643
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
@@ -99,16 +99,20 @@ module Relaton
99
99
  end
100
100
 
101
101
  # Fetch asynchronously
102
- def fetch_async(code, year = nil, opts = {}, &_block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
102
+ def fetch_async(code, year = nil, opts = {}, &block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
103
103
  stdclass = standard_class code
104
104
  if stdclass
105
105
  unless @queues[stdclass]
106
106
  processor = @registry.processors[stdclass]
107
- wp = WorkersPool.new(processor.threads) { |args| yield fetch(*args) }
107
+ wp = WorkersPool.new(processor.threads) do |args|
108
+ args[3].call fetch(*args[0..2])
109
+ rescue RelatonBib::RequestError => e
110
+ args[3].call e
111
+ end
108
112
  @queues[stdclass] = { queue: Queue.new, workers_pool: wp }
109
113
  Thread.new { process_queue @queues[stdclass] }
110
114
  end
111
- @queues[stdclass][:queue] << [code, year, opts]
115
+ @queues[stdclass][:queue] << [code, year, opts, block]
112
116
  else yield nil
113
117
  end
114
118
  end
@@ -1,9 +1,16 @@
1
1
  module Relaton
2
2
  class Processor
3
+ # @rerurn [Symbol]
3
4
  attr_reader :short
4
- attr_reader :prefix
5
+
6
+ # @return [String]
7
+ attr_reader :prefix, :idtype
8
+
9
+ # @return [Regexp]
5
10
  attr_reader :defaultprefix
6
- attr_reader :idtype
11
+
12
+ # @return [Array<String>]
13
+ attr_reader :datasets
7
14
 
8
15
  def initialize
9
16
  raise "This is an abstract class!"
@@ -13,6 +20,10 @@ module Relaton
13
20
  raise "This is an abstract class!"
14
21
  end
15
22
 
23
+ def fetch_data(_source, _opts)
24
+ raise "This is an abstract class!"
25
+ end
26
+
16
27
  def from_xml(_xml)
17
28
  raise "This is an abstract class!"
18
29
  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
@@ -54,6 +54,17 @@ module Relaton
54
54
  processors.keys
55
55
  end
56
56
 
57
+ #
58
+ # Search a rpocessos by dataset name
59
+ #
60
+ # @param [String] dataset
61
+ #
62
+ # @return [Relaton::Processor, nil]
63
+ #
64
+ def find_processor_by_dataset(dataset)
65
+ processors.values.detect { |p| p.datasets&.include? dataset }
66
+ end
67
+
57
68
  #
58
69
  # Find processor by type
59
70
  #
@@ -1,3 +1,3 @@
1
1
  module Relaton
2
- VERSION = "1.9.0".freeze
2
+ VERSION = "1.9.4".freeze
3
3
  end
data/relaton.gemspec CHANGED
@@ -36,13 +36,14 @@ 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-iec", ">= 1.9.0"
39
+ spec.add_dependency "relaton-iana", "~> 1.9.0"
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"
42
43
  spec.add_dependency "relaton-iho", "~> 1.9.0"
43
- spec.add_dependency "relaton-iso", ">= 1.9.0"
44
- spec.add_dependency "relaton-itu", ">= 1.9.0"
45
- spec.add_dependency "relaton-nist", ">= 1.9.0"
44
+ spec.add_dependency "relaton-iso", "~> 1.9.0"
45
+ spec.add_dependency "relaton-itu", "~> 1.9.0"
46
+ spec.add_dependency "relaton-nist", ">= 1.9.2"
46
47
  spec.add_dependency "relaton-ogc", "~> 1.9.0"
47
48
  spec.add_dependency "relaton-omg", "~> 1.9.0"
48
49
  spec.add_dependency "relaton-un", "~> 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
 
@@ -16,6 +16,10 @@ RSpec.describe Relaton::Processor do
16
16
  expect { subject.get "code", nil, {} }.to raise_error StandardError
17
17
  end
18
18
 
19
+ it "fetch_data method should be implemented" do
20
+ expect { subject.fetch_data "cource", {} }.to raise_error StandardError
21
+ end
22
+
19
23
  it "from_xml method should be implemented" do
20
24
  expect { subject.from_xml "" }.to raise_error StandardError
21
25
  end
@@ -87,5 +87,15 @@ 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
+ end
95
+
96
+ it "find processot by dataset" do
97
+ expect(Relaton::Registry.instance
98
+ .find_processor_by_dataset("nist-tech-pubs"))
99
+ .to be_instance_of RelatonNist::Processor
90
100
  end
91
101
  end
data/spec/relaton_spec.rb CHANGED
@@ -59,10 +59,10 @@ RSpec.describe Relaton::Db do
59
59
  end
60
60
  end
61
61
 
62
- it "gets sn ISO/AWI reference" do
63
- VCR.use_cassette "iso_awi_14093" do
64
- bib = @db.fetch "ISO/AWI 14093"
65
- expect(bib.docidentifier[0].id).to eq "ISO/AWI 14093"
62
+ it "gets sn ISO/CD reference" do
63
+ VCR.use_cassette "iso_cd_14093" do
64
+ bib = @db.fetch "ISO/CD 14093"
65
+ expect(bib.docidentifier[0].id).to eq "ISO/CD 14093"
66
66
  end
67
67
  end
68
68
  end
@@ -204,6 +204,13 @@ RSpec.describe Relaton::Db do
204
204
  end
205
205
 
206
206
  it "get OGC refrence and cache it" do
207
+ cc_fr = /\.relaton\/ogc\/bibliography\.json/
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
+ expect(File).to receive(:exist?).and_call_original.at_least :once
211
+ expect(File).to receive(:write).with(cc_fr, kind_of(String), kind_of(Hash))
212
+ .at_most :once
213
+ allow(File).to receive(:write).and_call_original
207
214
  VCR.use_cassette "ogc_19_025r1" do
208
215
  bib = @db.fetch "OGC 19-025r1", nil, {}
209
216
  expect(bib).to be_instance_of RelatonOgc::OgcBibliographicItem
@@ -239,13 +246,13 @@ RSpec.describe Relaton::Db do
239
246
  end
240
247
 
241
248
  it "get W3C reference" do
242
- w3c_fr = /\.relaton\/w3c\/bibliography\.yml/
243
- expect(File).to receive(:exist?).with(w3c_fr).and_return false
244
- expect(File).to receive(:exist?).and_call_original.at_least :once
245
- 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)
246
253
  # expect(File).to receive(:write).and_call_original.at_least :once
247
254
  VCR.use_cassette "w3c_json_ld11" do
248
- bib = @db.fetch "W3C JSON-LD 1.1", nil, {}
255
+ bib = @db.fetch "W3C REC-json-ld11-20200716", nil, {}
249
256
  expect(bib).to be_instance_of RelatonW3c::W3cBibliographicItem
250
257
  end
251
258
  end
@@ -292,6 +299,13 @@ RSpec.describe Relaton::Db do
292
299
  end
293
300
  end
294
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
+
295
309
  context "get combined documents" do
296
310
  context "ISO" do
297
311
  it "included" do
@@ -299,10 +313,10 @@ RSpec.describe Relaton::Db do
299
313
  bib = @db.fetch "ISO 19115-1 + Amd 1"
300
314
  expect(bib.docidentifier[0].id).to eq "ISO 19115-1 + Amd 1"
301
315
  expect(bib.relation[0].type).to eq "updates"
302
- 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"
303
317
  expect(bib.relation[1].type).to eq "derivedFrom"
304
318
  expect(bib.relation[1].description).to be_nil
305
- 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"
306
320
  end
307
321
  end
308
322
 
@@ -311,10 +325,10 @@ RSpec.describe Relaton::Db do
311
325
  bib = @db.fetch "ISO 19115-1, Amd 1"
312
326
  expect(bib.docidentifier[0].id).to eq "ISO 19115-1, Amd 1"
313
327
  expect(bib.relation[0].type).to eq "updates"
314
- 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"
315
329
  expect(bib.relation[1].type).to eq "complements"
316
330
  expect(bib.relation[1].description.content).to eq "amendment"
317
- 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"
318
332
  end
319
333
  end
320
334
  end