relaton 1.7.pre7 → 1.7.0

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +34 -0
  3. data/.github/workflows/ubuntu.yml +32 -0
  4. data/.github/workflows/windows.yml +35 -0
  5. data/docs/README.adoc +3 -233
  6. data/lib/relaton/config.rb +2 -3
  7. data/lib/relaton/db.rb +35 -247
  8. data/lib/relaton/db_cache.rb +6 -28
  9. data/lib/relaton/processor.rb +0 -11
  10. data/lib/relaton/registry.rb +1 -1
  11. data/lib/relaton/version.rb +1 -1
  12. data/lib/relaton.rb +7 -8
  13. data/relaton.gemspec +6 -8
  14. data/spec/relaton/db_cache_spec.rb +1 -1
  15. data/spec/relaton/db_spec.rb +0 -145
  16. data/spec/relaton/processor_spec.rb +0 -4
  17. data/spec/relaton/regirtry_spec.rb +44 -54
  18. data/spec/relaton_spec.rb +19 -120
  19. data/spec/vcr_cassetes/19133_2005.yml +20 -20
  20. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +10 -10
  21. data/spec/vcr_cassetes/fisp_140.yml +6 -6
  22. data/spec/vcr_cassetes/gb_t_20223_2006.yml +11 -15
  23. data/spec/vcr_cassetes/ieee_528_2019.yml +17 -17
  24. data/spec/vcr_cassetes/iho_b_11.yml +15 -15
  25. data/spec/vcr_cassetes/iso_111111119115_1.yml +5 -5
  26. data/spec/vcr_cassetes/iso_19115.yml +22 -22
  27. data/spec/vcr_cassetes/iso_19115_1.yml +20 -20
  28. data/spec/vcr_cassetes/iso_19115_1_2.yml +39 -39
  29. data/spec/vcr_cassetes/iso_awi_24229.yml +22 -22
  30. data/spec/vcr_cassetes/ogc_19_025r1.yml +1902 -2554
  31. data/spec/vcr_cassetes/ogm_ami4ccm_1_0.yml +7 -7
  32. data/spec/vcr_cassetes/rfc_8341.yml +15 -47
  33. data/spec/vcr_cassetes/sp_800_38b.yml +6 -6
  34. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +30 -30
  35. data/spec/vcr_cassetes/w3c_json_ld11.yml +12 -12
  36. metadata +51 -61
  37. data/.github/workflows/rake.yml +0 -46
  38. data/globalcache/iec/iec_60050_102_2007.xml +0 -58
  39. data/globalcache/iec/version +0 -1
  40. data/lib/relaton/workers_pool.rb +0 -23
  41. data/spec/vcr_cassetes/cie_001_1980.yml +0 -120
  42. data/spec/vcr_cassetes/ecma_6.yml +0 -159
  43. data/spec/vcr_cassetes/hist_cmbined_included.yml +0 -105
  44. data/spec/vcr_cassetes/iec_60050_102_2007.yml +0 -285
  45. data/spec/vcr_cassetes/iec_combined_included.yml +0 -945
  46. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -361
  47. data/spec/vcr_cassetes/iso_combined_included.yml +0 -361
  48. data/spec/vcr_cassetes/itu_combined_included.yml +0 -1296
  49. data/spec/vcr_cassetes/rfc_unsuccess.yml +0 -70
@@ -1,121 +1,6 @@
1
1
  RSpec.describe Relaton::Db do
2
2
  before(:each) { FileUtils.rm_rf %w[testcache testcache2] }
3
3
 
4
- context "modifing database" do
5
- let(:db) { Relaton::Db.new "testcache", "testcache2" }
6
-
7
- before(:each) do
8
- db.save_entry "ISO(ISO 123)", "<bibitem id='ISO123></bibitem>"
9
- end
10
-
11
- context "move to new dir" do
12
- let(:db) { Relaton::Db.new "global_cache", "local_cache" }
13
-
14
- after(:each) do
15
- FileUtils.rm_rf "global_cache"
16
- FileUtils.rm_rf "local_cache"
17
- end
18
-
19
- it "global cache" do
20
- expect(File.exist?("global_cache")).to be true
21
- expect(db.mv("testcache")).to eq "testcache"
22
- expect(File.exist?("testcache")).to be true
23
- expect(File.exist?("global_cache")).to be false
24
- end
25
-
26
- it "local cache" do
27
- expect(File.exist?("local_cache")).to be true
28
- expect(db.mv("testcache2", type: :local)).to eq "testcache2"
29
- expect(File.exist?("testcache2")).to be true
30
- expect(File.exist?("local_cache")).to be false
31
- end
32
- end
33
-
34
- it "warn if moving in existed dir" do
35
- expect(File).to receive(:exist?).with("new_cache_dir")
36
- .and_return true
37
- expect do
38
- expect(db.mv("new_cache_dir")).to be_nil
39
- end.to output(/\[relaton\] WARNING: target directory exists/).to_stderr
40
- end
41
-
42
- it "clear" do
43
- expect(File.exist?("testcache/iso")).to be true
44
- expect(File.exist?("testcache2/iso")).to be true
45
- db.clear
46
- expect(File.exist?("testcache/iso")).to be false
47
- expect(File.exist?("testcache2/iso")).to be false
48
- end
49
- end
50
-
51
- context "query in local DB" do
52
- let(:db) { Relaton::Db.new "testcache", "testcache2" }
53
-
54
- before(:each) do
55
- db.save_entry "ISO(ISO 123)", <<~DOC
56
- <bibitem id='ISO123'>
57
- <title>The first test</title><edition>2</edition><date type="published"><on>2011-10-12</on></date>
58
- </bibitem>
59
- DOC
60
- db.save_entry "IEC(IEC 123)", <<~DOC
61
- <bibitem id="IEC123">
62
- <title>The second test</title><edition>1</edition><date type="published"><on>2015-12</on></date>
63
- </bibitem>
64
- DOC
65
- end
66
-
67
- after(:each) { db.clear }
68
-
69
- it "one document" do
70
- item = db.fetch_db "ISO((ISO 124)"
71
- expect(item).to be_nil
72
- item = db.fetch_db "ISO(ISO 123)"
73
- expect(item).to be_instance_of RelatonIsoBib::IsoBibliographicItem
74
- end
75
-
76
- it "all documents" do
77
- items = db.fetch_all
78
- expect(items.size).to be 9
79
- expect(items[7]).to be_instance_of RelatonIec::IecBibliographicItem
80
- expect(items[8]).to be_instance_of RelatonIsoBib::IsoBibliographicItem
81
- end
82
-
83
- context "search for text" do
84
- it do
85
- items = db.fetch_all "test"
86
- expect(items.size).to eq 2
87
- items = db.fetch_all "first"
88
- expect(items.size).to eq 1
89
- expect(items[0].id).to eq "ISO123"
90
- end
91
-
92
- it "in attributes" do
93
- items = db.fetch_all "123"
94
- expect(items.size).to eq 2
95
- items = db.fetch_all "ISO"
96
- expect(items.size).to eq 8
97
- expect(items[7].id).to eq "ISO123"
98
- end
99
-
100
- it "and fail" do
101
- items = db.fetch_all "bibitem"
102
- expect(items.size).to eq 0
103
- end
104
-
105
- it "and edition" do
106
- items = db.fetch_all "123", edition: "2"
107
- expect(items.size).to eq 1
108
- expect(items[0].id).to eq "ISO123"
109
- end
110
-
111
- it "and year" do
112
- items = db.fetch_all "123", year: 2015
113
- expect(items.size).to eq 1
114
- expect(items[0].id).to eq "IEC123"
115
- end
116
- end
117
- end
118
-
119
4
  it "returns docid type" do
120
5
  db = Relaton::Db.new "testcache", "testcache2"
121
6
  expect(db.docid_type("CN(GB/T 1.1)")).to eq ["Chinese Standard", "GB/T 1.1"]
@@ -145,36 +30,6 @@ RSpec.describe Relaton::Db do
145
30
  end
146
31
  end
147
32
 
148
- it "fetch document with net retries" do
149
- db = Relaton::Db.new nil, nil
150
- expect(db.instance_variable_get(:@registry).processors[:relaton_ietf]).to receive(:get)
151
- .and_raise(RelatonBib::RequestError).exactly(3).times
152
- expect { db.fetch "RFC 8341", nil, retries: 3 }.to raise_error RelatonBib::RequestError
153
- end
154
-
155
- context "async fetch" do
156
- let(:db) { Relaton::Db.new nil, nil }
157
- let(:queue) { Queue.new }
158
-
159
- it "success" do
160
- result = nil
161
- VCR.use_cassette "rfc_8341" do
162
- db.fetch_async("RFC 8341") { |r| queue << r }
163
- Timeout.timeout(5) { result = queue.pop }
164
- end
165
- expect(result).to be_instance_of RelatonIetf::IetfBibliographicItem
166
- end
167
-
168
- it "prefix not found" do
169
- result = ""
170
- VCR.use_cassette "rfc_unsuccess" do
171
- db.fetch_async("ABC 123456") { |r| queue << r }
172
- Timeout.timeout(5) { result = queue.pop }
173
- end
174
- expect(result).to be_nil
175
- end
176
- end
177
-
178
33
  context "fetch documents form static cache" do
179
34
  let(:db) { Relaton::Db.new nil, nil }
180
35
 
@@ -23,9 +23,5 @@ RSpec.describe Relaton::Processor do
23
23
  it "hash_to_bib method should be implemented" do
24
24
  expect { subject.hash_to_bib({}) }.to raise_error StandardError
25
25
  end
26
-
27
- it "grammar_hash method should be implemented" do
28
- expect { subject.grammar_hash }.to raise_error StandardError
29
- end
30
26
  end
31
27
  end
@@ -2,82 +2,72 @@ RSpec.describe Relaton::Registry do
2
2
  it "outputs backend not present" do
3
3
  stub_const "Relaton::Registry::SUPPORTED_GEMS", ["not_supported_gem"]
4
4
  expect { Relaton::Registry.clone.instance }.to output(
5
- /backend not_supported_gem not present/
5
+ /backend not_supported_gem not present/,
6
6
  ).to_stdout
7
7
  end
8
8
 
9
9
  it "finds ISO processor" do
10
- expect(Relaton::Registry.instance.find_processor("relaton_iso"))
11
- .to be_instance_of RelatonIso::Processor
10
+ expect(Relaton::Registry.instance.find_processor("relaton_iso")).
11
+ to be_instance_of RelatonIso::Processor
12
12
  end
13
13
 
14
14
  it "returns supported processors" do
15
15
  expect(Relaton::Registry.instance.supported_processors).to include :relaton_iso
16
16
  end
17
17
 
18
- context "finds processor by type" do
19
- it "CN" do
20
- expect(Relaton::Registry.instance.by_type("CN")).to be_instance_of RelatonGb::Processor
21
- end
22
-
23
- it "IEC" do
24
- expect(Relaton::Registry.instance.by_type("IEC")).to be_instance_of RelatonIec::Processor
25
- end
26
-
27
- it "IETF" do
28
- expect(Relaton::Registry.instance.by_type("IETF")).to be_instance_of RelatonIetf::Processor
29
- end
18
+ it "finds processor by type" do
19
+ expect(Relaton::Registry.instance.by_type("CN")).to be_instance_of RelatonGb::Processor
20
+ end
30
21
 
31
- it "ISO" do
32
- expect(Relaton::Registry.instance.by_type("ISO")).to be_instance_of RelatonIso::Processor
33
- end
22
+ it "finds processor by type" do
23
+ expect(Relaton::Registry.instance.by_type("IEC")).to be_instance_of RelatonIec::Processor
24
+ end
34
25
 
35
- it "ITU" do
36
- expect(Relaton::Registry.instance.by_type("ITU")).to be_instance_of RelatonItu::Processor
37
- end
26
+ it "finds processor by type" do
27
+ expect(Relaton::Registry.instance.by_type("IETF")).to be_instance_of RelatonIetf::Processor
28
+ end
38
29
 
39
- it "NIST" do
40
- expect(Relaton::Registry.instance.by_type("NIST")).to be_instance_of RelatonNist::Processor
41
- end
30
+ it "finds processor by type" do
31
+ expect(Relaton::Registry.instance.by_type("ISO")).to be_instance_of RelatonIso::Processor
32
+ end
42
33
 
43
- it "OGC" do
44
- expect(Relaton::Registry.instance.by_type("OGC")).to be_instance_of RelatonOgc::Processor
45
- end
34
+ it "finds processor by type" do
35
+ expect(Relaton::Registry.instance.by_type("ITU")).to be_instance_of RelatonItu::Processor
36
+ end
46
37
 
47
- it "CC" do
48
- expect(Relaton::Registry.instance.by_type("CC")).to be_instance_of RelatonCalconnect::Processor
49
- end
38
+ it "finds processor by type" do
39
+ expect(Relaton::Registry.instance.by_type("NIST")).to be_instance_of RelatonNist::Processor
40
+ end
50
41
 
51
- it "OMG" do
52
- expect(Relaton::Registry.instance.by_type("OMG")).to be_instance_of RelatonOmg::Processor
53
- end
42
+ it "finds processor by type" do
43
+ expect(Relaton::Registry.instance.by_type("OGC")).to be_instance_of RelatonOgc::Processor
44
+ end
54
45
 
55
- it "UN" do
56
- expect(Relaton::Registry.instance.by_type("UN")).to be_instance_of RelatonUn::Processor
57
- end
46
+ it "finds processor by type" do
47
+ expect(Relaton::Registry.instance.by_type("CC")).to be_instance_of RelatonCalconnect::Processor
48
+ end
58
49
 
59
- it "W3C" do
60
- expect(Relaton::Registry.instance.by_type("W3C")).to be_instance_of RelatonW3c::Processor
61
- end
50
+ it "finds processor by type" do
51
+ expect(Relaton::Registry.instance.by_type("OMG")).to be_instance_of RelatonOmg::Processor
52
+ end
62
53
 
63
- it "IEEE" do
64
- expect(Relaton::Registry.instance.by_type("IEEE")).to be_instance_of RelatonIeee::Processor
65
- end
54
+ it "finds processor by type" do
55
+ expect(Relaton::Registry.instance.by_type("UN")).to be_instance_of RelatonUn::Processor
56
+ end
66
57
 
67
- it "IHO" do
68
- expect(Relaton::Registry.instance.by_type("IHO")).to be_instance_of RelatonIho::Processor
69
- end
58
+ it "finds processor by type" do
59
+ expect(Relaton::Registry.instance.by_type("W3C")).to be_instance_of RelatonW3c::Processor
60
+ end
70
61
 
71
- it "BIPM" do
72
- expect(Relaton::Registry.instance.by_type("BIPM")).to be_instance_of RelatonBipm::Processor
73
- end
62
+ it "finds processor by type" do
63
+ expect(Relaton::Registry.instance.by_type("IEEE")).to be_instance_of RelatonIeee::Processor
64
+ end
74
65
 
75
- it "ECMA" do
76
- expect(Relaton::Registry.instance.by_type("ECMA")).to be_instance_of RelatonEcma::Processor
77
- end
66
+ it "finds processor by type" do
67
+ expect(Relaton::Registry.instance.by_type("IHO")).to be_instance_of RelatonIho::Processor
68
+ end
78
69
 
79
- it "CIE" do
80
- expect(Relaton::Registry.instance.by_type("CIE")).to be_instance_of RelatonCie::Processor
81
- end
70
+ it "finds processor by type" do
71
+ expect(Relaton::Registry.instance.by_type("BIPM")).to be_instance_of RelatonBipm::Processor
82
72
  end
83
73
  end
data/spec/relaton_spec.rb CHANGED
@@ -58,28 +58,12 @@ RSpec.describe Relaton::Db do
58
58
  end
59
59
  end
60
60
  end
61
-
62
- it "gets sn ISO/AWI reference" do
63
- VCR.use_cassette "iso_awi_24229" do
64
- bib = @db.fetch "ISO/AWI 24229"
65
- expect(bib).not_to be_nil
66
- end
67
- end
68
61
  end
69
62
 
70
- context "IEC" do
71
- it "get by reference" do
72
- VCR.use_cassette "iec_60050_102_2007" do
73
- bib = @db.fetch "IEC 60050-102:2007"
74
- expect(bib.docidentifier[0].id).to eq "IEC 60050-102:2007"
75
- end
76
- end
77
-
78
- it "get by URN" do
79
- VCR.use_cassette "iec_60050_102_2007" do
80
- bib = @db.fetch "urn:iec:std:iec:60050-102:2007:::"
81
- expect(bib.docidentifier[0].id).to eq "IEC 60050-102:2007"
82
- end
63
+ it "gets sn ISO/AWI reference" do
64
+ VCR.use_cassette "iso_awi_24229" do
65
+ bib = @db.fetch "ISO/AWI 24229"
66
+ expect(bib).not_to be_nil
83
67
  end
84
68
  end
85
69
 
@@ -264,115 +248,30 @@ RSpec.describe Relaton::Db do
264
248
  end
265
249
  end
266
250
 
267
- it "get ECMA reference" do
268
- VCR.use_cassette "ecma_6" do
269
- bib = @db.fetch "ECMA-6"
270
- expect(bib).to be_instance_of RelatonBib::BibliographicItem
271
- end
272
- end
273
-
274
- it "get CIE reference" do
275
- VCR.use_cassette "cie_001_1980" do
276
- bib = @db.fetch "CIE 001-1980"
277
- expect(bib).to be_instance_of RelatonBib::BibliographicItem
278
- end
279
- end
280
-
281
- context "get combined documents" do
282
- context "ISO" do
283
- it "included" do
284
- VCR.use_cassette "iso_combined_included" do
285
- bib = @db.fetch "ISO 19115-1 + Amd 1"
286
- expect(bib.docidentifier[0].id).to eq "ISO 19115-1 + Amd 1"
287
- expect(bib.relation[0].type).to eq "updates"
288
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1"
289
- expect(bib.relation[1].type).to eq "derivedFrom"
290
- expect(bib.relation[1].description).to be_nil
291
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1/Amd 1:2018"
292
- end
293
- end
294
-
295
- it "applied" do
296
- VCR.use_cassette "iso_combined_applied" do
297
- bib = @db.fetch "ISO 19115-1, Amd 1"
298
- expect(bib.docidentifier[0].id).to eq "ISO 19115-1, Amd 1"
299
- expect(bib.relation[0].type).to eq "updates"
300
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ISO 19115-1"
301
- expect(bib.relation[1].type).to eq "complements"
302
- expect(bib.relation[1].description.content).to eq "amendment"
303
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ISO 19115-1/Amd 1:2018"
304
- end
305
- end
306
- end
307
-
308
- context "IEC" do
309
- it "included" do
310
- VCR.use_cassette "iec_combined_included" do
311
- bib = @db.fetch "IEC 60027-1, Amd 1, Amd 2"
312
- expect(bib.docidentifier[0].id).to eq "IEC 60027-1, Amd 1, Amd 2"
313
- expect(bib.relation[0].type).to eq "updates"
314
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "IEC 60027-1"
315
- expect(bib.relation[1].type).to eq "complements"
316
- expect(bib.relation[1].description.content).to eq "amendment"
317
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "IEC 60027-1/AMD1:1997"
318
- expect(bib.relation[2].type).to eq "complements"
319
- expect(bib.relation[2].description.content).to eq "amendment"
320
- expect(bib.relation[2].bibitem.docidentifier[0].id).to eq "IEC 60027-1/AMD2:2005"
321
- end
322
- end
323
- end
324
-
325
- context "ITU" do
326
- it "included" do
327
- VCR.use_cassette "itu_combined_included" do
328
- bib = @db.fetch "ITU-T G.989.2, Amd 1, Amd 2"
329
- expect(bib.docidentifier[0].id).to eq "ITU-T G.989.2, Amd 1, Amd 2"
330
- expect(bib.relation[0].type).to eq "updates"
331
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2"
332
- expect(bib.relation[1].type).to eq "complements"
333
- expect(bib.relation[1].description.content).to eq "amendment"
334
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2/Amd 1"
335
- expect(bib.relation[2].type).to eq "complements"
336
- expect(bib.relation[2].description.content).to eq "amendment"
337
- expect(bib.relation[2].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2/Amd 2"
338
- end
339
- end
340
- end
341
-
342
- context "HIST" do
343
- it "included" do
344
- VCR.use_cassette "hist_cmbined_included" do
345
- bib = @db.fetch "NIST SP 800-38A, Add"
346
- expect(bib.docidentifier[0].id).to eq "NIST SP 800-38A, Add"
347
- expect(bib.relation[0].type).to eq "updates"
348
- expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "SP 800-38A"
349
- expect(bib.relation[1].type).to eq "complements"
350
- expect(bib.relation[1].description.content).to eq "amendment"
351
- expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "SP 800-38A-Add"
352
- end
353
- end
354
- end
355
- end
356
-
357
251
  context "version control" do
358
- before(:each) { @db.save_entry "iso(test_key)", "<bibitem><title>test_value</title></bibitem>" }
252
+ before(:each) { @db.save_entry "iso(test_key)", value: "test_value" }
359
253
 
360
254
  it "shoudn't clear cacho if version isn't changed" do
361
- testcache = @db.instance_variable_get :@db
255
+ db = Relaton::Db.new "testcache", "testcache2"
256
+ testcache = db.instance_variable_get :@db
362
257
  expect(testcache.all).to be_any
363
- testcache = @db.instance_variable_get :@local_db
258
+ testcache = db.instance_variable_get :@local_db
364
259
  expect(testcache.all).to be_any
365
260
  end
366
261
 
367
262
  it "should clear cache if version is changed" do
368
- expect(File.read("testcache/iso/version", encoding: "UTF-8")).not_to eq "new_version"
369
- expect(File.read("testcache2/iso/version", encoding: "UTF-8")).not_to eq "new_version"
263
+ expect(File.exist?("testcache")).to be true
264
+ expect(File.exist?("testcache2")).to be true
370
265
  processor = double
371
- expect(processor).to receive(:grammar_hash).and_return("new_version").exactly(2).times
372
- expect(Relaton::Registry.instance).to receive(:by_type).and_return(processor).exactly(2).times
373
- Relaton::Db.new "testcache", "testcache2"
374
- expect(File.exist?("testcache/iso/version")).to eq false
375
- expect(File.exist?("testcache2/iso/version")).to eq false
266
+ expect(processor).to receive(:grammar_hash).and_return("new_version")
267
+ .exactly(2).times
268
+ expect(Relaton::Registry.instance).to receive(:by_type)
269
+ .and_return(processor).exactly(2).times
270
+ db = Relaton::Db.new "testcache", "testcache2"
271
+ testcache = db.instance_variable_get :@db
272
+ expect(testcache.all).not_to be_any
273
+ testcache = db.instance_variable_get :@local_db
274
+ expect(testcache.all).not_to be_any
376
275
  end
377
276
  end
378
277
  end