relaton-bib 1.10.7 → 1.11.0

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: 97f3e3e14c073c18fac8b204483116de57d77338ed7de3ce6f03c75da41fd0c1
4
- data.tar.gz: 713f4591e31ff1538b31f75bff7b6e1d4770a8f87fbd5e01445968cf8e6ffb8c
3
+ metadata.gz: a787155aa8128f6bbd98734d80eb23d60d890f564b0357b3d79070659a1322eb
4
+ data.tar.gz: 92f839bcc00d8346aece24347903e833268d6c89df5da8150e108f680ae171fa
5
5
  SHA512:
6
- metadata.gz: c75ffe32176bb63fa2d9ff7717312ac15dce830622cf8db699628f4a93f45e8f4907431120236d726d1cc9a5d1fcb91e1b5ca39772ac70429fec44cfb7dd198a
7
- data.tar.gz: c4bad97d2b455e787e3e4e8eed11b8e7e466eb288655e2055b0d7fa38c236a7e02f59701cc7c693230879a5116c7872fa16bd70ada9827535894542841d9d716
6
+ metadata.gz: f9a7e7163e3d93cea465b269aea55a18e585fa65165512cfa383f05a081605c66680912d77b0a4878ff27690713cee8d8b28dc9bbb84bb2477cf854a799e1a23
7
+ data.tar.gz: 017ea5aab785898a8ed574bc685a14006b2b60c936996a97b5b96e18746f1ac23d1dc43ebfd5886cec7416469e0a8843886277f8d4e5e4ade1cd907739318a2e
data/grammars/biblio.rng CHANGED
@@ -677,6 +677,9 @@
677
677
  <zeroOrMore>
678
678
  <ref name="extent"/>
679
679
  </zeroOrMore>
680
+ <optional>
681
+ <ref name="bibliographic_size"/>
682
+ </optional>
680
683
  <zeroOrMore>
681
684
  <ref name="accesslocation"/>
682
685
  </zeroOrMore>
@@ -922,9 +925,29 @@
922
925
  <text/>
923
926
  </element>
924
927
  </define>
928
+ <define name="sizevalue">
929
+ <element name="value">
930
+ <attribute name="type"/>
931
+ <text/>
932
+ </element>
933
+ </define>
934
+ <define name="bibliographic_size">
935
+ <element name="size">
936
+ <oneOrMore>
937
+ <ref name="sizevalue"/>
938
+ </oneOrMore>
939
+ </element>
940
+ </define>
925
941
  <define name="extent">
926
942
  <element name="extent">
927
- <ref name="BibItemLocality"/>
943
+ <choice>
944
+ <zeroOrMore>
945
+ <ref name="locality"/>
946
+ </zeroOrMore>
947
+ <zeroOrMore>
948
+ <ref name="localityStack"/>
949
+ </zeroOrMore>
950
+ </choice>
928
951
  </element>
929
952
  </define>
930
953
  <define name="series">
data/grammars/isodoc.rng CHANGED
@@ -152,9 +152,7 @@
152
152
  <data type="boolean"/>
153
153
  </attribute>
154
154
  </optional>
155
- <oneOrMore>
156
- <ref name="PureTextElement"/>
157
- </oneOrMore>
155
+ <ref name="XrefBody"/>
158
156
  </element>
159
157
  </define>
160
158
  <define name="erefType">
@@ -188,6 +186,42 @@
188
186
  <ref name="PureTextElement"/>
189
187
  </oneOrMore>
190
188
  </define>
189
+ <define name="localityStack">
190
+ <element name="localityStack">
191
+ <optional>
192
+ <attribute name="connective">
193
+ <choice>
194
+ <value>and</value>
195
+ <value>or</value>
196
+ <value>from</value>
197
+ <value>to</value>
198
+ <value/>
199
+ </choice>
200
+ </attribute>
201
+ </optional>
202
+ <zeroOrMore>
203
+ <ref name="locality"/>
204
+ </zeroOrMore>
205
+ </element>
206
+ </define>
207
+ <define name="sourceLocalityStack">
208
+ <element name="sourceLocalityStack">
209
+ <optional>
210
+ <attribute name="connective">
211
+ <choice>
212
+ <value>and</value>
213
+ <value>or</value>
214
+ <value>from</value>
215
+ <value>to</value>
216
+ <value/>
217
+ </choice>
218
+ </attribute>
219
+ </optional>
220
+ <zeroOrMore>
221
+ <ref name="sourceLocality"/>
222
+ </zeroOrMore>
223
+ </element>
224
+ </define>
191
225
  <define name="ul">
192
226
  <element name="ul">
193
227
  <attribute name="id">
@@ -1098,6 +1132,16 @@
1098
1132
  </define>
1099
1133
  </include>
1100
1134
  <!-- end overrides -->
1135
+ <define name="image" combine="choice">
1136
+ <element name="svg">
1137
+ <oneOrMore>
1138
+ <choice>
1139
+ <text/>
1140
+ <ref name="AnyElement"/>
1141
+ </choice>
1142
+ </oneOrMore>
1143
+ </element>
1144
+ </define>
1101
1145
  <define name="MultilingualRenderingType">
1102
1146
  <choice>
1103
1147
  <value>common</value>
@@ -2631,4 +2675,30 @@
2631
2675
  </zeroOrMore>
2632
2676
  </element>
2633
2677
  </define>
2678
+ <define name="XrefBody">
2679
+ <zeroOrMore>
2680
+ <ref name="XrefTarget"/>
2681
+ </zeroOrMore>
2682
+ <oneOrMore>
2683
+ <ref name="PureTextElement"/>
2684
+ </oneOrMore>
2685
+ </define>
2686
+ <define name="XrefTarget">
2687
+ <element name="location">
2688
+ <attribute name="target">
2689
+ <data type="string">
2690
+ <param name="pattern">\i\c*|\c+#\c+</param>
2691
+ </data>
2692
+ </attribute>
2693
+ <attribute name="connective">
2694
+ <choice>
2695
+ <value>and</value>
2696
+ <value>or</value>
2697
+ <value>from</value>
2698
+ <value>to</value>
2699
+ <value/>
2700
+ </choice>
2701
+ </attribute>
2702
+ </element>
2703
+ </define>
2634
2704
  </grammar>
@@ -51,6 +51,22 @@ module RelatonBib
51
51
  out += "#{pref}reference_to:: #{reference_to}\n" if reference_to
52
52
  out
53
53
  end
54
+
55
+ #
56
+ # Render locality as BibTeX.
57
+ #
58
+ # @param [BibTeX::Entry] item BibTeX entry.
59
+ #
60
+ def to_bibtex(item)
61
+ case type
62
+ when "chapter" then item.chapter = reference_from
63
+ when "page"
64
+ value = reference_from
65
+ value += "-#{reference_to}" if reference_to
66
+ item.pages = value
67
+ when "volume" then item.volume = reference_from
68
+ end
69
+ end
54
70
  end
55
71
 
56
72
  class Locality < BibItemLocality
@@ -58,6 +74,28 @@ module RelatonBib
58
74
  def to_xml(builder)
59
75
  builder.locality { |b| super(b) }
60
76
  end
77
+
78
+ #
79
+ # Render locality as hash.
80
+ #
81
+ # @return [Hash] locality as hash.
82
+ #
83
+ def to_hash
84
+ { "locality" => super }
85
+ end
86
+
87
+ #
88
+ # Render locality as AsciiBib.
89
+ #
90
+ # @param [String] prefix prefix of locality
91
+ # @param [Integer] count number of localities
92
+ #
93
+ # @return [String] AsciiBib.
94
+ #
95
+ def to_asciibib(prefix = "", count = 1)
96
+ pref = prefix.empty? ? "locality" : "#{prefix}.locality"
97
+ super(pref, count)
98
+ end
61
99
  end
62
100
 
63
101
  class LocalityStack
@@ -82,6 +120,30 @@ module RelatonBib
82
120
  def to_hash
83
121
  { "locality_stack" => single_element_array(locality) }
84
122
  end
123
+
124
+ #
125
+ # Render locality stack as AsciiBib.
126
+ #
127
+ # @param [String] prefix <description>
128
+ # @param [Integer] size size of locality stack
129
+ #
130
+ # @return [String] AsciiBib.
131
+ #
132
+ def to_asciibib(prefix = "", size = 1)
133
+ pref = prefix.empty? ? "locality_stack" : "#{prefix}.locality_stack"
134
+ out = ""
135
+ out << "#{pref}::\n" if size > 1
136
+ out << locality.map { |l| l.to_asciibib(pref, locality.size) }.join
137
+ end
138
+
139
+ #
140
+ # Render locality stack as BibTeX.
141
+ #
142
+ # @param [BibTeX::Entry] item BibTeX entry.
143
+ #
144
+ def to_bibtex(item)
145
+ locality.each { |l| l.to_bibtex(item) }
146
+ end
85
147
  end
86
148
 
87
149
  class SourceLocality < BibItemLocality
@@ -27,6 +27,7 @@ require "relaton_bib/place"
27
27
  require "relaton_bib/structured_identifier"
28
28
  require "relaton_bib/editorial_group"
29
29
  require "relaton_bib/ics"
30
+ require "relaton_bib/bibliographic_size"
30
31
 
31
32
  module RelatonBib
32
33
  # Bibliographic item
@@ -95,7 +96,7 @@ module RelatonBib
95
96
  # @return [Array<RelatonBib::Place>]
96
97
  attr_reader :place
97
98
 
98
- # @return [Array<RelatonBib::BibItemLocality>]
99
+ # @return [Array<RelatonBib::Locality, RelatonBib::LocalityStack>]
99
100
  attr_reader :extent
100
101
 
101
102
  # @return [Array<Strig>]
@@ -122,6 +123,9 @@ module RelatonBib
122
123
  # @return [RelatonBib::StructuredIdentifierCollection]
123
124
  attr_reader :structuredidentifier
124
125
 
126
+ # @return [RelatonBib::BibliographicSize, nil]
127
+ attr_reader :size
128
+
125
129
  # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
126
130
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
127
131
 
@@ -141,7 +145,7 @@ module RelatonBib
141
145
  # @param series [Array<RelatonBib::Series>]
142
146
  # @param medium [RelatonBib::Medium, NilClas]
143
147
  # @param place [Array<String, RelatonBib::Place>]
144
- # @param extent [Array<Relaton::BibItemLocality>]
148
+ # @param extent [Array<Relaton::Locality, RelatonBib::LocalityStack>]
145
149
  # @param accesslocation [Array<String>]
146
150
  # @param classification [Array<RelatonBib::Classification>]
147
151
  # @param validity [RelatonBib:Validity, NilClass]
@@ -152,6 +156,7 @@ module RelatonBib
152
156
  # @param editorialgroup [RelatonBib::EditorialGroup, nil]
153
157
  # @param ics [Array<RelatonBib::ICS>]
154
158
  # @param structuredidentifier [RelatonBib::StructuredIdentifierCollection]
159
+ # @param size [RelatonBib::BibliographicSize, nil]
155
160
  #
156
161
  # @param copyright [Array<Hash, RelatonBib::CopyrightAssociation>]
157
162
  # @option copyright [Array<Hash, RelatonBib::ContributionInfo>] :owner
@@ -243,6 +248,7 @@ module RelatonBib
243
248
  pl.is_a?(String) ? Place.new(name: pl) : pl
244
249
  end
245
250
  @extent = args[:extent] || []
251
+ @size = args[:size]
246
252
  @accesslocation = args.fetch :accesslocation, []
247
253
  @classification = args.fetch :classification, []
248
254
  @validity = args[:validity]
@@ -372,6 +378,7 @@ module RelatonBib
372
378
  hash["medium"] = medium.to_hash if medium
373
379
  hash["place"] = single_element_array(place) if place&.any?
374
380
  hash["extent"] = single_element_array(extent) if extent&.any?
381
+ hash["size"] = size.to_hash if size&.any?
375
382
  if accesslocation&.any?
376
383
  hash["accesslocation"] = single_element_array(accesslocation)
377
384
  end
@@ -525,6 +532,7 @@ module RelatonBib
525
532
  out += medium.to_asciibib prefix if medium
526
533
  place.each { |pl| out += pl.to_asciibib prefix, place.size }
527
534
  extent.each { |ex| out += ex.to_asciibib "#{pref}extent", extent.size }
535
+ out += size.to_asciibib pref if size
528
536
  accesslocation.each { |al| out += "#{pref}accesslocation:: #{al}\n" }
529
537
  classification.each do |cl|
530
538
  out += cl.to_asciibib prefix, classification.size
@@ -624,16 +632,7 @@ module RelatonBib
624
632
 
625
633
  # @param [BibTeX::Entry]
626
634
  def bibtex_extent(item)
627
- extent.each do |e|
628
- case e.type
629
- when "chapter" then item.chapter = e.reference_from
630
- when "page"
631
- value = e.reference_from
632
- value += "-#{e.reference_to}" if e.reference_to
633
- item.pages = value
634
- when "volume" then item.volume = e.reference_from
635
- end
636
- end
635
+ extent.each { |e| e.to_bibtex(item) }
637
636
  end
638
637
 
639
638
  # @param [BibTeX::Entry]
@@ -736,6 +735,7 @@ module RelatonBib
736
735
  medium&.to_xml builder
737
736
  place.each { |pl| pl.to_xml builder }
738
737
  extent.each { |e| builder.extent { e.to_xml builder } }
738
+ size&.to_xml builder
739
739
  accesslocation.each { |al| builder.accesslocation al }
740
740
  license.each { |l| builder.license l }
741
741
  classification.each { |cls| cls.to_xml builder }
@@ -0,0 +1,103 @@
1
+ module RelatonBib
2
+ class BibliographicSize
3
+ extend Forwardable
4
+
5
+ def_delegators :@size, :any?
6
+
7
+ # @return [Array<RelatonBib::BibliographicSize::Value>]
8
+ attr_reader :size
9
+
10
+ #
11
+ # Initialize a BibliographicSize object.
12
+ #
13
+ # @param [<Type>] size <description>
14
+ #
15
+ def initialize(size)
16
+ @size = size
17
+ end
18
+
19
+ #
20
+ # Render BibliographicSize object to XML.
21
+ #
22
+ # @param [Nokogiri::XML::Builder] builder the XML builder
23
+ #
24
+ def to_xml(builder)
25
+ return if size.empty?
26
+
27
+ builder.size do
28
+ size.each { |s| s.to_xml builder }
29
+ end
30
+ end
31
+
32
+ #
33
+ # Render BibliographicSize object to AsciiBib.
34
+ #
35
+ # @param [String] prefix prefix for the size
36
+ #
37
+ # @return [String] AsciiBib string
38
+ #
39
+ def to_asciibib(prefix = "")
40
+ pref = prefix.empty? ? "size" : "#{prefix}.size"
41
+ size.map { |s| s.to_asciibib pref, size.size }.join
42
+ end
43
+
44
+ #
45
+ # Render BibliographicSize object to hash.
46
+ #
47
+ # @return [<Type>] <description>
48
+ #
49
+ def to_hash
50
+ size.map &:to_hash
51
+ end
52
+
53
+ class Value
54
+ # @return [String]
55
+ attr_reader :type, :value
56
+
57
+ #
58
+ # Initialize a BibliographicSize::Value object.
59
+ #
60
+ # @param [String] type the type of the size
61
+ # @param [String] value size value
62
+ #
63
+ def initialize(type:, value:)
64
+ @type = type
65
+ @value = value
66
+ end
67
+
68
+ #
69
+ # Render BibliographicSize::Value object to XML.
70
+ #
71
+ # @param [Nokogiri::XML::Builder] builder the XML builder
72
+ #
73
+ def to_xml(builder)
74
+ builder.value value, type: type
75
+ end
76
+
77
+ #
78
+ # Render BibliographicSize::Value object to hash.
79
+ #
80
+ # @return [<Type>] <description>
81
+ #
82
+ def to_hash
83
+ { type: type, value: value }
84
+ end
85
+
86
+ #
87
+ # Render BibliographicSize::Value object to AsciiBib.
88
+ #
89
+ # @param [String] prefix prefix for the size
90
+ # @param [Integer] size size of the array
91
+ #
92
+ # @return [String] AsciiBib string
93
+ #
94
+ def to_asciibib(prefix, size)
95
+ pref = prefix.empty? ? "" : "#{prefix}."
96
+ out = ""
97
+ out << "#{prefix}::\n" if size.size > 1
98
+ out << "#{pref}type:: #{type}\n"
99
+ out << "#{pref}value:: #{value}\n"
100
+ end
101
+ end
102
+ end
103
+ end
@@ -29,6 +29,7 @@ module RelatonBib
29
29
  medium_hash_to_bib(ret)
30
30
  place_hash_to_bib(ret)
31
31
  extent_hash_to_bib(ret)
32
+ size_hash_to_bib(ret)
32
33
  accesslocation_hash_to_bib(ret)
33
34
  classification_hash_to_bib(ret)
34
35
  validity_hash_to_bib(ret)
@@ -48,13 +49,32 @@ module RelatonBib
48
49
  def extent_hash_to_bib(ret)
49
50
  return unless ret[:extent]
50
51
 
51
- ret[:extent] = array(ret[:extent])
52
- ret[:extent]&.each_with_index do |e, i|
53
- ret[:extent][i] = BibItemLocality.new(e[:type], e[:reference_from],
54
- e[:reference_to])
52
+ ret[:extent] = array(ret[:extent]).map do |e|
53
+ locality e
54
+ # ret[:extent][i] = Locality.new(e[:type], e[:reference_from],
55
+ # e[:reference_to])
55
56
  end
56
57
  end
57
58
 
59
+ def locality(loc)
60
+ if loc[:locality_stack]
61
+ LocalityStack.new(loc[:locality_stack].map { |l| locality(l) })
62
+ else
63
+ l = loc[:locality]
64
+ Locality.new(l[:type], l[:reference_from], l[:reference_to])
65
+ end
66
+ end
67
+
68
+ def size_hash_to_bib(ret)
69
+ return unless ret[:size]
70
+
71
+ ret[:size] = array(ret[:size])
72
+ size = ret[:size]&.map do |val|
73
+ BibliographicSize::Value.new(**val)
74
+ end
75
+ ret[:size] = BibliographicSize.new(size)
76
+ end
77
+
58
78
  def title_hash_to_bib(ret)
59
79
  return unless ret[:title]
60
80
 
@@ -316,18 +336,19 @@ module RelatonBib
316
336
 
317
337
  # @param rel [Hash] relation
318
338
  # @return [RelatonBib::LocalityStack]
319
- def relation_locality_hash_to_bib(rel) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
339
+ def relation_locality_hash_to_bib(rel)
320
340
  rel[:locality] = array(rel[:locality])&.map do |bl|
321
- ls = if bl[:locality_stack]
322
- array(bl[:locality_stack]).map do |l|
323
- Locality.new(l[:type], l[:reference_from], l[:reference_to])
324
- end
325
- else
326
- l = Locality.new(bl[:type], bl[:reference_from],
327
- bl[:reference_to])
328
- [l]
329
- end
330
- LocalityStack.new ls
341
+ LocalityStack.new locality_locality_stack(bl)
342
+ end
343
+ end
344
+
345
+ def locality_locality_stack(lls)
346
+ if lls[:locality_stack]
347
+ array(lls[:locality_stack]).map do |l|
348
+ Locality.new(l[:type], l[:reference_from], l[:reference_to])
349
+ end
350
+ else
351
+ [Locality.new(lls[:type], lls[:reference_from], lls[:reference_to])]
331
352
  end
332
353
  end
333
354
 
@@ -1,41 +1,73 @@
1
1
  module RelatonBib
2
2
  class Medium
3
- # @return [String, NilClass]
4
- attr_reader :form, :size, :scale
3
+ # @return [String, nil]
4
+ attr_reader :content, :genre, :form, :carrier, :size, :scale
5
5
 
6
- # @param form [String, NilClass]
7
- # @param size [String, NilClass]
8
- # @param scale [String, NilClass]
9
- def initialize(form: nil, size: nil, scale: nil)
10
- @form = form
11
- @size = size
12
- @scale = scale
6
+ #
7
+ # Initialize a Medium object.
8
+ #
9
+ # @param content [String, nil] content of the medium
10
+ # @param genre [String, nil] genre of the medium
11
+ # @param form [String, nil] form of the medium
12
+ # @param carrier [String, nil] carrier of the medium
13
+ # @param size [String, nil] size of the medium
14
+ # @param scale [String, nil]
15
+ #
16
+ def initialize(**args)
17
+ @content = args[:content]
18
+ @genre = args[:genre]
19
+ @form = args[:form]
20
+ @carrier = args[:carrier]
21
+ @size = args[:size]
22
+ @scale = args[:scale]
13
23
  end
14
24
 
25
+ #
26
+ # Render Medium object to XML.
27
+ #
15
28
  # @param builder [Nokogiri::XML::Builder]
16
- def to_xml(builder)
29
+ #
30
+ def to_xml(builder) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
17
31
  builder.medium do
32
+ builder.content content if content
33
+ builder.genre genre if genre
18
34
  builder.form form if form
35
+ builder.carrier carrier if carrier
19
36
  builder.size size if size
20
37
  builder.scale scale if scale
21
38
  end
22
39
  end
23
40
 
41
+ #
42
+ # Render Medium object to hash.
43
+ #
24
44
  # @return [Hash]
25
- def to_hash
45
+ #
46
+ def to_hash # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
26
47
  hash = {}
48
+ hash["content"] = content if content
49
+ hash["genre"] = genre if genre
27
50
  hash["form"] = form if form
51
+ hash["carrier"] = carrier if carrier
28
52
  hash["size"] = size if size
29
53
  hash["scale"] = scale if scale
30
54
  hash
31
55
  end
32
56
 
57
+ #
58
+ # Render Medium object to AsciiBib.
59
+ #
33
60
  # @param prefix [String]
61
+ #
34
62
  # @return [String]
35
- def to_asciibib(prefix = "")
36
- pref = prefix.empty? ? "medium." : prefix + ".medium."
63
+ #
64
+ def to_asciibib(prefix = "") # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
65
+ pref = prefix.empty? ? "medium." : "#{prefix}.medium."
37
66
  out = ""
67
+ out += "#{pref}content:: #{content}\n" if content
68
+ out += "#{pref}genre:: #{genre}\n" if genre
38
69
  out += "#{pref}form:: #{form}\n" if form
70
+ out += "#{pref}carrier:: #{carrier}\n" if carrier
39
71
  out += "#{pref}size:: #{size}\n" if size
40
72
  out += "#{pref}scale:: #{scale}\n" if scale
41
73
  out
@@ -7,49 +7,35 @@ module RelatonBib
7
7
  class Series
8
8
  # TYPES = %w[main alt].freeze
9
9
 
10
- # @return [String, NilClass] allowed values: "main" or "alt"
10
+ # @return [String, nil] allowed values: "main" or "alt"
11
11
  attr_reader :type
12
12
 
13
- # @return [RelatonBib::FormattedRef, NilClass]
13
+ # @return [RelatonBib::FormattedRef, nil]
14
14
  attr_reader :formattedref
15
15
 
16
- # @return [RelatonBib::TypedTitleString, NilClass] title
16
+ # @return [RelatonBib::TypedTitleString, nil] title
17
17
  attr_reader :title
18
18
 
19
- # @return [String, NilClass]
20
- attr_reader :place
19
+ # @return [String, nil]
20
+ attr_reader :place, :organization, :from, :to, :number, :partnumber, :run
21
21
 
22
- # @return [String, NilClass]
23
- attr_reader :organization
24
-
25
- # @return [RelatonBib::LocalizedString, NilClass]
22
+ # @return [RelatonBib::LocalizedString, nil]
26
23
  attr_reader :abbreviation
27
24
 
28
- # @return [String, NilClass] date or year
29
- attr_reader :from
30
-
31
- # @return [String, NilClass] date or year
32
- attr_reader :to
33
-
34
- # @return [String, NilClass]
35
- attr_reader :number
36
-
37
- # @return [String, NilClass]
38
- attr_reader :partnumber
39
-
40
25
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
41
26
 
42
- # @param type [String, NilClass]
43
- # @param formattedref [RelatonBib::FormattedRef, NilClass]
44
- # @param title [RelatonBib::TypedTitleString, NilClass] title or
27
+ # @param type [String, nil]
28
+ # @param formattedref [RelatonBib::FormattedRef, nil]
29
+ # @param title [RelatonBib::TypedTitleString, nil] title or
45
30
  # formattedref argument should be passed
46
- # @param place [String, NilClass]
47
- # @param orgaization [String, NilClass]
48
- # @param abbreviation [RelatonBib::LocalizedString, NilClass]
49
- # @param from [String, NilClass]
50
- # @param to [String, NilClass]
51
- # @param number [String, NilClass]
52
- # @param partnumber [String, NilClass]
31
+ # @param place [String, nil]
32
+ # @param orgaization [String, nil]
33
+ # @param abbreviation [RelatonBib::LocalizedString, nil]
34
+ # @param from [String, nil]
35
+ # @param to [String, nil]
36
+ # @param number [String, nil]
37
+ # @param partnumber [String, nil]
38
+ # @param run [String, nil]
53
39
  def initialize(**args)
54
40
  unless args[:title].is_a?(RelatonBib::TypedTitleString) ||
55
41
  args[:formattedref]
@@ -70,6 +56,7 @@ module RelatonBib
70
56
  @to = args[:to]
71
57
  @number = args[:number]
72
58
  @partnumber = args[:partnumber]
59
+ @run = args[:run]
73
60
  end
74
61
  # rubocop:enable Metrics/MethodLength
75
62
 
@@ -89,6 +76,7 @@ module RelatonBib
89
76
  builder.to to if to
90
77
  builder.number number if number
91
78
  builder.partnumber partnumber if partnumber
79
+ builder.run run if run
92
80
  end
93
81
  end
94
82
  xml[:type] = type if type
@@ -109,6 +97,7 @@ module RelatonBib
109
97
  hash["to"] = to if to
110
98
  hash["number"] = number if number
111
99
  hash["partnumber"] = partnumber if partnumber
100
+ hash["run"] = run if run
112
101
  hash
113
102
  end
114
103
 
@@ -128,6 +117,7 @@ module RelatonBib
128
117
  out += "#{pref}.to:: #{to}\n" if to
129
118
  out += "#{pref}.number:: #{number}\n" if number
130
119
  out += "#{pref}.partnumber:: #{partnumber}\n" if partnumber
120
+ out += "#{pref}.run:: #{run}\n" if run
131
121
  out
132
122
  end
133
123
  end
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.10.7".freeze
2
+ VERSION = "1.11.0".freeze
3
3
  end
@@ -46,6 +46,7 @@ module RelatonBib
46
46
  medium: fetch_medium(bibitem),
47
47
  place: fetch_place(bibitem),
48
48
  extent: fetch_extent(bibitem),
49
+ size: fetch_size(bibitem),
49
50
  accesslocation: bibitem.xpath("./accesslocation").map(&:text),
50
51
  classification: fetch_classification(bibitem),
51
52
  keyword: bibitem.xpath("keyword").map(&:text),
@@ -115,29 +116,38 @@ module RelatonBib
115
116
  organization: sr.at("organization")&.text,
116
117
  abbreviation: abbreviation, from: sr.at("from")&.text,
117
118
  to: sr.at("to")&.text, number: sr.at("number")&.text,
118
- partnumber: sr.at("partnumber")&.text
119
+ partnumber: sr.at("partnumber")&.text, run: sr.at("run")&.text,
119
120
  )
120
121
  end
121
122
  end
122
123
 
123
- def fetch_medium(item)
124
+ def fetch_medium(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize,Metrics/PerceivedComplexity
124
125
  medium = item.at("./medium")
125
126
  return unless medium
126
127
 
127
128
  Medium.new(
128
- form: medium.at("form")&.text, size: medium.at("size")&.text,
129
- scale: medium.at("scale")&.text
129
+ content: medium.at("content")&.text, genre: medium.at("genre")&.text,
130
+ form: medium.at("form")&.text, carrier: medium.at("carrier")&.text,
131
+ size: medium.at("size")&.text, scale: medium.at("scale")&.text
130
132
  )
131
133
  end
132
134
 
133
135
  def fetch_extent(item)
134
- item.xpath("./extent").map do |ex|
135
- BibItemLocality.new(
136
- ex[:type], ex.at("referenceFrom")&.text, ex.at("referenceTo")&.text
137
- )
136
+ item.xpath("./extent").reduce([]) do |a, ex|
137
+ a + localities(ex)
138
+ # Locality.new(
139
+ # ex[:type], ex.at("referenceFrom")&.text, ex.at("referenceTo")&.text
140
+ # )
138
141
  end
139
142
  end
140
143
 
144
+ def fetch_size(item)
145
+ size = item.xpath("./size/value").map do |sz|
146
+ BibliographicSize::Value.new type: sz[:type], value: sz.text
147
+ end
148
+ BibliographicSize.new size if size.any?
149
+ end
150
+
141
151
  def fetch_classification(item)
142
152
  item.xpath("classification").map do |cls|
143
153
  Classification.new type: cls[:type], value: cls.text
@@ -390,8 +400,8 @@ module RelatonBib
390
400
  # @return [Array<RelatonBib::Locality, RelatonBib::LocalityStack>]
391
401
  def localities(rel)
392
402
  rel.xpath("./locality|./localityStack").map do |lc|
393
- if lc[:type]
394
- LocalityStack.new [locality(lc)]
403
+ if lc.name == "locality"
404
+ Locality.new lc[:type], lc.at("referenceFrom").text, lc.at("referenceTo")&.text
395
405
  else
396
406
  LocalityStack.new(lc.xpath("./locality").map { |l| locality l })
397
407
  end
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.10.7
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-06 00:00:00.000000000 Z
11
+ date: 2022-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -223,6 +223,7 @@ files:
223
223
  - lib/relaton_bib/biblio_version.rb
224
224
  - lib/relaton_bib/bibliographic_date.rb
225
225
  - lib/relaton_bib/bibliographic_item.rb
226
+ - lib/relaton_bib/bibliographic_size.rb
226
227
  - lib/relaton_bib/bibtex_parser.rb
227
228
  - lib/relaton_bib/bibxml_parser.rb
228
229
  - lib/relaton_bib/classification.rb