relaton 1.7.5 → 1.8.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.rubocop.yml +1 -1
  4. data/docs/README.adoc +20 -11
  5. data/lib/relaton.rb +3 -0
  6. data/lib/relaton/config.rb +7 -3
  7. data/lib/relaton/db.rb +199 -99
  8. data/lib/relaton/db_cache.rb +44 -125
  9. data/lib/relaton/registry.rb +3 -2
  10. data/lib/relaton/storage.rb +186 -0
  11. data/lib/relaton/util.rb +3 -1
  12. data/lib/relaton/version.rb +1 -1
  13. data/lib/relaton/workers_pool.rb +1 -3
  14. data/relaton.gemspec +24 -19
  15. data/spec/relaton/config_spec.rb +1 -1
  16. data/spec/relaton/db_cache_spec.rb +2 -2
  17. data/spec/relaton/db_spec.rb +65 -16
  18. data/spec/relaton/regirtry_spec.rb +10 -2
  19. data/spec/relaton/storage_spec.rb +130 -0
  20. data/spec/relaton_spec.rb +61 -13
  21. data/spec/spec_helper.rb +4 -0
  22. data/spec/vcr_cassetes/19133_2005.yml +23 -23
  23. data/spec/vcr_cassetes/api_relaton_org.yml +33 -0
  24. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +182 -0
  25. data/spec/vcr_cassetes/async_fetch.yml +4854 -0
  26. data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +159 -0
  27. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +10 -10
  28. data/spec/vcr_cassetes/cen_en_10160_1999.yml +249 -0
  29. data/spec/vcr_cassetes/cie_001_1980.yml +7 -7
  30. data/spec/vcr_cassetes/ecma_6.yml +133 -68
  31. data/spec/vcr_cassetes/fisp_140.yml +4 -4
  32. data/spec/vcr_cassetes/gb_t_20223_2006.yml +9 -9
  33. data/spec/vcr_cassetes/iec_60050_102_2007.yml +30 -28
  34. data/spec/vcr_cassetes/iec_combined_included.yml +81 -85
  35. data/spec/vcr_cassetes/ieee_528_2019.yml +19 -17
  36. data/spec/vcr_cassetes/iho_b_11.yml +7 -7
  37. data/spec/vcr_cassetes/iso_111111119115_1.yml +5 -5
  38. data/spec/vcr_cassetes/iso_19115.yml +23 -23
  39. data/spec/vcr_cassetes/iso_19115_1.yml +20 -20
  40. data/spec/vcr_cassetes/iso_19115_1_2.yml +42 -42
  41. data/spec/vcr_cassetes/iso_awi_14093.yml +182 -0
  42. data/spec/vcr_cassetes/iso_combined_applied.yml +42 -42
  43. data/spec/vcr_cassetes/iso_combined_included.yml +45 -45
  44. data/spec/vcr_cassetes/itu_combined_included.yml +813 -681
  45. data/spec/vcr_cassetes/ogc_19_025r1.yml +1325 -1158
  46. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +43 -0
  47. data/spec/vcr_cassetes/rfc_8341.yml +7 -7
  48. data/spec/vcr_cassetes/sp_800_38b.yml +4 -4
  49. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +34 -34
  50. data/spec/vcr_cassetes/w3c_json_ld11.yml +17 -17
  51. metadata +126 -51
  52. data/localcache/iec/iec_60050_102_2007.xml +0 -58
  53. data/localcache/iec/version +0 -1
  54. data/spec/vcr_cassetes/iso_awi_24229.yml +0 -182
  55. data/spec/vcr_cassetes/ogm_ami4ccm_1_0.yml +0 -55
data/lib/relaton/util.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  module Relaton
2
2
  module Util
3
+ # @param message [String]
4
+ # @param type [Symbol] default :info
3
5
  def self.log(message, type = :info)
4
6
  log_types = Relaton.configuration.logs.map(&:to_s) || []
5
7
 
6
8
  if log_types.include?(type.to_s)
7
- puts(message)
9
+ warn(message)
8
10
  end
9
11
  end
10
12
  end
@@ -1,3 +1,3 @@
1
1
  module Relaton
2
- VERSION = "1.7.5".freeze
2
+ VERSION = "1.8.pre2".freeze
3
3
  end
@@ -8,9 +8,7 @@ module Relaton
8
8
  @queue = SizedQueue.new(num_workers * 2)
9
9
  @threads = Array.new num_workers do
10
10
  Thread.new do
11
- while item = @queue.pop
12
- yield(item)
13
- end
11
+ while item = @queue.pop; yield(item) end
14
12
  end
15
13
  end
16
14
  end
data/relaton.gemspec CHANGED
@@ -27,25 +27,28 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ["lib"]
28
28
  spec.files = `git ls-files`.split("\n")
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
- spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
30
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
32
  # spec.add_dependency "algoliasearch"
33
- spec.add_dependency "relaton-bipm", "~> 1.7.0"
34
- spec.add_dependency "relaton-calconnect", "~> 1.7.0"
35
- spec.add_dependency "relaton-cie", "1.7.pre1"
36
- spec.add_dependency "relaton-ecma", "1.7.pre1"
37
- spec.add_dependency "relaton-gb", "~> 1.7.0"
38
- spec.add_dependency "relaton-iec", ">= 1.7.6"
39
- spec.add_dependency "relaton-ieee", "~> 1.7.0"
40
- spec.add_dependency "relaton-ietf", "~> 1.7.0"
41
- spec.add_dependency "relaton-iho", "~> 1.7.0"
42
- spec.add_dependency "relaton-iso", ">= 1.7.1"
43
- spec.add_dependency "relaton-itu", ">= 1.7.2"
44
- spec.add_dependency "relaton-nist", ">= 1.7.1"
45
- spec.add_dependency "relaton-ogc", "~> 1.7.0"
46
- spec.add_dependency "relaton-omg", "~> 1.7.0"
47
- spec.add_dependency "relaton-un", "~> 1.7.0"
48
- spec.add_dependency "relaton-w3c", "~> 1.7.0"
33
+ spec.add_dependency "aws-sdk-s3", "~> 1.96.0"
34
+ spec.add_dependency "relaton-bipm", "~> 1.8.0"
35
+ spec.add_dependency "relaton-bsi", "~> 1.8.0"
36
+ spec.add_dependency "relaton-calconnect", "~> 1.8.0"
37
+ spec.add_dependency "relaton-cen", "~> 1.8.pre1"
38
+ spec.add_dependency "relaton-cie", "~> 1.8.0"
39
+ spec.add_dependency "relaton-ecma", "~> 1.8.0"
40
+ spec.add_dependency "relaton-gb", "~> 1.8.0"
41
+ spec.add_dependency "relaton-iec", ">= 1.8.0"
42
+ spec.add_dependency "relaton-ieee", "~> 1.8.0"
43
+ spec.add_dependency "relaton-ietf", "~> 1.8.0"
44
+ spec.add_dependency "relaton-iho", "~> 1.8.0"
45
+ spec.add_dependency "relaton-iso", ">= 1.8.0"
46
+ spec.add_dependency "relaton-itu", ">= 1.8.0"
47
+ spec.add_dependency "relaton-nist", ">= 1.8.0"
48
+ spec.add_dependency "relaton-ogc", "~> 1.8.0"
49
+ spec.add_dependency "relaton-omg", "~> 1.8.0"
50
+ spec.add_dependency "relaton-un", "~> 1.8.0"
51
+ spec.add_dependency "relaton-w3c", "~> 1.8.0"
49
52
 
50
53
  spec.add_development_dependency "byebug", "~> 11.0"
51
54
  # spec.add_development_dependency "debase"
@@ -53,9 +56,11 @@ Gem::Specification.new do |spec|
53
56
  spec.add_development_dependency "guard", "~> 2.14"
54
57
  spec.add_development_dependency "guard-rspec", "~> 4.7"
55
58
  spec.add_development_dependency "pry-byebug", "~> 3.9.0"
56
- spec.add_development_dependency "rake", "~> 10.0"
59
+ spec.add_development_dependency "rake", "~> 13.0"
57
60
  spec.add_development_dependency "rspec", "~> 3.6"
58
- spec.add_development_dependency "rubocop", "= 0.54.0"
61
+ spec.add_development_dependency "rubocop", "~> 1.17.0"
62
+ spec.add_development_dependency "rubocop-performance", "~> 1.11.0"
63
+ spec.add_development_dependency "rubocop-rails", "~> 2.10.0"
59
64
  # spec.add_development_dependency "ruby-debug-ide"
60
65
  spec.add_development_dependency "simplecov", "~> 0.15"
61
66
  spec.add_development_dependency "timecop", "~> 0.9"
@@ -17,6 +17,6 @@ RSpec.describe Relaton::Config do
17
17
  end
18
18
 
19
19
  def restore_to_default_config
20
- Relaton.configuration.logs = %i(warning error)
20
+ Relaton.configuration.logs = %i(info error)
21
21
  end
22
22
  end
@@ -6,8 +6,8 @@ RSpec.describe Relaton::DbCache do
6
6
  cache_path = File.expand_path("~/.relaton/cache")
7
7
  FileUtils.mv cache_path, "relaton1/cache", force: true
8
8
  FileUtils.rm_rf %w(relaton)
9
- Relaton::DbCache.init_bib_caches(
10
- global_cache: true, local_cache: "", flush_caches: true
9
+ Relaton::Db.init_bib_caches(
10
+ global_cache: true, local_cache: "", flush_caches: true,
11
11
  )
12
12
  expect(File.exist?(cache_path)).to be true
13
13
  expect(File.exist?("relaton")).to be true
@@ -1,22 +1,62 @@
1
1
  RSpec.describe Relaton::Db do
2
2
  before(:each) { FileUtils.rm_rf %w[testcache testcache2] }
3
3
 
4
+ context "initialization in API mode" do
5
+ before(:each) { Relaton.configure { |c| c.api_mode = true } }
6
+ after(:each) { Relaton.configure { |c| c.api_mode = false } }
7
+
8
+ it do
9
+ db = Relaton::Db.new "cache", nil
10
+ cache = db.instance_variable_get :@db
11
+ expect(cache.dir).to eq "cache"
12
+ end
13
+
14
+ it "with default cache directory" do
15
+ db = Relaton::Db.init_bib_caches global_cache: true
16
+ cache = db.instance_variable_get :@db
17
+ expect(cache.dir).to eq "cache"
18
+ end
19
+ end
20
+
4
21
  context "modifing database" do
5
- it "move to new dir" do
6
- db = Relaton::Db.new "global_cache", "local_cache"
22
+ let(:db) { Relaton::Db.new "testcache", "testcache2" }
23
+
24
+ before(:each) do
7
25
  db.save_entry "ISO(ISO 123)", "<bibitem id='ISO123></bibitem>"
8
- expect(File.exist?("global_cache")).to be true
9
- expect(File.exist?("local_cache")).to be true
10
- db.mv "testcache", "testcache2"
11
- expect(File.exist?("testcache")).to be true
12
- expect(File.exist?("global_cache")).to be false
13
- expect(File.exist?("testcache2")).to be true
14
- expect(File.exist?("local_cache")).to be false
26
+ end
27
+
28
+ context "move to new dir" do
29
+ let(:db) { Relaton::Db.new "global_cache", "local_cache" }
30
+
31
+ after(:each) do
32
+ FileUtils.rm_rf "global_cache"
33
+ FileUtils.rm_rf "local_cache"
34
+ end
35
+
36
+ it "global cache" do
37
+ expect(File.exist?("global_cache")).to be true
38
+ expect(db.mv("testcache")).to eq "testcache"
39
+ expect(File.exist?("testcache")).to be true
40
+ expect(File.exist?("global_cache")).to be false
41
+ end
42
+
43
+ it "local cache" do
44
+ expect(File.exist?("local_cache")).to be true
45
+ expect(db.mv("testcache2", type: :local)).to eq "testcache2"
46
+ expect(File.exist?("testcache2")).to be true
47
+ expect(File.exist?("local_cache")).to be false
48
+ end
49
+ end
50
+
51
+ it "warn if moving in existed dir" do
52
+ expect(File).to receive(:exist?).with("new_cache_dir")
53
+ .and_return true
54
+ expect do
55
+ expect(db.mv("new_cache_dir")).to be_nil
56
+ end.to output(/\[relaton\] WARNING: target directory exists/).to_stderr
15
57
  end
16
58
 
17
59
  it "clear" do
18
- db = Relaton::Db.new "testcache", "testcache2"
19
- db.save_entry "ISO(ISO 123)", "<bibitem id='ISO123></bibitem>"
20
60
  expect(File.exist?("testcache/iso")).to be true
21
61
  expect(File.exist?("testcache2/iso")).to be true
22
62
  db.clear
@@ -134,12 +174,21 @@ RSpec.describe Relaton::Db do
134
174
  let(:queue) { Queue.new }
135
175
 
136
176
  it "success" do
137
- result = nil
138
- VCR.use_cassette "rfc_8341" do
139
- db.fetch_async("RFC 8341") { |r| queue << r }
140
- Timeout.timeout(5) { result = queue.pop }
177
+ refs = ["ITU-T G.993.5", "ITU-T G.994.1", "ITU-T H.264.1", "ITU-T H.740",
178
+ "ITU-T Y.1911", "ITU-T Y.2012", "ITU-T Y.2206", "ITU-T O.172",
179
+ "ITU-T G.780/Y.1351", "ITU-T G.711", "ITU-T G.1011"]
180
+ results = []
181
+ VCR.use_cassette "async_fetch", match_requests_on: %i[method uri body] do
182
+ refs.each do |ref|
183
+ db.fetch_async(ref) { |r| queue << r }
184
+ end
185
+ Timeout.timeout(60) do
186
+ refs.size.times { results << queue.pop }
187
+ end
188
+ end
189
+ results.each do |result|
190
+ expect(result).to be_instance_of RelatonItu::ItuBibliographicItem
141
191
  end
142
- expect(result).to be_instance_of RelatonIetf::IetfBibliographicItem
143
192
  end
144
193
 
145
194
  it "prefix not found" do
@@ -2,8 +2,8 @@ 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/
6
- ).to_stdout
5
+ /backend not_supported_gem not present/,
6
+ ).to_stderr
7
7
  end
8
8
 
9
9
  it "finds ISO processor" do
@@ -79,5 +79,13 @@ RSpec.describe Relaton::Registry do
79
79
  it "CIE" do
80
80
  expect(Relaton::Registry.instance.by_type("CIE")).to be_instance_of RelatonCie::Processor
81
81
  end
82
+
83
+ it "BSI" do
84
+ expect(Relaton::Registry.instance.by_type("BSI")).to be_instance_of RelatonBsi::Processor
85
+ end
86
+
87
+ it "CEN" do
88
+ expect(Relaton::Registry.instance.by_type("CEN")).to be_instance_of RelatonCen::Processor
89
+ end
82
90
  end
83
91
  end
@@ -0,0 +1,130 @@
1
+ RSpec.describe Relaton::Storage do
2
+ context "API mode" do
3
+ before(:each) do
4
+ Relaton.configure do |config|
5
+ config.api_mode = true
6
+ end
7
+ Singleton.__init__ Relaton::Storage
8
+ end
9
+
10
+ after(:each) do
11
+ Relaton.configure do |config|
12
+ config.api_mode = false
13
+ end
14
+ Singleton.__init__ Relaton::Storage
15
+ end
16
+
17
+ let(:storage) { Relaton::Storage.instance }
18
+ let(:bucket) { "test-bucket" }
19
+
20
+ it "save document to S3" do
21
+ dir = "cahche/iso"
22
+ # file = "doc.xml"
23
+ body = "<doc>Test doc</doc>"
24
+ key = File.join dir, "doc.xml"
25
+ client = double "AwsClient"
26
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket).twice
27
+ expect(client).to receive(:head_object).with(bucket: bucket, key: "cahche/iso/version")
28
+ expect(client).to receive(:put_object).with(
29
+ bucket: bucket, key: key, body: body,
30
+ content_type: "text/plain; charset=utf-8"
31
+ )
32
+ expect(Aws::S3::Client).to receive(:new).and_return client
33
+ storage.save dir, key, body
34
+ end
35
+
36
+ it "read document from S3" do
37
+ dir = "cahche/iso"
38
+ # file = "doc.xml"
39
+ body = "<doc>Test doc</doc>"
40
+ key = File.join dir, "doc"
41
+ client = double "AwsClient"
42
+ item = double "Item", key: "#{key}.xml"
43
+ list = double "List", contents: [item]
44
+ obj_body = double "Body", read: body
45
+ obj = double "Object", body: obj_body
46
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket).twice
47
+ expect(client).to receive(:list_objects_v2).with(bucket: bucket, prefix: "#{key}.").and_return list
48
+ expect(client).to receive(:get_object).with(bucket: bucket, key: "#{key}.xml").and_return obj
49
+ expect(Aws::S3::Client).to receive(:new).and_return client
50
+ expect(storage.get(key)).to eq body
51
+ end
52
+
53
+ it "delete document from S3" do
54
+ key = "cache/iso/doc"
55
+ client = double "AwsClient"
56
+ item = double "Item", key: "#{key}.xml"
57
+ list = double "List", contents: [item]
58
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket).twice
59
+ expect(client).to receive(:list_objects_v2).with(bucket: bucket, prefix: "#{key}.").and_return list
60
+ expect(client).to receive(:delete_object).with(bucket: bucket, key: "#{key}.xml")
61
+ expect(Aws::S3::Client).to receive(:new).and_return client
62
+ storage.delete key
63
+ end
64
+
65
+ it "return all the documents from S3" do
66
+ dir = "cahche/iso"
67
+ # file = "doc.xml"
68
+ body = "<doc>Test doc</doc>"
69
+ key = File.join dir, "doc.xml"
70
+ client = double "AwsClient"
71
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket).twice
72
+ item = double "Item", key: key
73
+ list = double "List", contents: [item]
74
+ obj_body = double "Body", read: body
75
+ obj = double "Object", body: obj_body
76
+ expect(client).to receive(:list_objects_v2).with(bucket: bucket, prefix: dir).and_return list
77
+ expect(client).to receive(:get_object).with(bucket: bucket, key: key).and_return obj
78
+ expect(Aws::S3::Client).to receive(:new).and_return client
79
+ contents = storage.all dir
80
+ expect(contents).to eq [body]
81
+ end
82
+
83
+ it "set version" do
84
+ dir = "cahche/iso"
85
+ key = File.join dir, "version"
86
+ hash = Relaton::Registry.instance.by_type("iso").grammar_hash
87
+ client = double "AwsClient"
88
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket).twice
89
+ # expect(ENV).to receive(:[]).and_call_original
90
+ error = Aws::S3::Errors::NotFound.new Seahorse::Client::RequestContext.new, ""
91
+ expect(client).to receive(:head_object).with(bucket: bucket, key: key)
92
+ .and_raise error
93
+ expect(client).to receive(:put_object).with(
94
+ bucket: bucket, key: key, body: hash,
95
+ content_type: "text/plain; charset=utf-8"
96
+ )
97
+ expect(Aws::S3::Client).to receive(:new).and_return client
98
+ storage.send :set_version, dir
99
+ end
100
+
101
+ context "check version" do
102
+ it "valid" do
103
+ dir = "cahche/iso"
104
+ key = File.join dir, "version"
105
+ hash = Relaton::Registry.instance.by_type("iso").grammar_hash
106
+ client = double "AwsClient"
107
+ obj_body = double "Body", read: hash
108
+ obj = double "Object", body: obj_body
109
+ expect(client).to receive(:get_object).with(bucket: bucket, key: key).and_return obj
110
+ expect(Aws::S3::Client).to receive(:new).and_return client
111
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket)
112
+ expect(storage.check_version?(dir)).to be true
113
+ end
114
+
115
+ it "version file doesn't exist" do
116
+ dir = "cahche/iso"
117
+ key = File.join dir, "version"
118
+ # hash = "invalid"
119
+ client = double "AwsClient"
120
+ # obj_body = double "Body", read: hash
121
+ # obj = double "Object", body: obj_body
122
+ error = Aws::S3::Errors::NoSuchKey.new Seahorse::Client::RequestContext.new, ""
123
+ expect(client).to receive(:get_object).with(bucket: bucket, key: key).and_raise error
124
+ expect(Aws::S3::Client).to receive(:new).and_return client
125
+ expect(ENV).to receive(:[]).with("AWS_BUCKET").and_return(bucket)
126
+ expect(storage.check_version?(dir)).to be false
127
+ end
128
+ end
129
+ end
130
+ end
data/spec/relaton_spec.rb CHANGED
@@ -6,7 +6,7 @@ RSpec.describe Relaton::Db do
6
6
 
7
7
  it "rejects an illegal reference prefix" do
8
8
  expect { @db.fetch("XYZ XYZ", nil, {}) }.to output(
9
- /does not have a recognised prefix/
9
+ /does not have a recognised prefix/,
10
10
  ).to_stderr
11
11
  end
12
12
 
@@ -38,7 +38,7 @@ RSpec.describe Relaton::Db do
38
38
  'type="standard">'
39
39
  testcache = Relaton::DbCache.new "testcache"
40
40
  expect(
41
- testcache.valid_entry?("ISO(ISO 19133:2005)", Date.today.year.to_s)
41
+ testcache.valid_entry?("ISO(ISO 19133:2005)", Date.today.year.to_s),
42
42
  ).to eq Date.today.year.to_s
43
43
  end
44
44
  end
@@ -60,8 +60,8 @@ RSpec.describe Relaton::Db do
60
60
  end
61
61
 
62
62
  it "gets sn ISO/AWI reference" do
63
- VCR.use_cassette "iso_awi_24229" do
64
- bib = @db.fetch "ISO/AWI 24229"
63
+ VCR.use_cassette "iso_awi_14093" do
64
+ bib = @db.fetch "ISO/AWI 14093"
65
65
  expect(bib).not_to be_nil
66
66
  end
67
67
  end
@@ -225,7 +225,7 @@ RSpec.describe Relaton::Db do
225
225
  end
226
226
 
227
227
  it "get OMG reference" do
228
- VCR.use_cassette "ogm_ami4ccm_1_0" do
228
+ VCR.use_cassette "omg_ami4ccm_1_0" do
229
229
  bib = @db.fetch "OMG AMI4CCM 1.0", nil, {}
230
230
  expect(bib).to be_instance_of RelatonOmg::OmgBibliographicItem
231
231
  end
@@ -278,6 +278,20 @@ RSpec.describe Relaton::Db do
278
278
  end
279
279
  end
280
280
 
281
+ it "get BSI reference" do
282
+ VCR.use_cassette "bsi_bs_en_iso_8848" do
283
+ bib = @db.fetch "BSI BS EN ISO 8848"
284
+ expect(bib).to be_instance_of RelatonBsi::BsiBibliographicItem
285
+ end
286
+ end
287
+
288
+ it "get CEN reference" do
289
+ VCR.use_cassette "cen_en_10160_1999" do
290
+ bib = @db.fetch "CEN EN 10160:1999"
291
+ expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
292
+ end
293
+ end
294
+
281
295
  context "get combined documents" do
282
296
  context "ISO" do
283
297
  it "included" do
@@ -331,17 +345,17 @@ RSpec.describe Relaton::Db do
331
345
  expect(bib.relation[0].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2"
332
346
  expect(bib.relation[1].type).to eq "complements"
333
347
  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"
348
+ expect(bib.relation[1].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2 Amd 1"
335
349
  expect(bib.relation[2].type).to eq "complements"
336
350
  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"
351
+ expect(bib.relation[2].bibitem.docidentifier[0].id).to eq "ITU-T G.989.2 Amd 2"
338
352
  end
339
353
  end
340
354
  end
341
355
 
342
356
  context "HIST" do
343
357
  it "included" do
344
- VCR.use_cassette "hist_cmbined_included" do
358
+ VCR.use_cassette "hist_combined_included" do
345
359
  bib = @db.fetch "NIST SP 800-38A, Add"
346
360
  expect(bib.docidentifier[0].id).to eq "NIST SP 800-38A, Add"
347
361
  expect(bib.relation[0].type).to eq "updates"
@@ -357,7 +371,7 @@ RSpec.describe Relaton::Db do
357
371
  context "version control" do
358
372
  before(:each) { @db.save_entry "iso(test_key)", "<bibitem><title>test_value</title></bibitem>" }
359
373
 
360
- it "shoudn't clear cacho if version isn't changed" do
374
+ it "shoudn't clear cache if version isn't changed" do
361
375
  testcache = @db.instance_variable_get :@db
362
376
  expect(testcache.all).to be_any
363
377
  testcache = @db.instance_variable_get :@local_db
@@ -368,11 +382,45 @@ RSpec.describe Relaton::Db do
368
382
  expect(File.read("testcache/iso/version", encoding: "UTF-8")).not_to eq "new_version"
369
383
  expect(File.read("testcache2/iso/version", encoding: "UTF-8")).not_to eq "new_version"
370
384
  processor = double
371
- expect(processor).to receive(:grammar_hash).and_return("new_version").exactly(4).times
372
- expect(Relaton::Registry.instance).to receive(:by_type).and_return(processor).exactly(4).times
385
+ expect(processor).to receive(:grammar_hash).and_return("new_version").exactly(2).times
386
+ expect(Relaton::Registry.instance).to receive(:by_type).and_return(processor).exactly(2).times
373
387
  Relaton::Db.new "testcache", "testcache2"
374
- expect(File.read("testcache/iso/version", encoding: "UTF-8")).to eq "new_version"
375
- expect(File.read("testcache2/iso/version", encoding: "UTF-8")).to eq "new_version"
388
+ expect(File.exist?("testcache/iso/version")).to eq false
389
+ expect(File.exist?("testcache2/iso/version")).to eq false
390
+ end
391
+ end
392
+
393
+ context "api.relaton.org" do
394
+ before(:each) do
395
+ Relaton.configure do |config|
396
+ config.use_api = true
397
+ config.api_host = "http://0.0.0.0:9292"
398
+ end
399
+ end
400
+
401
+ after(:each) do
402
+ Relaton.configure do |config|
403
+ config.use_api = false
404
+ end
405
+ end
406
+
407
+ it "get document" do
408
+ VCR.use_cassette "api_relaton_org", re_record_interval: nil do
409
+ bib = @db.fetch "ISO 19115-2", "2019"
410
+ expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
411
+ end
412
+ end
413
+
414
+ it "if unavailable then get document directly" do
415
+ expect(Net::HTTP).to receive(:get_response).and_wrap_original do |m, *args|
416
+ raise Errno::ECONNREFUSED if args[0].host == "0.0.0.0"
417
+
418
+ m.call(*args)
419
+ end.at_least :once
420
+ VCR.use_cassette "api_relaton_org_unavailable" do
421
+ bib = @db.fetch "ISO 19115-2", "2019"
422
+ expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
423
+ end
376
424
  end
377
425
  end
378
426
  end