relaton 1.15.3 → 1.15.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +15 -1
- data/lib/relaton/db.rb +8 -7
- data/lib/relaton/registry.rb +1 -0
- data/lib/relaton/version.rb +1 -1
- data/relaton.gemspec +1 -15
- data/spec/relaton/db_spec.rb +37 -34
- data/spec/relaton/registry_spec.rb +4 -0
- data/spec/relaton_spec.rb +18 -0
- data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +11310 -8
- data/spec/vcr_cassetes/api_relaton_org.yml +8 -8
- data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +2076 -1899
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +25 -21
- data/spec/vcr_cassetes/cie_001_1980.yml +25 -21
- data/spec/vcr_cassetes/doi_10_6028_nist_ir_8245.yml +9 -9
- data/spec/vcr_cassetes/ecma_6.yml +137 -132
- data/spec/vcr_cassetes/en_10160_1999.yml +9733 -9707
- data/spec/vcr_cassetes/ieee_528_2019.yml +2734 -2732
- data/spec/vcr_cassetes/iso_111111119115_1.yml +12 -11
- data/spec/vcr_cassetes/iso_19115_1.yml +2235 -2058
- data/spec/vcr_cassetes/iso_19115_1_2.yml +4322 -3967
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +2238 -2060
- data/spec/vcr_cassetes/iso_19133_2005.yml +2277 -2098
- data/spec/vcr_cassetes/iso_combined_applied.yml +4173 -3818
- data/spec/vcr_cassetes/iso_combined_included.yml +4173 -3818
- data/spec/vcr_cassetes/iso_dis.yml +1968 -1809
- data/spec/vcr_cassetes/ogc_19_025r1.yml +191 -186
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +834 -829
- data/spec/vcr_cassetes/rfc_8341.yml +110 -102
- metadata +6 -188
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 660a04548bc776f45c6675c93929f092b9b09bf787f9c5327a0e77c4657396d6
|
4
|
+
data.tar.gz: 524d02188fb9b718b051a9278f367b5ba96b1cc9b7e3f22e0ef289dc2e637104
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a888ab93816385d62c1a16e75dfdeeced6138793f89bd37b4b9570642c9ba6ab9fe2046185f514f0083e3a3293af4644b4e3232ef32c3786a58cc1c8afdb872a
|
7
|
+
data.tar.gz: 715fdef1a7536b2cb8e42f89bb0aaa32ff11684e38787acc58afbebd94ff93c8c017166af1b518b92e53af2fbb9375ae7907d672081aa25694d9c77d0e111744
|
data/Gemfile
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
|
-
|
2
|
+
|
3
3
|
# Specify your gem's dependencies in gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
+
gem "byebug", "~> 11.0"
|
7
|
+
gem "equivalent-xml", "~> 0.6"
|
8
|
+
gem "guard", "~> 2.14"
|
9
|
+
gem "guard-rspec", "~> 4.7"
|
10
|
+
gem "pry-byebug", "~> 3.9.0"
|
11
|
+
gem "rake", "~> 13.0"
|
12
|
+
gem "rspec", "~> 3.6"
|
13
|
+
gem "rubocop", "~> 1.17.0"
|
14
|
+
gem "rubocop-performance", "~> 1.11.0"
|
15
|
+
gem "rubocop-rails", "~> 2.10.0"
|
16
|
+
gem "simplecov", "~> 0.15"
|
17
|
+
gem "timecop", "~> 0.9"
|
18
|
+
gem "vcr", "~> 6"
|
19
|
+
gem "webmock", "~> 3.18"
|
data/lib/relaton/db.rb
CHANGED
@@ -33,11 +33,11 @@ module Relaton
|
|
33
33
|
end
|
34
34
|
|
35
35
|
##
|
36
|
-
# The class of reference requested is determined by the prefix of the
|
36
|
+
# The class of reference requested is determined by the prefix of the reference:
|
37
37
|
# GB Standard for gbbib, IETF for ietfbib, ISO for isobib, IEC or IEV for
|
38
38
|
# iecbib,
|
39
39
|
#
|
40
|
-
# @param
|
40
|
+
# @param text [String] the standard reference to look up (e.g. "ISO 9000")
|
41
41
|
# @param year [String] the year the standard was published (optional)
|
42
42
|
#
|
43
43
|
# @param opts [Hash] options
|
@@ -55,14 +55,15 @@ module Relaton
|
|
55
55
|
# RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
|
56
56
|
# RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
|
57
57
|
##
|
58
|
-
def fetch(
|
59
|
-
|
58
|
+
def fetch(text, year = nil, opts = {})
|
59
|
+
reference = text.strip
|
60
|
+
stdclass = @registry.class_by_ref(reference) || return
|
60
61
|
processor = @registry.processors[stdclass]
|
61
62
|
ref = if processor.respond_to?(:urn_to_code)
|
62
|
-
processor.urn_to_code(
|
63
|
-
else
|
63
|
+
processor.urn_to_code(reference)&.first
|
64
|
+
else reference
|
64
65
|
end
|
65
|
-
ref ||=
|
66
|
+
ref ||= reference
|
66
67
|
result = combine_doc ref, year, opts, stdclass
|
67
68
|
result || check_bibliocache(ref, year, opts, stdclass)
|
68
69
|
end
|
data/lib/relaton/registry.rb
CHANGED
@@ -10,6 +10,7 @@ module Relaton
|
|
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
12
|
relaton_cen relaton_iana relaton_3gpp relaton_oasis relaton_doi relaton_jis
|
13
|
+
relaton_xsf
|
13
14
|
].freeze
|
14
15
|
|
15
16
|
include Singleton
|
data/lib/relaton/version.rb
CHANGED
data/relaton.gemspec
CHANGED
@@ -52,19 +52,5 @@ Gem::Specification.new do |spec|
|
|
52
52
|
spec.add_dependency "relaton-omg", "~> 1.14.0"
|
53
53
|
spec.add_dependency "relaton-un", "~> 1.14.0"
|
54
54
|
spec.add_dependency "relaton-w3c", "~> 1.14.0"
|
55
|
-
|
56
|
-
spec.add_development_dependency "byebug", "~> 11.0"
|
57
|
-
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
58
|
-
spec.add_development_dependency "guard", "~> 2.14"
|
59
|
-
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
60
|
-
spec.add_development_dependency "pry-byebug", "~> 3.9.0"
|
61
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
62
|
-
spec.add_development_dependency "rspec", "~> 3.6"
|
63
|
-
spec.add_development_dependency "rubocop", "~> 1.17.0"
|
64
|
-
spec.add_development_dependency "rubocop-performance", "~> 1.11.0"
|
65
|
-
spec.add_development_dependency "rubocop-rails", "~> 2.10.0"
|
66
|
-
spec.add_development_dependency "simplecov", "~> 0.15"
|
67
|
-
spec.add_development_dependency "timecop", "~> 0.9"
|
68
|
-
spec.add_development_dependency "vcr", "~> 6"
|
69
|
-
spec.add_development_dependency "webmock"
|
55
|
+
spec.add_dependency "relaton-xsf", "~> 1.14.0"
|
70
56
|
end
|
data/spec/relaton/db_spec.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
RSpec.describe Relaton::Db do
|
2
2
|
before(:each) { FileUtils.rm_rf %w[testcache testcache2] }
|
3
|
+
subject { Relaton::Db.new nil, nil }
|
3
4
|
|
4
5
|
context "instance methods" do
|
5
|
-
subject { Relaton::Db.new nil, nil }
|
6
|
-
|
7
6
|
context "#search_edition_year" do
|
8
7
|
it "create bibitem from YAML content" do
|
9
8
|
h = { "docid" => [{ "id" => "ISO 123", type: "ISO", "primary" => true }] }
|
@@ -164,21 +163,33 @@ RSpec.describe Relaton::Db do
|
|
164
163
|
expect(db.docid_type("CN(GB/T 1.1)")).to eq ["Chinese Standard", "GB/T 1.1"]
|
165
164
|
end
|
166
165
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
174
|
-
end
|
175
|
-
|
176
|
-
it "fetch when no local db" do
|
177
|
-
db = Relaton::Db.new "testcache", nil
|
178
|
-
VCR.use_cassette "iso_19115_1" do
|
179
|
-
bib = db.fetch("ISO 19115-1", nil, {})
|
166
|
+
context "#fetch" do
|
167
|
+
it "doesn't use cache" do
|
168
|
+
docid = RelatonBib::DocumentIdentifier.new id: "ISO 19115-1", type: "ISO"
|
169
|
+
item = RelatonIsoBib::IsoBibliographicItem.new docid: [docid]
|
170
|
+
expect(RelatonIso::IsoBibliography).to receive(:get).with("ISO 19115-1", nil, {}).and_return item
|
171
|
+
bib = subject.fetch("ISO 19115-1", nil, {})
|
180
172
|
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
181
173
|
end
|
174
|
+
|
175
|
+
it "when no local db" do
|
176
|
+
db = Relaton::Db.new "testcache", nil
|
177
|
+
VCR.use_cassette "iso_19115_1" do
|
178
|
+
bib = db.fetch("ISO 19115-1", nil, {})
|
179
|
+
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
it "document with net retries" do
|
184
|
+
expect(subject.instance_variable_get(:@registry).processors[:relaton_ietf]).to receive(:get)
|
185
|
+
.and_raise(RelatonBib::RequestError).exactly(3).times
|
186
|
+
expect { subject.fetch "RFC 8341", nil, retries: 3 }.to raise_error RelatonBib::RequestError
|
187
|
+
end
|
188
|
+
|
189
|
+
it "strip reference" do
|
190
|
+
expect(subject).to receive(:combine_doc).with("ISO 19115-1", nil, {}, :relaton_iso).and_return :doc
|
191
|
+
expect(subject.fetch(" ISO 19115-1 ", nil, {})).to be :doc
|
192
|
+
end
|
182
193
|
end
|
183
194
|
|
184
195
|
it "fetch std" do
|
@@ -189,15 +200,7 @@ RSpec.describe Relaton::Db do
|
|
189
200
|
end
|
190
201
|
end
|
191
202
|
|
192
|
-
it "fetch document with net retries" do
|
193
|
-
db = Relaton::Db.new nil, nil
|
194
|
-
expect(db.instance_variable_get(:@registry).processors[:relaton_ietf]).to receive(:get)
|
195
|
-
.and_raise(RelatonBib::RequestError).exactly(3).times
|
196
|
-
expect { db.fetch "RFC 8341", nil, retries: 3 }.to raise_error RelatonBib::RequestError
|
197
|
-
end
|
198
|
-
|
199
203
|
context "async fetch" do
|
200
|
-
let(:db) { Relaton::Db.new nil, nil }
|
201
204
|
let(:queue) { Queue.new }
|
202
205
|
|
203
206
|
it "success" do
|
@@ -206,8 +209,8 @@ RSpec.describe Relaton::Db do
|
|
206
209
|
"ITU-T G.780/Y.1351", "ITU-T G.711", "ITU-T G.1011"]
|
207
210
|
results = []
|
208
211
|
refs.each do |ref|
|
209
|
-
expect(
|
210
|
-
|
212
|
+
expect(subject).to receive(:fetch).with(ref, nil, {}).and_return :result
|
213
|
+
subject.fetch_async(ref) { |r| queue << [r, ref] }
|
211
214
|
end
|
212
215
|
Timeout.timeout(60) { refs.size.times { results << queue.pop } }
|
213
216
|
results.each do |result|
|
@@ -220,8 +223,8 @@ RSpec.describe Relaton::Db do
|
|
220
223
|
"CGPM -- Réunion 9 (1948)", "CGPM -- Meeting 9 (1948)"]
|
221
224
|
results = []
|
222
225
|
refs.each do |ref|
|
223
|
-
expect(
|
224
|
-
|
226
|
+
expect(subject).to receive(:fetch).with(ref, nil, {}).and_return :result
|
227
|
+
subject.fetch_async(ref) { |r| queue << [r, ref] }
|
225
228
|
end
|
226
229
|
Timeout.timeout(60) { refs.size.times { results << queue.pop } }
|
227
230
|
results.each do |result|
|
@@ -232,23 +235,23 @@ RSpec.describe Relaton::Db do
|
|
232
235
|
it "prefix not found" do
|
233
236
|
result = ""
|
234
237
|
VCR.use_cassette "rfc_unsuccess" do
|
235
|
-
|
238
|
+
subject.fetch_async("ABC 123456") { |r| queue << r }
|
236
239
|
Timeout.timeout(5) { result = queue.pop }
|
237
240
|
end
|
238
241
|
expect(result).to be_nil
|
239
242
|
end
|
240
243
|
|
241
244
|
it "handle HTTP request error" do
|
242
|
-
expect(
|
243
|
-
|
245
|
+
expect(subject).to receive(:fetch).and_raise RelatonBib::RequestError
|
246
|
+
subject.fetch_async("ISO REF") { |r| queue << r }
|
244
247
|
result = Timeout.timeout(5) { queue.pop }
|
245
248
|
expect(result).to be_instance_of RelatonBib::RequestError
|
246
249
|
end
|
247
250
|
|
248
251
|
it "handle other errors" do
|
249
|
-
expect(
|
252
|
+
expect(subject).to receive(:fetch).and_raise Errno::EACCES
|
250
253
|
expect do
|
251
|
-
|
254
|
+
subject.fetch_async("ISO REF") { |r| queue << r }
|
252
255
|
result = Timeout.timeout(5) { queue.pop }
|
253
256
|
expect(result).to be_nil
|
254
257
|
end.to output("[relaton] ERROR: ISO REF -- Permission denied\n").to_stderr
|
@@ -258,8 +261,8 @@ RSpec.describe Relaton::Db do
|
|
258
261
|
expect(ENV).to receive(:[]).with("RELATON_FETCH_PARALLEL").and_return(1)
|
259
262
|
allow(ENV).to receive(:[]).and_call_original
|
260
263
|
expect(Relaton::WorkersPool).to receive(:new).with(1).and_call_original
|
261
|
-
expect(
|
262
|
-
|
264
|
+
expect(subject).to receive(:fetch).with("ITU-T G.993.5", nil, {})
|
265
|
+
subject.fetch_async("ITU-T G.993.5") { |r| queue << r }
|
263
266
|
Timeout.timeout(50) { queue.pop }
|
264
267
|
end
|
265
268
|
end
|
@@ -109,6 +109,10 @@ RSpec.describe Relaton::Registry do
|
|
109
109
|
it "JIS" do
|
110
110
|
expect(Relaton::Registry.instance.by_type("JIS")).to be_instance_of RelatonJis::Processor
|
111
111
|
end
|
112
|
+
|
113
|
+
it "XSF" do
|
114
|
+
expect(Relaton::Registry.instance.by_type("XEP")).to be_instance_of RelatonXsf::Processor
|
115
|
+
end
|
112
116
|
end
|
113
117
|
|
114
118
|
it "find processot by dataset" do
|
data/spec/relaton_spec.rb
CHANGED
@@ -327,6 +327,24 @@ RSpec.describe Relaton::Db do
|
|
327
327
|
expect(bib).to be_instance_of RelatonBib::BibliographicItem
|
328
328
|
end
|
329
329
|
|
330
|
+
it "get JIS reference" do
|
331
|
+
docid = RelatonBib::DocumentIdentifier.new(id: "JIS X 0001", type: "JIS")
|
332
|
+
item = RelatonJis::BibliographicItem.new docid: [docid]
|
333
|
+
expect(RelatonJis::Bibliography).to receive(:get).with("JIS X 0001", nil, {}).and_return item
|
334
|
+
bib = @db.fetch "JIS X 0001"
|
335
|
+
expect(bib).to be_instance_of RelatonJis::BibliographicItem
|
336
|
+
expect(bib.docidentifier.first.id).to eq "JIS X 0001"
|
337
|
+
end
|
338
|
+
|
339
|
+
it "get XSF reference" do
|
340
|
+
docid = RelatonBib::DocumentIdentifier.new(id: "XEP 0001", type: "XSF")
|
341
|
+
item = RelatonXsf::BibliographicItem.new docid: [docid]
|
342
|
+
expect(RelatonXsf::Bibliography).to receive(:get).with("XEP 0001", nil, {}).and_return item
|
343
|
+
bib = @db.fetch "XEP 0001"
|
344
|
+
expect(bib).to be_instance_of RelatonXsf::BibliographicItem
|
345
|
+
expect(bib.docidentifier.first.id).to eq "XEP 0001"
|
346
|
+
end
|
347
|
+
|
330
348
|
context "get combined documents" do
|
331
349
|
context "ISO" do
|
332
350
|
it "included" do
|