relaton 1.11.2 → 1.11.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +1 -5
- data/.rubocop.yml +1 -1
- data/docs/README.adoc +0 -13
- data/lib/relaton/db.rb +29 -54
- data/lib/relaton/db_cache.rb +6 -6
- data/lib/relaton/registry.rb +28 -0
- data/lib/relaton/version.rb +1 -1
- data/relaton.gemspec +2 -2
- data/spec/relaton/db_spec.rb +40 -57
- data/spec/relaton/registry_spec.rb +1 -0
- data/spec/relaton_spec.rb +8 -11
- data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +10 -11
- data/spec/vcr_cassetes/async_fetch.yml +1374 -1461
- data/spec/vcr_cassetes/bipm_i18n_async_fetch.yml +620 -0
- data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +12 -14
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +11 -13
- data/spec/vcr_cassetes/cie_001_1980.yml +8 -9
- data/spec/vcr_cassetes/ecma_6.yml +8 -9
- data/spec/vcr_cassetes/en_10160_1999.yml +30 -34
- data/spec/vcr_cassetes/fisp_140.yml +7 -8
- data/spec/vcr_cassetes/gb_t_20223_2006.yml +7 -9
- data/spec/vcr_cassetes/iana_service_names_port_numbers.yml +10 -11
- data/spec/vcr_cassetes/iec_60050_102_2007.yml +24 -29
- data/spec/vcr_cassetes/iec_combined_included.yml +72 -87
- data/spec/vcr_cassetes/ieee_528_2019.yml +128 -127
- data/spec/vcr_cassetes/iho_b_11.yml +8 -9
- data/spec/vcr_cassetes/iso_111111119115_1.yml +4 -5
- data/spec/vcr_cassetes/iso_19115_1.yml +17 -21
- data/spec/vcr_cassetes/iso_19115_1_2.yml +32 -40
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +20 -24
- data/spec/vcr_cassetes/iso_19133_2005.yml +19 -23
- data/spec/vcr_cassetes/iso_combined_applied.yml +30 -38
- data/spec/vcr_cassetes/iso_combined_included.yml +31 -39
- data/spec/vcr_cassetes/iso_dis_14093.yml +16 -20
- data/spec/vcr_cassetes/itu_combined_included.yml +183 -309
- data/spec/vcr_cassetes/oasis_amqp_core_types_v1_0_pt1.yml +11 -12
- data/spec/vcr_cassetes/ogc_19_025r1.yml +12 -13
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +5 -6
- data/spec/vcr_cassetes/rfc_8341.yml +113 -26
- data/spec/vcr_cassetes/sp_800_38b.yml +7 -8
- data/spec/vcr_cassetes/threads_from_env.yml +58 -66
- data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +30 -35
- data/spec/vcr_cassetes/w3c_json_ld11.yml +45 -26
- metadata +4 -12
- data/globalcache/iec/iec_60050_102_2007.xml +0 -58
- data/globalcache/iec/version +0 -1
- data/lib/relaton/static_cache/iso/iso_iec_dir_1.yml +0 -33
- data/lib/relaton/static_cache/iso/iso_iec_dir_1_iec_sup.yml +0 -32
- data/lib/relaton/static_cache/iso/iso_iec_dir_1_iso_sup.yml +0 -39
- data/lib/relaton/static_cache/iso/iso_iec_dir_2_iec.yml +0 -32
- data/lib/relaton/static_cache/iso/iso_iec_dir_2_iso.yml +0 -39
- data/lib/relaton/static_cache/iso/iso_iec_dir_iec_sup.yml +0 -32
- data/lib/relaton/static_cache/iso/iso_iec_dir_jtc_1_sup.yml +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c30099df631e2cbb313f936f4d6a339d9a0767c6d81f3e9523f6013ce95e77a
|
4
|
+
data.tar.gz: 9413dc9a5806d1b7a997c68298029407a5bc5fb0daa92e8c7f19c66b8b285bd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33f734e4a386c381de112a99f649c54a586c1367cf91065a693235c8c7252a414a38bffa589de960c3cb4564ab08a0311557c38e08804566ac06a8baf6207de7
|
7
|
+
data.tar.gz: d0e46c2f6ad5ac0263de42c693db297786b583da4a9b86fe2f3db9f2807e6fdd98c9934ff892d362f1e6a53f2c6cf9a8856b66f405b7fc8270c99f198b9a46b3
|
data/.github/workflows/rake.yml
CHANGED
@@ -16,7 +16,7 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
ruby: [ '3.0', '2.7', '2.6'
|
19
|
+
ruby: [ '3.0', '2.7', '2.6' ]
|
20
20
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
21
21
|
experimental: [ false ]
|
22
22
|
steps:
|
@@ -24,10 +24,6 @@ jobs:
|
|
24
24
|
with:
|
25
25
|
submodules: true
|
26
26
|
|
27
|
-
# https://github.com/ruby-debug/debase/issues/89#issuecomment-686827382
|
28
|
-
- if: matrix.os == 'macos-latest' && matrix.ruby == '2.5'
|
29
|
-
run: echo BUNDLE_BUILD__DEBASE="--with-cflags=\"-Wno-error=implicit-function-declaration\"" >> $GITHUB_ENV
|
30
|
-
|
31
27
|
- uses: ruby/setup-ruby@v1
|
32
28
|
with:
|
33
29
|
ruby-version: ${{ matrix.ruby }}
|
data/.rubocop.yml
CHANGED
data/docs/README.adoc
CHANGED
@@ -331,19 +331,6 @@ items[0].docidentifier[0].id
|
|
331
331
|
=> "ISO 19011 (all parts)"
|
332
332
|
----
|
333
333
|
|
334
|
-
=== Static DB
|
335
|
-
|
336
|
-
This gem has a static DB which is distributed with it. Now the static contains documents:
|
337
|
-
----
|
338
|
-
ISO/IEC DIR 1 IEC SUP
|
339
|
-
ISO/IEC DIR 1 ISO SUP
|
340
|
-
ISO/IEC DIR 1
|
341
|
-
ISO/IEC DIR 2 IEC
|
342
|
-
ISO/IEC DIR 2 ISO
|
343
|
-
ISO/IEC DIR IEC SUP
|
344
|
-
ISO/IEC DIR 1 JTC SUP
|
345
|
-
----
|
346
|
-
|
347
334
|
=== Get document type
|
348
335
|
[source,ruby]
|
349
336
|
----
|
data/lib/relaton/db.rb
CHANGED
@@ -11,11 +11,9 @@ module Relaton
|
|
11
11
|
def initialize(global_cache, local_cache)
|
12
12
|
@registry = Relaton::Registry.instance
|
13
13
|
gpath = global_cache && File.expand_path(global_cache)
|
14
|
-
@db = open_cache_biblio(gpath
|
14
|
+
@db = open_cache_biblio(gpath)
|
15
15
|
lpath = local_cache && File.expand_path(local_cache)
|
16
|
-
@local_db = open_cache_biblio(lpath
|
17
|
-
@static_db = open_cache_biblio File.expand_path("../relaton/static_cache",
|
18
|
-
__dir__)
|
16
|
+
@local_db = open_cache_biblio(lpath)
|
19
17
|
@queues = {}
|
20
18
|
@semaphore = Mutex.new
|
21
19
|
end
|
@@ -63,7 +61,7 @@ module Relaton
|
|
63
61
|
# RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
|
64
62
|
##
|
65
63
|
def fetch(code, year = nil, opts = {})
|
66
|
-
stdclass =
|
64
|
+
stdclass = @registry.class_by_ref(code) || return
|
67
65
|
processor = @registry.processors[stdclass]
|
68
66
|
ref = if processor.respond_to?(:urn_to_code)
|
69
67
|
processor.urn_to_code(code)&.first
|
@@ -87,9 +85,7 @@ module Relaton
|
|
87
85
|
# @param year [Integer, nil]
|
88
86
|
# @return [Array]
|
89
87
|
def fetch_all(text = nil, edition: nil, year: nil)
|
90
|
-
result =
|
91
|
-
search_yml file, yml, text, edition, year
|
92
|
-
end.compact
|
88
|
+
result = []
|
93
89
|
db = @db || @local_db
|
94
90
|
if db
|
95
91
|
result += db.all do |file, xml|
|
@@ -99,9 +95,18 @@ module Relaton
|
|
99
95
|
result
|
100
96
|
end
|
101
97
|
|
98
|
+
#
|
102
99
|
# Fetch asynchronously
|
103
|
-
|
104
|
-
|
100
|
+
#
|
101
|
+
# @param [String] ref reference
|
102
|
+
# @param [String] year document yer
|
103
|
+
# @param [Hash] opts options
|
104
|
+
#
|
105
|
+
# @return [RelatonBib::BibliographicItem, RelatonBib::RequestError, nil] bibitem if document is found,
|
106
|
+
# request error if server doesn't answer, nil if document not found
|
107
|
+
#
|
108
|
+
def fetch_async(ref, year = nil, opts = {}, &block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
109
|
+
stdclass = @registry.class_by_ref ref
|
105
110
|
if stdclass
|
106
111
|
unless @queues[stdclass]
|
107
112
|
processor = @registry.processors[stdclass]
|
@@ -110,11 +115,14 @@ module Relaton
|
|
110
115
|
args[3].call fetch(*args[0..2])
|
111
116
|
rescue RelatonBib::RequestError => e
|
112
117
|
args[3].call e
|
118
|
+
rescue StandardError => e
|
119
|
+
Util.log "[relaton] ERROR: #{args[0]} -- #{e.message}", :error
|
120
|
+
args[3].call nil
|
113
121
|
end
|
114
122
|
@queues[stdclass] = { queue: Queue.new, workers_pool: wp }
|
115
123
|
Thread.new { process_queue @queues[stdclass] }
|
116
124
|
end
|
117
|
-
@queues[stdclass][:queue] << [
|
125
|
+
@queues[stdclass][:queue] << [ref, year, opts, block]
|
118
126
|
else yield nil
|
119
127
|
end
|
120
128
|
end
|
@@ -142,7 +150,7 @@ module Relaton
|
|
142
150
|
@registry.processors.each do |name, processor|
|
143
151
|
std = name if processor.prefix == stdclass
|
144
152
|
end
|
145
|
-
std =
|
153
|
+
std = @registry.class_by_ref(code) or return nil unless std
|
146
154
|
|
147
155
|
check_bibliocache(code, year, opts, std)
|
148
156
|
end
|
@@ -151,8 +159,8 @@ module Relaton
|
|
151
159
|
# @param code [String]
|
152
160
|
# @return [Array]
|
153
161
|
def docid_type(code)
|
154
|
-
stdclass =
|
155
|
-
|
162
|
+
stdclass = @registry.class_by_ref(code) or return [nil, code]
|
163
|
+
_, code = strip_id_wrapper(code, stdclass)
|
156
164
|
[@registry.processors[stdclass].idtype, code]
|
157
165
|
end
|
158
166
|
|
@@ -187,19 +195,6 @@ module Relaton
|
|
187
195
|
|
188
196
|
private
|
189
197
|
|
190
|
-
# @param file [String] file path
|
191
|
-
# @param yml [String] content in YAML format
|
192
|
-
# @param text [String, nil] text to serach
|
193
|
-
# @param edition [String, nil] edition to filter
|
194
|
-
# @param year [Integer, nil] year to filter
|
195
|
-
# @return [BibliographicItem, nil]
|
196
|
-
def search_yml(file, yml, text, edition, year)
|
197
|
-
item = search_edition_year(file, yml, edition, year)
|
198
|
-
return unless item
|
199
|
-
|
200
|
-
item if match_xml_text(item.to_xml(bibdata: true), text)
|
201
|
-
end
|
202
|
-
|
203
198
|
# @param file [String] file path
|
204
199
|
# @param xml [String] content in XML format
|
205
200
|
# @param text [String, nil] text to serach
|
@@ -218,7 +213,7 @@ module Relaton
|
|
218
213
|
# @param year [Integer, nil] year to filter
|
219
214
|
# @return [BibliographicItem, nil]
|
220
215
|
def search_edition_year(file, content, edition, year) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
221
|
-
processor = @registry.
|
216
|
+
processor = @registry.processor_by_ref(file.split("/")[-2])
|
222
217
|
item = if file.match?(/xml$/) then processor.from_xml(content)
|
223
218
|
else processor.hash_to_bib(YAML.safe_load(content))
|
224
219
|
end
|
@@ -269,7 +264,7 @@ module Relaton
|
|
269
264
|
type: "updates")
|
270
265
|
end
|
271
266
|
divider = stdclass == :relaton_itu ? " " : "/"
|
272
|
-
refs[1
|
267
|
+
refs[1..].each_with_object(doc) do |c, d|
|
273
268
|
bib = check_bibliocache(ref + divider + c, year, opts, stdclass)
|
274
269
|
if bib
|
275
270
|
d.relation << RelatonBib::DocumentRelation.new(
|
@@ -279,18 +274,6 @@ module Relaton
|
|
279
274
|
end
|
280
275
|
end
|
281
276
|
|
282
|
-
# @param code [String] code of standard
|
283
|
-
# @return [Symbol] standard class name
|
284
|
-
def standard_class(code)
|
285
|
-
@registry.processors.each do |name, processor|
|
286
|
-
return name if /^(urn:)?#{processor.prefix}/i.match?(code) ||
|
287
|
-
processor.defaultprefix.match(code)
|
288
|
-
end
|
289
|
-
Util.log <<~WARN, :info
|
290
|
-
[relaton] #{code} does not have a recognised prefix
|
291
|
-
WARN
|
292
|
-
end
|
293
|
-
|
294
277
|
# TODO: i18n
|
295
278
|
# Fofmat ID
|
296
279
|
# @param code [String]
|
@@ -358,11 +341,6 @@ module Relaton
|
|
358
341
|
# RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
|
359
342
|
def check_bibliocache(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
360
343
|
id, searchcode = std_id(code, year, opts, stdclass)
|
361
|
-
yaml = @static_db[id]
|
362
|
-
if yaml
|
363
|
-
return @registry.processors[stdclass].hash_to_bib YAML.safe_load(yaml)
|
364
|
-
end
|
365
|
-
|
366
344
|
db = @local_db || @db
|
367
345
|
altdb = @local_db && @db ? @db : nil
|
368
346
|
if db.nil?
|
@@ -390,8 +368,8 @@ module Relaton
|
|
390
368
|
else
|
391
369
|
return bib_retval(db[id], stdclass) if opts[:fetch_db]
|
392
370
|
|
393
|
-
|
394
|
-
|
371
|
+
entry = new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id) unless db[id]
|
372
|
+
@semaphore.synchronize { db[id] ||= entry }
|
395
373
|
end
|
396
374
|
bib_retval(db[id], stdclass)
|
397
375
|
end
|
@@ -450,13 +428,11 @@ module Relaton
|
|
450
428
|
end
|
451
429
|
|
452
430
|
# @param dir [String, nil] DB directory
|
453
|
-
# @param type [Symbol]
|
454
431
|
# @return [Relaton::DbCache, NilClass]
|
455
|
-
def open_cache_biblio(dir
|
432
|
+
def open_cache_biblio(dir) # rubocop:disable Metrics/MethodLength
|
456
433
|
return nil if dir.nil?
|
457
434
|
|
458
|
-
db = DbCache.new dir
|
459
|
-
return db if type == :static
|
435
|
+
db = DbCache.new dir
|
460
436
|
|
461
437
|
Dir["#{dir}/*/"].each do |fdir|
|
462
438
|
next if db.check_version?(fdir)
|
@@ -464,8 +440,7 @@ module Relaton
|
|
464
440
|
FileUtils.rm_rf(fdir, secure: true)
|
465
441
|
Util.log(
|
466
442
|
"[relaton] WARNING: cache #{fdir}: version is obsolete and cache is "\
|
467
|
-
|
468
|
-
:warning
|
443
|
+
"cleared.", :warning
|
469
444
|
)
|
470
445
|
end
|
471
446
|
db
|
data/lib/relaton/db_cache.rb
CHANGED
@@ -32,7 +32,7 @@ module Relaton
|
|
32
32
|
|
33
33
|
# Clear database
|
34
34
|
def clear
|
35
|
-
FileUtils.rm_rf Dir.glob "#{dir}/*"
|
35
|
+
FileUtils.rm_rf Dir.glob "#{dir}/*"
|
36
36
|
end
|
37
37
|
|
38
38
|
# Save item
|
@@ -86,7 +86,7 @@ module Relaton
|
|
86
86
|
value = self[key]
|
87
87
|
return unless value
|
88
88
|
|
89
|
-
if value.match?
|
89
|
+
if value.match?(/^not_found/)
|
90
90
|
value.match(/\d{4}-\d{2}-\d{2}/).to_s
|
91
91
|
else
|
92
92
|
doc = Nokogiri::XML value
|
@@ -115,7 +115,7 @@ module Relaton
|
|
115
115
|
# @param fdir [String] dir pathe to flover cache
|
116
116
|
# @return [TrueClass, FalseClass]
|
117
117
|
def check_version?(fdir)
|
118
|
-
version_dir = fdir
|
118
|
+
version_dir = "#{fdir}/version"
|
119
119
|
return false unless File.exist? version_dir
|
120
120
|
|
121
121
|
v = File.read version_dir, encoding: "utf-8"
|
@@ -179,9 +179,9 @@ module Relaton
|
|
179
179
|
# @param key [String]
|
180
180
|
# @return [String]
|
181
181
|
def filename(key)
|
182
|
-
prefcode = key.downcase.match
|
182
|
+
prefcode = key.downcase.match(/^(?<prefix>[^(]+)\((?<code>[^)]+)/)
|
183
183
|
fn = if prefcode
|
184
|
-
"#{prefcode[:prefix]}/#{prefcode[:code].gsub(/[-:\s
|
184
|
+
"#{prefcode[:prefix]}/#{prefcode[:code].gsub(/[-:\s\/()]/, '_').squeeze('_')}"
|
185
185
|
else
|
186
186
|
key.gsub(/[-:\s]/, "_")
|
187
187
|
end
|
@@ -208,7 +208,7 @@ module Relaton
|
|
208
208
|
# @param key [String]
|
209
209
|
# @return [String]
|
210
210
|
def prefix(key)
|
211
|
-
key.downcase.match(/^[
|
211
|
+
key.downcase.match(/^[^(]+(?=\()/).to_s
|
212
212
|
end
|
213
213
|
|
214
214
|
# @param file [String]
|
data/lib/relaton/registry.rb
CHANGED
@@ -77,6 +77,34 @@ module Relaton
|
|
77
77
|
processors.values.detect { |v| v.prefix == type&.upcase }
|
78
78
|
end
|
79
79
|
|
80
|
+
#
|
81
|
+
# Find processor by reference or prefix
|
82
|
+
#
|
83
|
+
# @param [String] ref reference or prefix
|
84
|
+
#
|
85
|
+
# @return [Relaton::Processor] processor
|
86
|
+
#
|
87
|
+
def processor_by_ref(ref)
|
88
|
+
@processors[class_by_ref(ref)]
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# Find processor by refernce or prefix
|
93
|
+
#
|
94
|
+
# @param ref [String] reference or prefix
|
95
|
+
#
|
96
|
+
# @return [Symbol, nil] standard class name
|
97
|
+
#
|
98
|
+
def class_by_ref(ref)
|
99
|
+
@processors.each do |class_name, processor|
|
100
|
+
return class_name if /^(urn:)?#{processor.prefix}(?!\w)/i.match?(ref) ||
|
101
|
+
processor.defaultprefix.match(ref)
|
102
|
+
end
|
103
|
+
Util.log <<~WARN, :info
|
104
|
+
[relaton] #{ref} does not have a recognised prefix
|
105
|
+
WARN
|
106
|
+
end
|
107
|
+
|
80
108
|
private
|
81
109
|
|
82
110
|
def camel_case(gem_name)
|
data/lib/relaton/version.rb
CHANGED
data/relaton.gemspec
CHANGED
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.bindir = "bin"
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
spec.files = `git ls-files`.split("\n")
|
29
|
-
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
30
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
29
|
+
# spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
30
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
|
31
31
|
|
32
32
|
spec.add_dependency "relaton-3gpp", "~> 1.11.0"
|
33
33
|
spec.add_dependency "relaton-bipm", "~> 1.11.0"
|
data/spec/relaton/db_spec.rb
CHANGED
@@ -75,9 +75,9 @@ RSpec.describe Relaton::Db do
|
|
75
75
|
|
76
76
|
it "all documents" do
|
77
77
|
items = db.fetch_all
|
78
|
-
expect(items.size).to be
|
79
|
-
expect(items[
|
80
|
-
expect(items[
|
78
|
+
expect(items.size).to be 2
|
79
|
+
expect(items[0]).to be_instance_of RelatonIec::IecBibliographicItem
|
80
|
+
expect(items[1]).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
81
81
|
end
|
82
82
|
|
83
83
|
context "search for text" do
|
@@ -93,8 +93,8 @@ RSpec.describe Relaton::Db do
|
|
93
93
|
items = db.fetch_all "123"
|
94
94
|
expect(items.size).to eq 2
|
95
95
|
items = db.fetch_all "ISO"
|
96
|
-
expect(items.size).to eq
|
97
|
-
expect(items[
|
96
|
+
expect(items.size).to eq 1
|
97
|
+
expect(items[0].id).to eq "ISO123"
|
98
98
|
end
|
99
99
|
|
100
100
|
it "and fail" do
|
@@ -163,19 +163,32 @@ 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)
|
167
|
-
queue << [r, ref]
|
168
|
-
end
|
169
|
-
end
|
170
|
-
Timeout.timeout(60) do
|
171
|
-
refs.size.times { results << queue.pop }
|
166
|
+
db.fetch_async(ref) { |r| queue << [r, ref] }
|
172
167
|
end
|
168
|
+
Timeout.timeout(60) { refs.size.times { results << queue.pop } }
|
173
169
|
end
|
174
170
|
results.each do |result|
|
175
171
|
expect(result[0]).to be_instance_of RelatonItu::ItuBibliographicItem
|
176
172
|
end
|
177
173
|
end
|
178
174
|
|
175
|
+
it "BIPM i18n" do
|
176
|
+
expect(File).to receive(:exist?).with(/index\.yaml/).and_return false
|
177
|
+
allow(File).to receive(:exist?).and_call_original
|
178
|
+
refs = ["CGPM Resolution 1889-00", "CGPM Résolution 1889-00",
|
179
|
+
"CGPM Réunion 9", "CGPM Meeting 9"]
|
180
|
+
results = []
|
181
|
+
VCR.use_cassette "bipm_i18n_async_fetch" do
|
182
|
+
refs.each do |ref|
|
183
|
+
db.fetch_async(ref) { |r| queue << [r, ref] }
|
184
|
+
end
|
185
|
+
Timeout.timeout(60) { refs.size.times { results << queue.pop } }
|
186
|
+
end
|
187
|
+
results.each do |result|
|
188
|
+
expect(result[0]).to be_instance_of RelatonBipm::BipmBibliographicItem
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
179
192
|
it "prefix not found" do
|
180
193
|
result = ""
|
181
194
|
VCR.use_cassette "rfc_unsuccess" do
|
@@ -185,6 +198,22 @@ RSpec.describe Relaton::Db do
|
|
185
198
|
expect(result).to be_nil
|
186
199
|
end
|
187
200
|
|
201
|
+
it "handle HTTP request error" do
|
202
|
+
expect(db).to receive(:fetch).and_raise RelatonBib::RequestError
|
203
|
+
db.fetch_async("ISO REF") { |r| queue << r }
|
204
|
+
result = Timeout.timeout(5) { queue.pop }
|
205
|
+
expect(result).to be_instance_of RelatonBib::RequestError
|
206
|
+
end
|
207
|
+
|
208
|
+
it "handle other errors" do
|
209
|
+
expect(db).to receive(:fetch).and_raise Errno::EACCES
|
210
|
+
expect do
|
211
|
+
db.fetch_async("ISO REF") { |r| queue << r }
|
212
|
+
result = Timeout.timeout(5) { queue.pop }
|
213
|
+
expect(result).to be_nil
|
214
|
+
end.to output("[relaton] ERROR: ISO REF -- Permission denied\n").to_stderr
|
215
|
+
end
|
216
|
+
|
188
217
|
it "use threads number from RELATON_FETCH_PARALLEL" do
|
189
218
|
expect(ENV).to receive(:[]).with("RELATON_FETCH_PARALLEL").and_return(1)
|
190
219
|
allow(ENV).to receive(:[]).and_call_original
|
@@ -195,50 +224,4 @@ RSpec.describe Relaton::Db do
|
|
195
224
|
end
|
196
225
|
end
|
197
226
|
end
|
198
|
-
|
199
|
-
context "fetch documents form static cache" do
|
200
|
-
let(:db) { Relaton::Db.new nil, nil }
|
201
|
-
|
202
|
-
it "fetches ISO/IEC DIR 1 IEC SUP" do
|
203
|
-
bib = db.fetch "ISO/IEC DIR 1 IEC SUP"
|
204
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
205
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR 1 IEC SUP"
|
206
|
-
end
|
207
|
-
|
208
|
-
it "fetches ISO/IEC DIR 1 ISO SUP" do
|
209
|
-
bib = db.fetch "ISO/IEC DIR 1 ISO SUP"
|
210
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
211
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR 1 ISO SUP"
|
212
|
-
end
|
213
|
-
|
214
|
-
it "fetches ISO/IEC DIR 1" do
|
215
|
-
bib = db.fetch "ISO/IEC DIR 1"
|
216
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
217
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR 1"
|
218
|
-
end
|
219
|
-
|
220
|
-
it "fetches ISO/IEC DIR 2 IEC" do
|
221
|
-
bib = db.fetch "ISO/IEC DIR 2 IEC"
|
222
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
223
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR 2 IEC"
|
224
|
-
end
|
225
|
-
|
226
|
-
it "fetches ISO/IEC DIR 2 ISO" do
|
227
|
-
bib = db.fetch "ISO/IEC DIR 2 ISO"
|
228
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
229
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR 2 ISO"
|
230
|
-
end
|
231
|
-
|
232
|
-
it "fetches ISO/IEC DIR IEC SUP" do
|
233
|
-
bib = db.fetch "ISO/IEC DIR IEC SUP"
|
234
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
235
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR IEC SUP"
|
236
|
-
end
|
237
|
-
|
238
|
-
it "fetches ISO/IEC DIR JTC 1 SUP" do
|
239
|
-
bib = db.fetch "ISO/IEC DIR JTC 1 SUP"
|
240
|
-
expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
|
241
|
-
expect(bib.docidentifier.first.id).to eq "ISO/IEC DIR JTC 1 SUP"
|
242
|
-
end
|
243
|
-
end
|
244
227
|
end
|
@@ -70,6 +70,7 @@ RSpec.describe Relaton::Registry do
|
|
70
70
|
|
71
71
|
it "BIPM" do
|
72
72
|
expect(Relaton::Registry.instance.by_type("BIPM")).to be_instance_of RelatonBipm::Processor
|
73
|
+
expect(Relaton::Registry.instance.processor_by_ref("CCTF")).to be_instance_of RelatonBipm::Processor
|
73
74
|
end
|
74
75
|
|
75
76
|
it "ECMA" do
|
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
|
@@ -195,11 +195,13 @@ RSpec.describe Relaton::Db do
|
|
195
195
|
expect(File.exist?("testcache")).to be true
|
196
196
|
expect(File.exist?("testcache2")).to be true
|
197
197
|
testcache = Relaton::DbCache.new "testcache"
|
198
|
-
expect(testcache["IETF(RFC 8341)"]).to include
|
199
|
-
|
198
|
+
expect(testcache["IETF(RFC 8341)"]).to include(
|
199
|
+
'<docidentifier type="IETF" primary="true">RFC 8341</docidentifier>',
|
200
|
+
)
|
200
201
|
testcache = Relaton::DbCache.new "testcache2"
|
201
|
-
expect(testcache["IETF(RFC 8341)"]).to include
|
202
|
-
|
202
|
+
expect(testcache["IETF(RFC 8341)"]).to include(
|
203
|
+
'<docidentifier type="IETF" primary="true">RFC 8341</docidentifier>',
|
204
|
+
)
|
203
205
|
end
|
204
206
|
end
|
205
207
|
|
@@ -246,11 +248,6 @@ RSpec.describe Relaton::Db do
|
|
246
248
|
end
|
247
249
|
|
248
250
|
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)
|
253
|
-
# expect(File).to receive(:write).and_call_original.at_least :once
|
254
251
|
VCR.use_cassette "w3c_json_ld11" do
|
255
252
|
bib = @db.fetch "W3C REC-json-ld11-20200716", nil, {}
|
256
253
|
expect(bib).to be_instance_of RelatonW3c::W3cBibliographicItem
|
@@ -31,7 +31,7 @@ http_interactions:
|
|
31
31
|
Content-Type:
|
32
32
|
- text/plain; charset=utf-8
|
33
33
|
Etag:
|
34
|
-
- W/"
|
34
|
+
- W/"ba4b443468f355962dc7524aa69c4ad80bbb98e840d6137fe420b6fa3fccf2d0"
|
35
35
|
Strict-Transport-Security:
|
36
36
|
- max-age=31536000
|
37
37
|
X-Content-Type-Options:
|
@@ -41,29 +41,29 @@ http_interactions:
|
|
41
41
|
X-Xss-Protection:
|
42
42
|
- 1; mode=block
|
43
43
|
X-Github-Request-Id:
|
44
|
-
-
|
44
|
+
- 7178:6974:A78BC:C192B:62AAF846
|
45
45
|
Accept-Ranges:
|
46
46
|
- bytes
|
47
47
|
Date:
|
48
|
-
-
|
48
|
+
- Thu, 16 Jun 2022 09:30:46 GMT
|
49
49
|
Via:
|
50
50
|
- 1.1 varnish
|
51
51
|
X-Served-By:
|
52
|
-
- cache-
|
52
|
+
- cache-vie6334-VIE
|
53
53
|
X-Cache:
|
54
54
|
- MISS
|
55
55
|
X-Cache-Hits:
|
56
56
|
- '0'
|
57
57
|
X-Timer:
|
58
|
-
-
|
58
|
+
- S1655371847.568153,VS0,VE230
|
59
59
|
Vary:
|
60
60
|
- Authorization,Accept-Encoding,Origin
|
61
61
|
Access-Control-Allow-Origin:
|
62
62
|
- "*"
|
63
63
|
X-Fastly-Request-Id:
|
64
|
-
-
|
64
|
+
- da76509a3e570d0b83c3692633c0dfea81acef96
|
65
65
|
Expires:
|
66
|
-
-
|
66
|
+
- Thu, 16 Jun 2022 09:35:46 GMT
|
67
67
|
Source-Age:
|
68
68
|
- '0'
|
69
69
|
body:
|
@@ -127,7 +127,7 @@ http_interactions:
|
|
127
127
|
value: withdrawn
|
128
128
|
place:
|
129
129
|
- Sophia Antipolis Cedex, France
|
130
|
-
fetched: '2022-
|
130
|
+
fetched: '2022-06-15'
|
131
131
|
doctype: TR
|
132
132
|
editorialgroup:
|
133
133
|
- name: SMG5
|
@@ -143,6 +143,5 @@ http_interactions:
|
|
143
143
|
freeze_stage3_meeting: SMG-28
|
144
144
|
close_meeting: SP-28
|
145
145
|
project_end: '1999-02-12'
|
146
|
-
|
147
|
-
|
148
|
-
recorded_with: VCR 5.1.0
|
146
|
+
recorded_at: Thu, 16 Jun 2022 09:30:46 GMT
|
147
|
+
recorded_with: VCR 6.1.0
|