relaton-bib 1.8.0 → 1.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b46017a3b30ea11d3ea0f97581e4b4e8a95afb15463f47ac536995286be26c09
4
- data.tar.gz: cb8b1d871705c2f795c21977ecfbeb33e4bb13c66249eefbdf66dee12335bd88
3
+ metadata.gz: 34028dd6a06df2ea4fb4280dc523e142d603dcb5e3c9b32c500823b6d6d4be4e
4
+ data.tar.gz: 6a43437d26b84c0049a0292896116a705a5c0595ee5f292794ffc780e7c720c8
5
5
  SHA512:
6
- metadata.gz: 558039f1f7e632461bf785ab09c99585aad636b3e828a57bb2e710f0fa77d76b21b44ce186f2798e57e2da425085e79fe747a033db62f3edfe086e08aad06b1a
7
- data.tar.gz: febdc2fb65bfb3948b690c92e94da829fd8a1b9d945a2586b348d774546881fe034a8a3f39ea9751a6d9945029fbc1379b908423ab925b2e499a85c38590970d
6
+ metadata.gz: 3af6adfc91e4a4dd6da9401b991949f2ea15230abe59e46aff4d43d88e7c0feae7a3fc818280cbb36f39ebce85013f7f61865c85988c2f72c261f2fdbb9e9f35
7
+ data.tar.gz: e5476c5071889ffec592312c5d2fe0534c2ab72c006f03d7429c9504981a32c93dd4274cdf305914089193943b0b2bdcea6b85e4973e815e2a3ed996a1b0816e
@@ -16,19 +16,9 @@ jobs:
16
16
  strategy:
17
17
  fail-fast: false
18
18
  matrix:
19
- ruby: [ '2.7', '2.6', '2.5', '2.4' ]
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
20
  os: [ ubuntu-latest, windows-latest, macos-latest ]
21
21
  experimental: [ false ]
22
- include:
23
- - ruby: '3.0'
24
- os: 'ubuntu-latest'
25
- experimental: true
26
- - ruby: '3.0'
27
- os: 'windows-latest'
28
- experimental: true
29
- - ruby: '3.0'
30
- os: 'macos-latest'
31
- experimental: true
32
22
  steps:
33
23
  - uses: actions/checkout@v2
34
24
  with:
data/.rubocop.yml CHANGED
@@ -5,6 +5,6 @@
5
5
  inherit_from:
6
6
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.4
8
+ TargetRubyVersion: 2.5
9
9
  Rails:
10
10
  Enabled: false
data/grammars/biblio.rng CHANGED
@@ -787,6 +787,7 @@
787
787
  <value>adapted</value>
788
788
  <value>vote-started</value>
789
789
  <value>vote-ended</value>
790
+ <value>announced</value>
790
791
  </choice>
791
792
  </define>
792
793
  <define name="bdate">
data/grammars/isodoc.rng CHANGED
@@ -45,6 +45,11 @@
45
45
  <optional>
46
46
  <attribute name="alt"/>
47
47
  </optional>
48
+ <optional>
49
+ <attribute name="updatetype">
50
+ <data type="boolean"/>
51
+ </attribute>
52
+ </optional>
48
53
  <text/>
49
54
  </element>
50
55
  </define>
@@ -199,6 +204,18 @@
199
204
  </zeroOrMore>
200
205
  </element>
201
206
  </define>
207
+ <define name="dt">
208
+ <element name="dt">
209
+ <optional>
210
+ <attribute name="id">
211
+ <data type="ID"/>
212
+ </attribute>
213
+ </optional>
214
+ <zeroOrMore>
215
+ <ref name="TextElement"/>
216
+ </zeroOrMore>
217
+ </element>
218
+ </define>
202
219
  <define name="example">
203
220
  <element name="example">
204
221
  <attribute name="id">
@@ -543,6 +560,9 @@
543
560
  </define>
544
561
  <define name="BibDataExtensionType">
545
562
  <ref name="doctype"/>
563
+ <optional>
564
+ <ref name="docsubtype"/>
565
+ </optional>
546
566
  <optional>
547
567
  <ref name="editorialgroup"/>
548
568
  </optional>
@@ -890,6 +910,14 @@
890
910
  </define>
891
911
  </include>
892
912
  <!-- end overrides -->
913
+ <define name="docsubtype">
914
+ <element name="subdoctype">
915
+ <ref name="DocumentSubtype"/>
916
+ </element>
917
+ </define>
918
+ <define name="DocumentSubtype">
919
+ <text/>
920
+ </define>
893
921
  <define name="colgroup">
894
922
  <element name="colgroup">
895
923
  <oneOrMore>
@@ -939,7 +967,34 @@
939
967
  <define name="concept">
940
968
  <element name="concept">
941
969
  <optional>
942
- <attribute name="term"/>
970
+ <attribute name="ital">
971
+ <data type="boolean"/>
972
+ </attribute>
973
+ </optional>
974
+ <optional>
975
+ <attribute name="ref">
976
+ <data type="boolean"/>
977
+ </attribute>
978
+ </optional>
979
+ <optional>
980
+ <element name="refterm">
981
+ <zeroOrMore>
982
+ <choice>
983
+ <ref name="PureTextElement"/>
984
+ <ref name="stem"/>
985
+ </choice>
986
+ </zeroOrMore>
987
+ </element>
988
+ </optional>
989
+ <optional>
990
+ <element name="renderterm">
991
+ <zeroOrMore>
992
+ <choice>
993
+ <ref name="PureTextElement"/>
994
+ <ref name="stem"/>
995
+ </choice>
996
+ </zeroOrMore>
997
+ </element>
943
998
  </optional>
944
999
  <choice>
945
1000
  <ref name="eref"/>
@@ -965,6 +1020,9 @@
965
1020
  </attribute>
966
1021
  <attribute name="name"/>
967
1022
  <attribute name="action"/>
1023
+ <optional>
1024
+ <attribute name="class"/>
1025
+ </optional>
968
1026
  <zeroOrMore>
969
1027
  <choice>
970
1028
  <ref name="TextElement"/>
@@ -1191,13 +1249,17 @@
1191
1249
  </define>
1192
1250
  <define name="IsoWorkgroup">
1193
1251
  <optional>
1194
- <attribute name="number">
1195
- <data type="int"/>
1196
- </attribute>
1252
+ <attribute name="number"/>
1197
1253
  </optional>
1198
1254
  <optional>
1199
1255
  <attribute name="type"/>
1200
1256
  </optional>
1257
+ <optional>
1258
+ <attribute name="identifier"/>
1259
+ </optional>
1260
+ <optional>
1261
+ <attribute name="prefix"/>
1262
+ </optional>
1201
1263
  <text/>
1202
1264
  </define>
1203
1265
  <define name="ics">
@@ -1459,26 +1521,26 @@
1459
1521
  <optional>
1460
1522
  <ref name="section-title"/>
1461
1523
  </optional>
1462
- <group>
1524
+ <choice>
1463
1525
  <choice>
1464
1526
  <group>
1465
- <zeroOrMore>
1527
+ <oneOrMore>
1466
1528
  <ref name="BasicBlock"/>
1467
- </zeroOrMore>
1529
+ </oneOrMore>
1468
1530
  <zeroOrMore>
1469
1531
  <ref name="note"/>
1470
1532
  </zeroOrMore>
1471
1533
  </group>
1472
1534
  <ref name="amend"/>
1473
1535
  </choice>
1474
- <zeroOrMore>
1536
+ <oneOrMore>
1475
1537
  <choice>
1476
1538
  <ref name="clause-subsection"/>
1477
1539
  <ref name="terms"/>
1478
1540
  <ref name="definitions"/>
1479
1541
  </choice>
1480
- </zeroOrMore>
1481
- </group>
1542
+ </oneOrMore>
1543
+ </choice>
1482
1544
  </define>
1483
1545
  <define name="Annex-Section">
1484
1546
  <optional>
@@ -7,7 +7,7 @@ module RelatonBib
7
7
  class BibliographicDate
8
8
  TYPES = %w[published accessed created implemented obsoleted confirmed
9
9
  updated issued transmitted copied unchanged circulated adapted
10
- vote-started vote-ended].freeze
10
+ vote-started vote-ended announced].freeze
11
11
 
12
12
  # @return [String]
13
13
  attr_reader :type
@@ -42,7 +42,7 @@ module RelatonBib
42
42
  attr_accessor :all_parts
43
43
 
44
44
  # @return [String, NilClass]
45
- attr_reader :id, :type, :docnumber, :edition, :doctype
45
+ attr_reader :id, :type, :docnumber, :edition, :doctype, :subdoctype
46
46
 
47
47
  # @!attribute [r] title
48
48
  # @return [RelatonBib::TypedTitleStringCollection]
@@ -148,6 +148,7 @@ module RelatonBib
148
148
  # @param fetched [Date, NilClass] default nil
149
149
  # @param keyword [Array<String>]
150
150
  # @param doctype [String]
151
+ # @param subdoctype [String]
151
152
  # @param editorialgroup [RelatonBib::EditorialGroup, nil]
152
153
  # @param ics [Array<RelatonBib::ICS>]
153
154
  # @param structuredidentifier [RelatonBib::StructuredIdentifierCollection]
@@ -229,8 +230,9 @@ module RelatonBib
229
230
  @status = args[:docstatus]
230
231
  @relation = DocRelationCollection.new(args[:relation] || [])
231
232
  @link = args.fetch(:link, []).map do |s|
232
- if s.is_a?(Hash) then TypedUri.new(**s)
233
- elsif s.is_a?(String) then TypedUri.new(content: s)
233
+ case s
234
+ when Hash then TypedUri.new(**s)
235
+ when String then TypedUri.new(content: s)
234
236
  else s
235
237
  end
236
238
  end
@@ -250,6 +252,7 @@ module RelatonBib
250
252
  end
251
253
  @license = args.fetch :license, []
252
254
  @doctype = args[:doctype]
255
+ @subdoctype = args[:subdoctype]
253
256
  @editorialgroup = args[:editorialgroup]
254
257
  @ics = args.fetch :ics, []
255
258
  @structuredidentifier = args[:structuredidentifier]
@@ -260,8 +263,8 @@ module RelatonBib
260
263
  # @param hash [Hash]
261
264
  # @return [RelatonBipm::BipmBibliographicItem]
262
265
  def self.from_hash(hash)
263
- item_hash = ::RelatonBib::HashConverter.hash_to_bib(hash)
264
- new **item_hash
266
+ item_hash = Object.const_get(name.split("::")[0])::HashConverter.hash_to_bib(hash)
267
+ new(**item_hash)
265
268
  end
266
269
 
267
270
  # @param lang [String] language code Iso639
@@ -286,7 +289,7 @@ module RelatonBib
286
289
  # contribs = publishers.map { |p| p&.entity&.abbreviation }.join '/'
287
290
  # idstr = "#{contribs}#{delim}#{id.project_number}"
288
291
  # idstr = id.project_number.to_s
289
- idstr = id.id.gsub(/:/, "-").gsub /\s/, ""
292
+ idstr = id.id.gsub(/:/, "-").gsub(/\s/, "")
290
293
  # if id.part_number&.size&.positive? then idstr += "-#{id.part_number}"
291
294
  idstr.strip
292
295
  end
@@ -299,7 +302,7 @@ module RelatonBib
299
302
  def shortref(identifier, **opts) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize,Metrics/PerceivedComplexity
300
303
  pubdate = date.select { |d| d.type == "published" }
301
304
  year = if opts[:no_year] || pubdate.empty? then ""
302
- else ":" + pubdate&.first&.on(:year).to_s
305
+ else ":#{pubdate&.first&.on(:year)}"
303
306
  end
304
307
  year += ": All Parts" if opts[:all_parts] || @all_parts
305
308
 
@@ -314,7 +317,7 @@ module RelatonBib
314
317
  # @return [String] XML
315
318
  def to_xml(**opts, &block)
316
319
  if opts[:builder]
317
- render_xml **opts, &block
320
+ render_xml(**opts, &block)
318
321
  else
319
322
  Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
320
323
  render_xml builder: xml, **opts, &block
@@ -361,6 +364,7 @@ module RelatonBib
361
364
  hash["keyword"] = single_element_array(keyword) if keyword&.any?
362
365
  hash["license"] = single_element_array(license) if license&.any?
363
366
  hash["doctype"] = doctype if doctype
367
+ hash["subdoctype"] = subdoctype if subdoctype
364
368
  if editorialgroup&.presence?
365
369
  hash["editorialgroup"] = editorialgroup.to_hash
366
370
  end
@@ -460,7 +464,7 @@ module RelatonBib
460
464
  me.date = []
461
465
  me.docidentifier.each &:remove_date
462
466
  me.structuredidentifier&.remove_date
463
- me.id&.sub! /-[12]\d\d\d/, ""
467
+ me.id&.sub!(/-[12]\d\d\d/, "")
464
468
  me
465
469
  end
466
470
 
@@ -477,7 +481,7 @@ module RelatonBib
477
481
  # @param prefix [String]
478
482
  # @return [String]
479
483
  def to_asciibib(prefix = "") # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
480
- pref = prefix.empty? ? prefix : prefix + "."
484
+ pref = prefix.empty? ? prefix : "#{prefix}."
481
485
  out = prefix.empty? ? "[%bibitem]\n== {blank}\n" : ""
482
486
  out += "#{pref}id:: #{id}\n" if id
483
487
  out += "#{pref}fetched:: #{fetched}\n" if fetched
@@ -513,6 +517,7 @@ module RelatonBib
513
517
  out += relation.to_asciibib prefix if relation
514
518
  series.each { |s| out += s.to_asciibib prefix, series.size }
515
519
  out += "#{pref}doctype:: #{doctype}\n" if doctype
520
+ out += "#{pref}subdoctype:: #{subdoctype}\n" if subdoctype
516
521
  out += "#{pref}formattedref:: #{formattedref}\n" if formattedref
517
522
  keyword.each { |kw| out += kw.to_asciibib "#{pref}keyword", keyword.size }
518
523
  out += editorialgroup.to_asciibib prefix if editorialgroup
@@ -682,21 +687,21 @@ module RelatonBib
682
687
  root = opts[:bibdata] ? :bibdata : :bibitem
683
688
  xml = opts[:builder].send(root) do |builder|
684
689
  builder.fetched fetched if fetched
685
- title.to_xml **opts
690
+ title.to_xml(**opts)
686
691
  formattedref&.to_xml builder
687
692
  link.each { |s| s.to_xml builder }
688
- docidentifier.each { |di| di.to_xml **opts }
693
+ docidentifier.each { |di| di.to_xml(**opts) }
689
694
  builder.docnumber docnumber if docnumber
690
695
  date.each { |d| d.to_xml builder, **opts }
691
696
  contributor.each do |c|
692
697
  builder.contributor do
693
- c.role.each { |r| r.to_xml **opts }
694
- c.to_xml **opts
698
+ c.role.each { |r| r.to_xml(**opts) }
699
+ c.to_xml(**opts)
695
700
  end
696
701
  end
697
702
  builder.edition edition if edition
698
703
  version&.to_xml builder
699
- biblionote.to_xml **opts
704
+ biblionote.to_xml(**opts)
700
705
  opts[:note]&.each do |n|
701
706
  builder.note(n[:text], format: "text/plain", type: n[:type])
702
707
  end
@@ -706,7 +711,7 @@ module RelatonBib
706
711
  abstr = abstract unless abstr.any?
707
712
  abstr.each { |a| builder.abstract { a.to_xml(builder) } }
708
713
  status&.to_xml builder
709
- copyright&.each { |c| c.to_xml **opts }
714
+ copyright&.each { |c| c.to_xml(**opts) }
710
715
  relation.each { |r| r.to_xml builder, **opts }
711
716
  series.each { |s| s.to_xml builder }
712
717
  medium&.to_xml builder
@@ -724,6 +729,7 @@ module RelatonBib
724
729
  structuredidentifier&.presence?)
725
730
  builder.ext do |b|
726
731
  b.doctype doctype if doctype
732
+ b.subdoctype subdoctype if subdoctype
727
733
  editorialgroup&.to_xml b
728
734
  ics.each { |i| i.to_xml b }
729
735
  structuredidentifier&.to_xml b
@@ -42,7 +42,7 @@ module RelatonBib
42
42
  # @param prefix [String]
43
43
  # @return [String]
44
44
  def to_asciibib(prefix = "")
45
- pref = prefix.empty? ? prefix : prefix + "."
45
+ pref = prefix.empty? ? prefix : "#{prefix}."
46
46
  out = "#{pref}docstatus.stage:: #{stage.value}\n"
47
47
  out += "#{pref}docstatus.substage:: #{substage.value}\n" if substage
48
48
  out += "#{pref}docstatus.iteration:: #{iteration}\n" if iteration
@@ -54,9 +54,10 @@ module RelatonBib
54
54
  # @param stg [RelatonBib::DocumentStatus::Stage, Hash, String, NilClass]
55
55
  # @return [RelatonBib::DocumentStatus::Stage]
56
56
  def stage_new(stg)
57
- if stg.is_a?(Stage) then stg
58
- elsif stg.is_a?(Hash) then Stage.new(**stg)
59
- elsif stg.is_a?(String) then Stage.new(value: stg)
57
+ case stg
58
+ when Stage then stg
59
+ when Hash then Stage.new(**stg)
60
+ when String then Stage.new(value: stg)
60
61
  end
61
62
  end
62
63
 
@@ -27,7 +27,7 @@ module RelatonBib
27
27
  # @param prefix [String]
28
28
  # @return [String]
29
29
  def to_asciibib(prefix = "")
30
- pref = prefix.empty? ? "editorialgroup" : prefix + ".editorialgroup"
30
+ pref = prefix.empty? ? "editorialgroup" : "#{prefix}.editorialgroup"
31
31
  technical_committee.map do |tc|
32
32
  tc.to_asciibib pref, technical_committee.size
33
33
  end.join
@@ -10,7 +10,7 @@ module RelatonBib
10
10
  # @param prefix [String]
11
11
  # @return [String]
12
12
  def to_asciibib(prefix = "")
13
- pref = prefix.empty? ? "formattedref" : prefix + ".formattedref"
13
+ pref = prefix.empty? ? "formattedref" : "#{prefix}.formattedref"
14
14
  super pref
15
15
  end
16
16
  end
@@ -107,7 +107,7 @@ module RelatonBib
107
107
  ret[:accesslocation] = array(ret[:accesslocation])
108
108
  end
109
109
 
110
- def dates_hash_to_bib(ret)
110
+ def dates_hash_to_bib(ret) # rubocop:disable Metrics/AbcSize
111
111
  return unless ret[:date]
112
112
 
113
113
  ret[:date] = array(ret[:date])
@@ -160,7 +160,7 @@ module RelatonBib
160
160
  ret[:docstatus] && ret[:docstatus] = DocumentStatus.new(
161
161
  stage: stage(ret[:docstatus][:stage]),
162
162
  substage: stage(ret[:docstatus][:substage]),
163
- iteration: ret[:docstatus][:iteration]
163
+ iteration: ret[:docstatus][:iteration],
164
164
  )
165
165
  end
166
166
 
@@ -215,7 +215,7 @@ module RelatonBib
215
215
  name: fullname_hash_to_bib(person),
216
216
  affiliation: affiliation_hash_to_bib(person),
217
217
  contact: contacts_hash_to_bib(person),
218
- identifier: person_identifiers_hash_to_bib(person)
218
+ identifier: person_identifiers_hash_to_bib(person),
219
219
  )
220
220
  end
221
221
 
@@ -227,7 +227,7 @@ module RelatonBib
227
227
  addition: array(n[:addition])&.map { |f| localname(f, person) },
228
228
  prefix: array(n[:prefix])&.map { |f| localname(f, person) },
229
229
  surname: localname(n[:surname], person),
230
- completename: localname(n[:completename], person)
230
+ completename: localname(n[:completename], person),
231
231
  )
232
232
  end
233
233
 
@@ -247,11 +247,11 @@ module RelatonBib
247
247
  script: d[:script], format: d[:format] }
248
248
  else { content: d }
249
249
  end
250
- FormattedString.new **cnt
250
+ FormattedString.new(**cnt)
251
251
  end
252
252
  Affiliation.new(
253
253
  organization: Organization.new(**org_hash_to_bib(a[:organization])),
254
- description: a[:description]
254
+ description: a[:description],
255
255
  )
256
256
  end
257
257
  end
@@ -288,7 +288,7 @@ module RelatonBib
288
288
  ret[:relation] = array(ret[:relation])
289
289
  ret[:relation]&.each do |r|
290
290
  if r[:description]
291
- r[:description] = FormattedString.new **r[:description]
291
+ r[:description] = FormattedString.new(**r[:description])
292
292
  end
293
293
  relation_bibitem_hash_to_bib(r)
294
294
  relation_locality_hash_to_bib(r)
@@ -309,7 +309,7 @@ module RelatonBib
309
309
  # @param item_hash [Hash]
310
310
  # @return [RelatonBib::BibliographicItem]
311
311
  def bib_item(item_hash)
312
- BibliographicItem.new **item_hash
312
+ BibliographicItem.new(**item_hash)
313
313
  end
314
314
 
315
315
  # @param rel [Hash] relation
@@ -363,7 +363,7 @@ module RelatonBib
363
363
  # @param title [Hash]
364
364
  # @return [RelatonBib::TypedTitleString]
365
365
  def typed_title_strig(title)
366
- TypedTitleString.new **title
366
+ TypedTitleString.new(**title)
367
367
  end
368
368
 
369
369
  # @param ret [Hash]
@@ -375,7 +375,7 @@ module RelatonBib
375
375
  def classification_hash_to_bib(ret)
376
376
  if ret[:classification]
377
377
  ret[:classification] = array(ret[:classification]).map do |cls|
378
- Classification.new **cls
378
+ Classification.new(**cls)
379
379
  end
380
380
  end
381
381
  end
@@ -418,7 +418,7 @@ module RelatonBib
418
418
  def ics_hash_to_bib(ret)
419
419
  return unless ret[:ics]
420
420
 
421
- ret[:ics] = array(ret[:ics]).map { |ics| ICS.new **ics }
421
+ ret[:ics] = array(ret[:ics]).map { |ics| ICS.new(**ics) }
422
422
  end
423
423
 
424
424
  # @param ret [Hash]
@@ -427,7 +427,7 @@ module RelatonBib
427
427
 
428
428
  sids = array(ret[:structuredidentifier]).map do |si|
429
429
  si[:agency] = array si[:agency]
430
- StructuredIdentifier.new **si
430
+ StructuredIdentifier.new(**si)
431
431
  end
432
432
  ret[:structuredidentifier] = StructuredIdentifierCollection.new sids
433
433
  end
@@ -435,15 +435,14 @@ module RelatonBib
435
435
  # @param ogj [Hash, Array, String]
436
436
  # @return [Hash, Array, String]
437
437
  def symbolize(obj)
438
- if obj.is_a? Hash
438
+ case obj
439
+ when Hash
439
440
  obj.reduce({}) do |memo, (k, v)|
440
441
  memo[k.to_sym] = symbolize(v)
441
442
  memo
442
443
  end
443
- elsif obj.is_a? Array
444
- obj.reduce([]) { |memo, v| memo << symbolize(v) }
445
- else
446
- obj
444
+ when Array then obj.reduce([]) { |memo, v| memo << symbolize(v) }
445
+ else obj
447
446
  end
448
447
  end
449
448
 
@@ -459,7 +458,7 @@ module RelatonBib
459
458
  # @param name [Hash, String, NilClass]
460
459
  # @param person [Hash]
461
460
  # @return [RelatonBib::LocalizedString]
462
- def localname(name, person) # rubocop:disable Metrics/CyclomaticComplexity
461
+ def localname(name, person) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize
463
462
  return nil if name.nil?
464
463
 
465
464
  lang = name[:language] if name.is_a?(Hash)
@@ -21,10 +21,10 @@ module RelatonBib
21
21
  # @return [String]
22
22
  def inspect
23
23
  "<#{self.class}:#{format('%<id>#.14x', id: object_id << 1)} "\
24
- "@text=\"#{@hit_collection&.text}\" "\
25
- "@fetched=\"#{!@fetch.nil?}\" "\
26
- "@fullIdentifier=\"#{@fetch&.shortref(nil)}\" "\
27
- "@title=\"#{@hit[:code]}\">"
24
+ "@text=\"#{@hit_collection&.text}\" "\
25
+ "@fetched=\"#{!@fetch.nil?}\" "\
26
+ "@fullIdentifier=\"#{@fetch&.shortref(nil)}\" "\
27
+ "@title=\"#{@hit[:code]}\">"
28
28
  end
29
29
 
30
30
  def fetch
@@ -38,10 +38,10 @@ module RelatonBib
38
38
  # @return [String] XML
39
39
  def to_xml(**opts)
40
40
  if opts[:builder]
41
- fetch.to_xml **opts
41
+ fetch.to_xml(**opts)
42
42
  else
43
43
  builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
44
- fetch.to_xml **opts.merge(builder: xml)
44
+ fetch.to_xml(**opts.merge(builder: xml))
45
45
  end
46
46
  builder.doc.root.to_xml
47
47
  end
@@ -18,12 +18,8 @@ module RelatonBib
18
18
  # @param language [String] language code Iso639
19
19
  # @param script [String] script code Iso15924
20
20
  def initialize(content, language = nil, script = nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
21
- if content.is_a? Array
22
- inv = content.reject { |c| c.is_a?(LocalizedString) || c.is_a?(Hash) }
23
- end
24
- unless content.is_a?(String) || inv&.none? && content.any?
25
- klass = content.is_a?(Array) ? inv.first.class : content.class
26
- raise ArgumentError, "invalid LocalizedString content type: #{klass}"
21
+ if content.is_a?(Array) && content.none?
22
+ raise ArgumentError, "LocalizedString content is empty"
27
23
  end
28
24
  @language = language.is_a?(String) ? [language] : language
29
25
  @script = script.is_a?(String) ? [script] : script
@@ -31,6 +27,8 @@ module RelatonBib
31
27
  content.map do |c|
32
28
  if c.is_a?(Hash)
33
29
  LocalizedString.new c[:content], c[:language], c[:script]
30
+ elsif c.is_a?(String)
31
+ LocalizedString.new c
34
32
  else c
35
33
  end
36
34
  end
@@ -40,7 +40,7 @@ module RelatonBib
40
40
  # @return [String]
41
41
  def to_asciibib(prefix = "", count = 1)
42
42
  pref = prefix.empty? ? prefix : prefix + "."
43
- out = count > 1 ? "#{pref}identifier::\m" : ""
43
+ out = count > 1 ? "#{pref}identifier::\n" : ""
44
44
  out += "#{pref}identifier.type:: #{type}\n"
45
45
  out += "#{pref}identifier.value:: #{value}\n"
46
46
  out
@@ -119,7 +119,7 @@ module RelatonBib
119
119
  # @return [String]
120
120
  def to_asciibib(prefix = "", count = 1) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
121
121
  pref = prefix.sub /\*$/, "organization"
122
- out = count > 1 ? "#{pref}::\m" : ""
122
+ out = count > 1 ? "#{pref}::\n" : ""
123
123
  name.each { |n| out += n.to_asciibib "#{pref}.name", name.size }
124
124
  out += abbreviation.to_asciibib "#{pref}.abbreviation" if abbreviation
125
125
  subdivision.each do |sd|
@@ -10,7 +10,7 @@ module RelatonBib
10
10
 
11
11
  # @param type [String, NilClass] src/obp/rss
12
12
  # @param content [String]
13
- def initialize(type: nil, content:)
13
+ def initialize(content:, type: nil)
14
14
  @type = type
15
15
  @content = Addressable::URI.parse content if content
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.8.0".freeze
2
+ VERSION = "1.9.1".freeze
3
3
  end
@@ -1,45 +1,57 @@
1
1
  module RelatonBib
2
2
  class WorkGroup
3
3
  # @return [String]
4
- attr_reader :content
4
+ attr_reader :name
5
5
 
6
6
  # @return [Integer, nil]
7
7
  attr_reader :number
8
8
 
9
9
  # @return [String, nil]
10
- attr_reader :type
10
+ attr_reader :identifier, :prefix, :type
11
11
 
12
- # @param content [String]
12
+ # @param name [String]
13
+ # @param identifier [String, nil]
14
+ # @param prefix [String, nil]
13
15
  # @param number [Integer, nil]
14
16
  # @param type [String, nil]
15
- def initialize(content:, number: nil, type: nil)
16
- @content = content
17
+ def initialize(name:, identifier: nil, prefix: nil, number: nil, type: nil)
18
+ @identifier = identifier
19
+ @prefix = prefix
20
+ @name = name
17
21
  @number = number
18
22
  @type = type
19
23
  end
20
24
 
21
25
  # @param builder [Nokogiri::XML::Builder]
22
- def to_xml(builder)
23
- builder.text content
26
+ def to_xml(builder) # rubocop:disable Metrics/AbcSize
27
+ builder.text name
24
28
  builder.parent[:number] = number if number
25
29
  builder.parent[:type] = type if type
30
+ builder.parent[:identifier] = identifier if identifier
31
+ builder.parent[:prefix] = prefix if prefix
26
32
  end
27
33
 
28
34
  # @return [Hash]
29
35
  def to_hash
30
- hash = { "content" => content }
36
+ hash = { "name" => name }
31
37
  hash["number"] = number if number
32
38
  hash["type"] = type if type
39
+ hash["identifier"] = identifier if identifier
40
+ hash["prefix"] = prefix if prefix
33
41
  hash
34
42
  end
35
43
 
36
- # @param prefix [String]
44
+ # @param prfx [String]
45
+ # @param count [Integer]
37
46
  # @return [String]
38
- def to_asciibib(prefix = "")
39
- pref = prefix.empty? ? prefix : prefix + "."
40
- out = "#{pref}content:: #{content}\n"
47
+ def to_asciibib(prfx = "", count = 1) # rubocop:disable Metrics/CyclomaticComplexity
48
+ pref = prfx.empty? ? prfx : "#{prfx}."
49
+ out = count > 1 ? "#{pref}::\n" : ""
50
+ out += "#{pref}name:: #{name}\n"
41
51
  out += "#{pref}number:: #{number}\n" if number
42
52
  out += "#{pref}type:: #{type}\n" if type
53
+ out += "#{pref}identifier:: #{identifier}\n" if identifier
54
+ out += "#{pref}prefix:: #{prefix}\n" if prefix
43
55
  out
44
56
  end
45
57
  end
@@ -52,6 +52,7 @@ module RelatonBib
52
52
  license: bibitem.xpath("license").map(&:text),
53
53
  validity: fetch_validity(bibitem),
54
54
  doctype: ext&.at("doctype")&.text,
55
+ subdoctype: ext&.at("subdoctype")&.text,
55
56
  editorialgroup: fetch_editorialgroup(ext),
56
57
  ics: fetch_ics(ext),
57
58
  structuredidentifier: fetch_structuredidentifier(ext),
@@ -81,7 +82,7 @@ module RelatonBib
81
82
  type: n[:type],
82
83
  format: n[:format],
83
84
  language: n[:language],
84
- script: n[:script]
85
+ script: n[:script],
85
86
  )
86
87
  end
87
88
  BiblioNoteCollection.new bnotes
@@ -201,7 +202,7 @@ module RelatonBib
201
202
  DocumentStatus.new(
202
203
  stage: stg ? stage(stg) : status.text,
203
204
  substage: stage(status.at("substage")),
204
- iteration: status.at("iteration")&.text
205
+ iteration: status.at("iteration")&.text,
205
206
  )
206
207
  end
207
208
 
@@ -262,7 +263,7 @@ module RelatonBib
262
263
  city: c.at("./city")&.text,
263
264
  state: c.at("./state")&.text,
264
265
  country: c.at("./country")&.text,
265
- postcode: c.at("./postcode")&.text
266
+ postcode: c.at("./postcode")&.text,
266
267
  )
267
268
  else
268
269
  Contact.new(type: c.name, value: c.text)
@@ -290,13 +291,13 @@ module RelatonBib
290
291
  name: name,
291
292
  affiliation: affiliations,
292
293
  contact: contact,
293
- identifier: identifier
294
+ identifier: identifier,
294
295
  )
295
296
  end
296
297
 
297
298
  def name_part(person, part)
298
299
  person.xpath("./name/#{part}").map do |np|
299
- LocalizedString.new np.text, np[:language]
300
+ LocalizedString.new np.text, np[:language], np[:script]
300
301
  end
301
302
  end
302
303
 
@@ -358,7 +359,7 @@ module RelatonBib
358
359
  description: relation_description(rel),
359
360
  bibitem: bib_item(item_data(rel.at("./bibitem"))),
360
361
  locality: localities(rel),
361
- source_locality: source_localities(rel)
362
+ source_locality: source_localities(rel),
362
363
  )
363
364
  end
364
365
  end
@@ -376,7 +377,7 @@ module RelatonBib
376
377
  # @param item_hash [Hash]
377
378
  # @return [RelatonBib::BibliographicItem]
378
379
  def bib_item(item_hash)
379
- BibliographicItem.new **item_hash
380
+ BibliographicItem.new(**item_hash)
380
381
  end
381
382
 
382
383
  # @param rel [Nokogiri::XML::Element]
@@ -398,7 +399,7 @@ module RelatonBib
398
399
  klass.new(
399
400
  loc[:type],
400
401
  LocalizedString.new(loc.at("./referenceFrom").text),
401
- ref_to
402
+ ref_to,
402
403
  )
403
404
  end
404
405
 
@@ -436,8 +437,10 @@ module RelatonBib
436
437
  return unless ext && (eg = ext.at "editorialgroup")
437
438
 
438
439
  eg = eg.xpath("technical-committee").map do |tc|
439
- wg = WorkGroup.new(content: tc.text, number: tc[:number]&.to_i,
440
- type: tc[:type])
440
+ wg = WorkGroup.new(
441
+ name: tc.text, number: tc[:number]&.to_i, type: tc[:type],
442
+ identifier: tc[:identifier], prefix: tc[:prefix]
443
+ )
441
444
  TechnicalCommittee.new wg
442
445
  end
443
446
  EditorialGroup.new eg if eg.any?
@@ -468,7 +471,7 @@ module RelatonBib
468
471
  supplementtype: si.at("supplementtype")&.text,
469
472
  supplementnumber: si.at("supplementnumber")&.text,
470
473
  language: si.at("language")&.text,
471
- year: si.at("year")&.text
474
+ year: si.at("year")&.text,
472
475
  )
473
476
  end
474
477
  StructuredIdentifierCollection.new sids
data/lib/relaton_bib.rb CHANGED
@@ -39,11 +39,11 @@ module RelatonBib
39
39
 
40
40
  # @param array [Array]
41
41
  # @return [Array<String>, String]
42
- def single_element_array(array) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
42
+ def single_element_array(array)
43
43
  if array.size > 1
44
44
  array.map { |e| e.is_a?(String) ? e : e.to_hash }
45
45
  else
46
- array.first&.is_a?(String) ? array[0] : array.first&.to_hash
46
+ array.first.is_a?(String) ? array[0] : array.first&.to_hash
47
47
  end
48
48
  end
49
49
  end
data/relaton-bib.gemspec CHANGED
@@ -21,14 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.bindir = "exe"
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
- spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
24
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
25
25
 
26
26
  spec.add_development_dependency "byebug"
27
- # ec.add_development_dependency "debase"
28
27
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
29
28
  spec.add_development_dependency "rake", "~> 13.0"
30
29
  spec.add_development_dependency "rspec", "~> 3.0"
31
- # spec.add_development_dependency "ruby-debug-ide"
32
30
  spec.add_development_dependency "ruby-jing"
33
31
  spec.add_development_dependency "simplecov"
34
32
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-17 00:00:00.000000000 Z
11
+ date: 2021-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -226,7 +226,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 2.4.0
229
+ version: 2.5.0
230
230
  required_rubygems_version: !ruby/object:Gem::Requirement
231
231
  requirements:
232
232
  - - ">="