relaton 1.7.6 → 1.7.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/docs/README.adoc +10 -6
  3. data/lib/relaton/config.rb +4 -2
  4. data/lib/relaton/db.rb +123 -76
  5. data/lib/relaton/db_cache.rb +6 -0
  6. data/lib/relaton/util.rb +1 -1
  7. data/lib/relaton/version.rb +1 -1
  8. data/relaton.gemspec +1 -1
  9. data/spec/relaton/config_spec.rb +1 -1
  10. data/spec/relaton/db_spec.rb +34 -11
  11. data/spec/relaton/regirtry_spec.rb +1 -1
  12. data/spec/relaton_spec.rb +4 -4
  13. data/spec/vcr_cassetes/19133_2005.yml +20 -20
  14. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +10 -10
  15. data/spec/vcr_cassetes/cie_001_1980.yml +7 -7
  16. data/spec/vcr_cassetes/ecma_6.yml +7 -7
  17. data/spec/vcr_cassetes/fisp_140.yml +4 -4
  18. data/spec/vcr_cassetes/gb_t_20223_2006.yml +6 -6
  19. data/spec/vcr_cassetes/iec_60050_102_2007.yml +29 -27
  20. data/spec/vcr_cassetes/iec_combined_included.yml +69 -69
  21. data/spec/vcr_cassetes/ieee_528_2019.yml +20 -20
  22. data/spec/vcr_cassetes/iho_b_11.yml +7 -7
  23. data/spec/vcr_cassetes/iso_111111119115_1.yml +5 -5
  24. data/spec/vcr_cassetes/iso_19115.yml +21 -21
  25. data/spec/vcr_cassetes/iso_19115_1.yml +20 -20
  26. data/spec/vcr_cassetes/iso_19115_1_2.yml +40 -40
  27. data/spec/vcr_cassetes/iso_awi_24229.yml +21 -21
  28. data/spec/vcr_cassetes/iso_combined_applied.yml +43 -43
  29. data/spec/vcr_cassetes/iso_combined_included.yml +40 -40
  30. data/spec/vcr_cassetes/itu_combined_included.yml +85 -85
  31. data/spec/vcr_cassetes/ogc_19_025r1.yml +1214 -1147
  32. data/spec/vcr_cassetes/ogm_ami4ccm_1_0.yml +6 -6
  33. data/spec/vcr_cassetes/rfc_8341.yml +7 -7
  34. data/spec/vcr_cassetes/sp_800_38b.yml +4 -4
  35. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +29 -29
  36. data/spec/vcr_cassetes/w3c_json_ld11.yml +12 -12
  37. metadata +5 -7
  38. data/localcache/iec/iec_60050_102_2007.xml +0 -58
  39. data/localcache/iec/version +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdf3d2a7e0d55bf5b5edf65ef0e6f1f3d3ce5648388b6bae43127040df90d881
4
- data.tar.gz: d3cc65b7002c57f6e72c86dccfab92956a992fcfef9ce836ec5b3b4806646e88
3
+ metadata.gz: 5814864d64a95c8d7cb4fbb094b2e789cf4f7b731ebc8a2e1f41a7cdbbce2115
4
+ data.tar.gz: 57319c212c34e9ff237b0f834eaad40f3d173dc3de784acd4a5ea804bc11ae01
5
5
  SHA512:
6
- metadata.gz: ae4cba856c12417b10308310c14aec5e2d4452c0c24a4fe30b597d57b7c142e138e858fb97ad452bb29488e3d5d4b0a6bc1fde8dcc41bd4bb10c837315dc7257
7
- data.tar.gz: e47b6c8e2feb25956d77df52352a474936168854263aeb354d526890b63428d420eeebdc7be6f6547689ec5a25e5a1b2045c72d82680ae7e234c5d1d42023579
6
+ metadata.gz: '097fcda0d2884380cbb6b64bdcbc43f38215036921177e897c5962274885456a49a323ea4c02a7a548bfb696cba261d1aac0e7ad7dfc51abe698d9d117b715b5'
7
+ data.tar.gz: 0052e5b6696c790e7deb6d17dd7b12a2918b452f93101cda548c96316317988a061a6aabe8c1277fdc69c45f9bfa2f3af2ab6f862adee48efa0504641d3035c1
data/docs/README.adoc CHANGED
@@ -106,14 +106,18 @@ db = Relaton::Db.new("globalcache", "localcache")
106
106
 
107
107
  ==== Move DB
108
108
 
109
- `Relaton::Db#mv(new_globalcache_dir, new_localcahe_dir)` moves DB directories to new location.
109
+ `Relaton::Db#mv(new_dir, type: :global)` moves DB directory to new location. Returns path to new directory if successful, or `nil` if target directiory exists.
110
110
 
111
- * `new_globalcahe_dir` - (String or nil) new globalcache location
112
- * `new_localcahe_dir` - (String or nil) new localcache location
111
+ * `new_dir` - (String) new cache location
112
+ * `type` - (Symbol) type of cache DB. Allowed values are: `:global`, `:local`. Default is `:global`.
113
113
 
114
114
  [source,ruby]
115
115
  ----
116
- db.mv("new_globalcache_dir", "new_localcahe_dir")
116
+ db.mv("new_global_dir")
117
+ => "new_global_dir"
118
+
119
+ db.mv("new_local_dir", type: :local)
120
+ => "new_local_dir"
117
121
  ----
118
122
 
119
123
  ==== Clear DB
@@ -330,7 +334,7 @@ ISO/IEC DIR 1
330
334
  ISO/IEC DIR 2 IEC
331
335
  ISO/IEC DIR 2 ISO
332
336
  ISO/IEC DIR IEC SUP
333
- ISO/IEC DIR 1 ISO SUP
337
+ ISO/IEC DIR 1 JTC SUP
334
338
  ----
335
339
 
336
340
  === Get document type
@@ -368,7 +372,7 @@ x.to_xml bibdata: true
368
372
  db.load_entry("ISO(ISO 19011)")
369
373
  => "<bibdata type="standard">
370
374
  ...
371
- <?bibdata>"
375
+ </bibdata>"
372
376
  ----
373
377
 
374
378
  === Entry manipulation
@@ -15,8 +15,10 @@ module Relaton
15
15
  attr_accessor :logs, :use_api
16
16
 
17
17
  def initialize
18
- @logs = %i(warning error)
19
- @use_api = false # @TODO change to true when we start using api.relaton.org
18
+ @logs = %i(info error)
19
+
20
+ # @TODO change to true when we start using api.relaton.org
21
+ @use_api = false
20
22
  end
21
23
  end
22
24
 
data/lib/relaton/db.rb CHANGED
@@ -10,51 +10,64 @@ module Relaton
10
10
  # @param local_cache [String] directory of local DB
11
11
  def initialize(global_cache, local_cache)
12
12
  @registry = Relaton::Registry.instance
13
- @db = open_cache_biblio(global_cache, type: :global)
14
- @local_db = open_cache_biblio(local_cache, type: :local)
15
- @static_db = open_cache_biblio File.expand_path("../relaton/static_cache", __dir__)
13
+ gpath = global_cache && File.expand_path(global_cache)
14
+ @db = open_cache_biblio(gpath, type: :global)
15
+ lpath = local_cache && File.expand_path(local_cache)
16
+ @local_db = open_cache_biblio(lpath, type: :local)
17
+ @static_db = open_cache_biblio File.expand_path("../relaton/static_cache",
18
+ __dir__)
16
19
  @queues = {}
17
20
  end
18
21
 
19
- # Move global and/or local caches to anothe dirs
20
- # @param new_global_dir [String, nil]
21
- # @param new_local_dir [String, nil]
22
- def mv(new_global_dir, new_local_dir)
23
- @db.mv new_global_dir
24
- @local_db.mv new_local_dir
22
+ # Move global or local caches to anothe dirs
23
+ # @param new_dir [String, nil]
24
+ # @param type: [Symbol]
25
+ # @return [String, nil]
26
+ def mv(new_dir, type: :global)
27
+ case type
28
+ when :global
29
+ @db&.mv new_dir
30
+ when :local
31
+ @local_db&.mv new_dir
32
+ end
25
33
  end
26
34
 
27
35
  # Clear global and local databases
28
36
  def clear
29
- @db.clear
30
- @local_db.clear
37
+ @db&.clear
38
+ @local_db&.clear
31
39
  end
32
40
 
33
41
  ##
34
42
  # The class of reference requested is determined by the prefix of the code:
35
- # GB Standard for gbbib, IETF for ietfbib, ISO for isobib, IEC or IEV for iecbib,
43
+ # GB Standard for gbbib, IETF for ietfbib, ISO for isobib, IEC or IEV for
44
+ # iecbib,
36
45
  #
37
46
  # @param code [String] the ISO standard Code to look up (e.g. "ISO 9000")
38
47
  # @param year [String] the year the standard was published (optional)
39
48
  #
40
49
  # @param opts [Hash] options
41
50
  # @option opts [Boolean] :all_parts If all-parts reference is required
42
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
51
+ # @option opts [Boolean] :keep_year If undated reference should return
52
+ # actual reference with year
43
53
  # @option opts [Integer] :retries (1) Number of network retries
44
54
  #
45
- # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem,
46
- # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem,
47
- # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem,
48
- # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem,
49
- # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem]
55
+ # @return [nil, RelatonBib::BibliographicItem,
56
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
57
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
58
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
59
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
60
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
50
61
  # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
51
- # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem,
52
- # RelatonW3c::W3cBibliographicItem
62
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
53
63
  ##
54
64
  def fetch(code, year = nil, opts = {})
55
65
  stdclass = standard_class(code) || return
56
66
  processor = @registry.processors[stdclass]
57
- ref = processor.respond_to?(:urn_to_code) ? processor.urn_to_code(code)&.first : code
67
+ ref = if processor.respond_to?(:urn_to_code)
68
+ processor.urn_to_code(code)&.first
69
+ else code
70
+ end
58
71
  ref ||= code
59
72
  result = combine_doc ref, year, opts, stdclass
60
73
  result ||= check_bibliocache(ref, year, opts, stdclass)
@@ -73,9 +86,15 @@ module Relaton
73
86
  # @param year [Integer, nil]
74
87
  # @return [Array]
75
88
  def fetch_all(text = nil, edition: nil, year: nil)
76
- result = @static_db.all { |file, yml| search_yml file, yml, text, edition, year }.compact
89
+ result = @static_db.all do |file, yml|
90
+ search_yml file, yml, text, edition, year
91
+ end.compact
77
92
  db = @db || @local_db
78
- result += db.all { |file, xml| search_xml file, xml, text, edition, year }.compact if db
93
+ if db
94
+ result += db.all do |file, xml|
95
+ search_xml file, xml, text, edition, year
96
+ end.compact
97
+ end
79
98
  result
80
99
  end
81
100
 
@@ -100,17 +119,18 @@ module Relaton
100
119
  #
101
120
  # @param opts [Hash]
102
121
  # @option opts [Boolean] :all_parts If all-parts reference is required
103
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
122
+ # @option opts [Boolean] :keep_year If undated reference should return
123
+ # actual reference with year
104
124
  # @option opts [Integer] :retries (1) Number of network retries
105
125
  #
106
- # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem,
107
- # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem,
108
- # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem,
109
- # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem,
110
- # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem]
126
+ # @return [nil, RelatonBib::BibliographicItem,
127
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
128
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
129
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
130
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
131
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
111
132
  # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
112
- # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem,
113
- # RelatonW3c::W3cBibliographicItem
133
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
114
134
  def fetch_std(code, year = nil, stdclass = nil, opts = {})
115
135
  std = nil
116
136
  @registry.processors.each do |name, processor|
@@ -193,9 +213,11 @@ module Relaton
193
213
  # @return [BibliographicItem, nil]
194
214
  def search_edition_year(file, content, edition, year) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
195
215
  processor = @registry.processors[standard_class(file.split("/")[-2])]
196
- item = file.match?(/xml$/) ? processor.from_xml(content) : processor.hash_to_bib(YAML.safe_load(content))
197
- item if (edition.nil? || item.edition == edition) &&
198
- (year.nil? || item.date.detect { |d| d.type == "published" && d.on(:year) == year })
216
+ item = if file.match?(/xml$/) then processor.from_xml(content)
217
+ else processor.hash_to_bib(YAML.safe_load(content))
218
+ end
219
+ item if (edition.nil? || item.edition == edition) && (year.nil? ||
220
+ item.date.detect { |d| d.type == "published" && d.on(:year).to_s == year.to_s })
199
221
  end
200
222
 
201
223
  # @param xml [String] content in XML format
@@ -211,17 +233,18 @@ module Relaton
211
233
  #
212
234
  # @param opts [Hash] options
213
235
  # @option opts [Boolean] :all_parts If all-parts reference is required
214
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
236
+ # @option opts [Boolean] :keep_year If undated reference should return
237
+ # actual reference with year
215
238
  # @option opts [Integer] :retries (1) Number of network retries
216
239
  #
217
- # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem,
218
- # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem,
219
- # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem,
220
- # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem,
221
- # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem]
240
+ # @return [nil, RelatonBib::BibliographicItem,
241
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
242
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
243
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
244
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
245
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
222
246
  # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
223
- # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem,
224
- # RelatonW3c::W3cBibliographicItem
247
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
225
248
  def combine_doc(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
226
249
  if (refs = code.split " + ").size > 1
227
250
  reltype = "derivedFrom"
@@ -235,11 +258,16 @@ module Relaton
235
258
  doc = @registry.processors[stdclass].hash_to_bib docid: { id: code }
236
259
  ref = refs[0]
237
260
  updates = check_bibliocache(ref, year, opts, stdclass)
238
- doc.relation << RelatonBib::DocumentRelation.new(bibitem: updates, type: "updates") if updates
261
+ if updates
262
+ doc.relation << RelatonBib::DocumentRelation.new(bibitem: updates,
263
+ type: "updates")
264
+ end
239
265
  refs[1..-1].each_with_object(doc) do |c, d|
240
266
  bib = check_bibliocache("#{ref}/#{c}", year, opts, stdclass)
241
267
  if bib
242
- d.relation << RelatonBib::DocumentRelation.new(type: reltype, description: reldesc, bibitem: bib)
268
+ d.relation << RelatonBib::DocumentRelation.new(
269
+ type: reltype, description: reldesc, bibitem: bib
270
+ )
243
271
  end
244
272
  end
245
273
  end
@@ -254,8 +282,8 @@ module Relaton
254
282
  allowed = @registry.processors.reduce([]) do |m, (_k, v)|
255
283
  m << v.prefix
256
284
  end
257
- warn <<~WARN
258
- #{code} does not have a recognised prefix: #{allowed.join(', ')}.
285
+ Util.log <<~WARN, :info
286
+ [relaton] #{code} does not have a recognised prefix: #{allowed.join(', ')}.
259
287
  See https://github.com/relaton/relaton/ for instructions on prefixing and wrapping document identifiers to disambiguate them.
260
288
  WARN
261
289
  end
@@ -267,7 +295,8 @@ module Relaton
267
295
  #
268
296
  # @param opts [Hash]
269
297
  # @option opts [Boolean] :all_parts If all-parts reference is required
270
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
298
+ # @option opts [Boolean] :keep_year If undated reference should return
299
+ # actual reference with year
271
300
  # @option opts [Integer] :retries (1) Number of network retries
272
301
  #
273
302
  # @param stdClass [Symbol]
@@ -292,16 +321,18 @@ module Relaton
292
321
 
293
322
  # @param entry [String] XML string
294
323
  # @param stdclass [Symbol]
295
- # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem,
296
- # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem,
297
- # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem,
298
- # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem,
299
- # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem]
324
+ # @return [nil, RelatonBib::BibliographicItem,
325
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
326
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
327
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
328
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
329
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
300
330
  # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
301
- # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem,
302
- # RelatonW3c::W3cBibliographicItem
331
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
303
332
  def bib_retval(entry, stdclass)
304
- entry.nil? || entry.match?(/^not_found/) ? nil : @registry.processors[stdclass].from_xml(entry)
333
+ if entry.nil? || entry.match?(/^not_found/) then nil
334
+ else @registry.processors[stdclass].from_xml(entry)
335
+ end
305
336
  end
306
337
 
307
338
  # @param code [String]
@@ -309,29 +340,33 @@ module Relaton
309
340
  #
310
341
  # @param opts [Hash]
311
342
  # @option opts [Boolean] :all_parts If all-parts reference is required
312
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
343
+ # @option opts [Boolean] :keep_year If undated reference should return
344
+ # actual reference with year
313
345
  # @option opts [Integer] :retries (1) Number of network retries
314
346
  #
315
347
  # @param stdclass [Symbol]
316
- # @return [nil, RelatonBib::BibliographicItem, RelatonIsoBib::IsoBibliographicItem,
317
- # RelatonItu::ItuBibliographicItem, RelatonIetf::IetfBibliographicItem,
318
- # RelatonIec::IecBibliographicItem, RelatonIeee::IeeeBibliographicItem,
319
- # RelatonNist::NistBibliongraphicItem, RelatonGb::GbbibliographicItem,
320
- # RelatonOgc::OgcBibliographicItem, RelatonCalconnect::CcBibliographicItem]
348
+ # @return [nil, RelatonBib::BibliographicItem,
349
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
350
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
351
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
352
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
353
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
321
354
  # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
322
- # RelatonOmg::OmgBibliographicItem RelatinUn::UnBibliographicItem,
323
- # RelatonW3c::W3cBibliographicItem
355
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
324
356
  def check_bibliocache(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
325
357
  id, searchcode = std_id(code, year, opts, stdclass)
326
358
  yaml = @static_db[id]
327
- return @registry.processors[stdclass].hash_to_bib YAML.safe_load(yaml) if yaml
359
+ if yaml
360
+ return @registry.processors[stdclass].hash_to_bib YAML.safe_load(yaml)
361
+ end
328
362
 
329
363
  db = @local_db || @db
330
364
  altdb = @local_db && @db ? @db : nil
331
365
  if db.nil?
332
366
  return if opts[:fetch_db]
333
367
 
334
- bibentry = new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id)
368
+ bibentry = new_bib_entry(searchcode, year, opts, stdclass, db: db,
369
+ id: id)
335
370
  return bib_retval(bibentry, stdclass)
336
371
  end
337
372
 
@@ -340,12 +375,14 @@ module Relaton
340
375
  return bib_retval(altdb[id], stdclass) if opts[:fetch_db]
341
376
 
342
377
  db.clone_entry id, altdb if altdb.valid_entry? id, year
343
- db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id)
378
+ db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db,
379
+ id: id)
344
380
  altdb.clone_entry(id, db) if !altdb.valid_entry?(id, year)
345
381
  else
346
382
  return bib_retval(db[id], stdclass) if opts[:fetch_db]
347
383
 
348
- db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db, id: id)
384
+ db[id] ||= new_bib_entry(searchcode, year, opts, stdclass, db: db,
385
+ id: id)
349
386
  end
350
387
  bib_retval(db[id], stdclass)
351
388
  end
@@ -355,7 +392,8 @@ module Relaton
355
392
  #
356
393
  # @param opts [Hash]
357
394
  # @option opts [Boolean] :all_parts If all-parts reference is required
358
- # @option opts [Boolean] :keep_year If undated reference should return actual reference with year
395
+ # @option opts [Boolean] :keep_year If undated reference should return
396
+ # actual reference with year
359
397
  # @option opts [Integer] :retries (1) Number of network retries
360
398
  #
361
399
  # @param stdclass [Symbol]
@@ -367,7 +405,8 @@ module Relaton
367
405
  bib_id = bib&.docidentifier&.first&.id
368
406
 
369
407
  # when docid doesn't match bib's id then return a reference to bib's id
370
- if args[:db] && args[:id] && bib_id && args[:id] !~ %r{#{Regexp.quote("(#{bib_id})")}}
408
+ if args[:db] && args[:id] &&
409
+ bib_id && args[:id] !~ %r{#{Regexp.quote("(#{bib_id})")}}
371
410
  bid = std_id(bib.docidentifier.first.id, nil, {}, stdclass).first
372
411
  args[:db][bid] ||= bib_entry bib
373
412
  "redirection #{bid}"
@@ -384,9 +423,14 @@ module Relaton
384
423
  net_retry(code, year, opts, stdclass, retries - 1)
385
424
  end
386
425
 
387
- # @param bib [RelatonGb::GbBibliongraphicItem, RelatonIsoBib::IsoBibliographicItem,
388
- # RelatonIetf::IetfBibliographicItem, RelatonItu::ItuBibliographicItem,
389
- # RelatonNist::NistBibliongraphicItem, RelatonOgc::OgcBibliographicItem]
426
+ # @param bib [RelatonBib::BibliographicItem,
427
+ # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
428
+ # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
429
+ # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
430
+ # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
431
+ # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
432
+ # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
433
+ # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
390
434
  # @return [String] XML or "not_found mm-dd-yyyy"
391
435
  def bib_entry(bib)
392
436
  if bib.respond_to? :to_xml
@@ -399,7 +443,7 @@ module Relaton
399
443
  # @param dir [String, nil] DB directory
400
444
  # @param type [Symbol]
401
445
  # @return [Relaton::DbCache, NilClass]
402
- def open_cache_biblio(dir, type: :static)
446
+ def open_cache_biblio(dir, type: :static) # rubocop:disable Metrics/MethodLength
403
447
  return nil if dir.nil?
404
448
 
405
449
  db = DbCache.new dir, type == :static ? "yml" : "xml"
@@ -408,9 +452,12 @@ module Relaton
408
452
  Dir["#{dir}/*/"].each do |fdir|
409
453
  next if db.check_version?(fdir)
410
454
 
411
- FileUtils.rm_rf(Dir.glob(fdir + "/*"), secure: true)
412
- db.set_version fdir
413
- warn "[relaton] cache #{fdir}: version is obsolete and cache is cleared."
455
+ FileUtils.rm_rf(fdir, secure: true)
456
+ Util.log(
457
+ "[relaton] WARNING: cache #{fdir}: version is obsolete and cache is "\
458
+ "cleared.",
459
+ :warning
460
+ )
414
461
  end
415
462
  db
416
463
  end
@@ -17,9 +17,15 @@ module Relaton
17
17
 
18
18
  # Move caches to anothe dir
19
19
  # @param new_dir [String, nil]
20
+ # @return [String, nil]
20
21
  def mv(new_dir)
21
22
  return unless new_dir && @ext == "xml"
22
23
 
24
+ if File.exist? new_dir
25
+ warn "[relaton] WARNING: target directory exists \"#{new_dir}\""
26
+ return
27
+ end
28
+
23
29
  FileUtils.mv dir, new_dir
24
30
  @dir = new_dir
25
31
  end
data/lib/relaton/util.rb CHANGED
@@ -4,7 +4,7 @@ module Relaton
4
4
  log_types = Relaton.configuration.logs.map(&:to_s) || []
5
5
 
6
6
  if log_types.include?(type.to_s)
7
- puts(message)
7
+ warn(message)
8
8
  end
9
9
  end
10
10
  end