relaton-bib 1.10.7 → 1.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +5 -1
- data/grammars/biblio.rng +62 -10
- data/grammars/isodoc.rng +73 -3
- data/lib/relaton_bib/bib_item_locality.rb +62 -0
- data/lib/relaton_bib/bibliographic_item.rb +12 -12
- data/lib/relaton_bib/bibliographic_size.rb +103 -0
- data/lib/relaton_bib/hash_converter.rb +36 -15
- data/lib/relaton_bib/medium.rb +45 -13
- data/lib/relaton_bib/place.rb +120 -28
- data/lib/relaton_bib/series.rb +21 -31
- data/lib/relaton_bib/version.rb +1 -1
- data/lib/relaton_bib/xml_parser.rb +47 -14
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d15360baaf96bbd8ba4bb079f5c1ed71b2d1a3c04a709b7b26122b10ea6e998d
|
|
4
|
+
data.tar.gz: ea64b85cfe56d2bac01881c246877f9ffb5329bf108dbffbe9e9ce789352a244
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c94693cbcd3a935883d608a80af6d8660ebf08a079898a4658ed057fd5ce7f84e93631f33579f8fbc6696b80f1413fac49b2dd48af120d5c60c7e104ebbf1b01
|
|
7
|
+
data.tar.gz: e98dca1228dff147f05e7ea460a95ea909137fa49fdd38fdc9af3c9147e3030e0ef1c65906f79dac5f108b5d2d0107410c52bf8d584a75401f01fd112a8205cb
|
data/README.adoc
CHANGED
|
@@ -213,7 +213,11 @@ item = RelatonBib::BibliographicItem.new(
|
|
|
213
213
|
),
|
|
214
214
|
place: [
|
|
215
215
|
"bib place",
|
|
216
|
-
RelatonBib::Place.new(
|
|
216
|
+
RelatonBib::Place.new(
|
|
217
|
+
city: "Geneva",
|
|
218
|
+
region: [RelatonBib::Place::RegionType.new(name: "Region")],
|
|
219
|
+
country: [RelatonBib::Place::RegionType.new(name: "Switzeland", iso: "SH", recommended: true)],
|
|
220
|
+
)
|
|
217
221
|
],
|
|
218
222
|
extent: [
|
|
219
223
|
RelatonBib::BibItemLocality.new("section", "Reference from", "Reference to"),
|
data/grammars/biblio.rng
CHANGED
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
</define>
|
|
528
528
|
<define name="LocalityType">
|
|
529
529
|
<data type="string">
|
|
530
|
-
<param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
|
|
530
|
+
<param name="pattern">section|clause|part|paragraph|chapter|page|title|line|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
|
|
531
531
|
</data>
|
|
532
532
|
</define>
|
|
533
533
|
<define name="referenceFrom">
|
|
@@ -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>
|
|
@@ -848,17 +851,46 @@
|
|
|
848
851
|
</define>
|
|
849
852
|
<define name="bplace">
|
|
850
853
|
<element name="place">
|
|
851
|
-
<
|
|
852
|
-
<
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
854
|
+
<choice>
|
|
855
|
+
<text/>
|
|
856
|
+
<group>
|
|
857
|
+
<ref name="bibliocity"/>
|
|
858
|
+
<zeroOrMore>
|
|
859
|
+
<ref name="biblioregion"/>
|
|
860
|
+
</zeroOrMore>
|
|
861
|
+
<zeroOrMore>
|
|
862
|
+
<ref name="bibliocountry"/>
|
|
863
|
+
</zeroOrMore>
|
|
864
|
+
</group>
|
|
865
|
+
</choice>
|
|
866
|
+
</element>
|
|
867
|
+
</define>
|
|
868
|
+
<define name="bibliocity">
|
|
869
|
+
<element name="city">
|
|
859
870
|
<text/>
|
|
860
871
|
</element>
|
|
861
872
|
</define>
|
|
873
|
+
<define name="biblioregion">
|
|
874
|
+
<element name="region">
|
|
875
|
+
<ref name="RegionType"/>
|
|
876
|
+
</element>
|
|
877
|
+
</define>
|
|
878
|
+
<define name="bibliocountry">
|
|
879
|
+
<element name="country">
|
|
880
|
+
<ref name="RegionType"/>
|
|
881
|
+
</element>
|
|
882
|
+
</define>
|
|
883
|
+
<define name="RegionType">
|
|
884
|
+
<optional>
|
|
885
|
+
<attribute name="iso"/>
|
|
886
|
+
</optional>
|
|
887
|
+
<optional>
|
|
888
|
+
<attribute name="recommended">
|
|
889
|
+
<data type="boolean"/>
|
|
890
|
+
</attribute>
|
|
891
|
+
</optional>
|
|
892
|
+
<text/>
|
|
893
|
+
</define>
|
|
862
894
|
<define name="bprice">
|
|
863
895
|
<element name="price">
|
|
864
896
|
<attribute name="currency"/>
|
|
@@ -922,9 +954,29 @@
|
|
|
922
954
|
<text/>
|
|
923
955
|
</element>
|
|
924
956
|
</define>
|
|
957
|
+
<define name="sizevalue">
|
|
958
|
+
<element name="value">
|
|
959
|
+
<attribute name="type"/>
|
|
960
|
+
<text/>
|
|
961
|
+
</element>
|
|
962
|
+
</define>
|
|
963
|
+
<define name="bibliographic_size">
|
|
964
|
+
<element name="size">
|
|
965
|
+
<oneOrMore>
|
|
966
|
+
<ref name="sizevalue"/>
|
|
967
|
+
</oneOrMore>
|
|
968
|
+
</element>
|
|
969
|
+
</define>
|
|
925
970
|
<define name="extent">
|
|
926
971
|
<element name="extent">
|
|
927
|
-
<
|
|
972
|
+
<choice>
|
|
973
|
+
<zeroOrMore>
|
|
974
|
+
<ref name="locality"/>
|
|
975
|
+
</zeroOrMore>
|
|
976
|
+
<zeroOrMore>
|
|
977
|
+
<ref name="localityStack"/>
|
|
978
|
+
</zeroOrMore>
|
|
979
|
+
</choice>
|
|
928
980
|
</element>
|
|
929
981
|
</define>
|
|
930
982
|
<define name="series">
|
data/grammars/isodoc.rng
CHANGED
|
@@ -152,9 +152,7 @@
|
|
|
152
152
|
<data type="boolean"/>
|
|
153
153
|
</attribute>
|
|
154
154
|
</optional>
|
|
155
|
-
<
|
|
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::
|
|
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::
|
|
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
|
|
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
|
-
|
|
53
|
-
ret[:extent][i] =
|
|
54
|
-
|
|
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)
|
|
339
|
+
def relation_locality_hash_to_bib(rel)
|
|
320
340
|
rel[:locality] = array(rel[:locality])&.map do |bl|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
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
|
|
data/lib/relaton_bib/medium.rb
CHANGED
|
@@ -1,41 +1,73 @@
|
|
|
1
1
|
module RelatonBib
|
|
2
2
|
class Medium
|
|
3
|
-
# @return [String,
|
|
4
|
-
attr_reader :form, :size, :scale
|
|
3
|
+
# @return [String, nil]
|
|
4
|
+
attr_reader :content, :genre, :form, :carrier, :size, :scale
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
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
|
data/lib/relaton_bib/place.rb
CHANGED
|
@@ -1,49 +1,141 @@
|
|
|
1
1
|
module RelatonBib
|
|
2
2
|
class Place
|
|
3
|
-
# @return [String]
|
|
4
|
-
attr_reader :name
|
|
5
|
-
|
|
6
|
-
# @return [
|
|
7
|
-
attr_reader :
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
# @return [String, nil]
|
|
4
|
+
attr_reader :name, :city
|
|
5
|
+
|
|
6
|
+
# @return [Array<RelatonBib::Place::RegionType>]
|
|
7
|
+
attr_reader :region, :country
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
# Initialize place.
|
|
11
|
+
#
|
|
12
|
+
# @param name [String, nil] name of place, name or city should be provided
|
|
13
|
+
# @param city [String, nil] name of city, city or name should be provided
|
|
14
|
+
# @param region [Array<RelatonBib::Place::RegionType>] region of place
|
|
15
|
+
# @param country [Array<RelatonBib::Place::RegionType>] country of place
|
|
16
|
+
#
|
|
17
|
+
def initialize(name: nil, city: nil, region: [], country: []) # rubocop:disable Metrics/CyclomaticComplexity
|
|
18
|
+
if name.nil? && city.nil?
|
|
19
|
+
raise ArgumentError, "`name` or `city` should be provided"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@name = name
|
|
23
|
+
@city = city
|
|
24
|
+
@region = region.map { |r| r.is_a?(Hash) ? RegionType.new(**r) : r }
|
|
25
|
+
@country = country.map { |c| c.is_a?(Hash) ? RegionType.new(**c) : c }
|
|
16
26
|
end
|
|
17
27
|
|
|
28
|
+
#
|
|
29
|
+
# Render place as XML.
|
|
30
|
+
#
|
|
18
31
|
# @param builder [Nologiri::XML::Builder]
|
|
32
|
+
#
|
|
19
33
|
def to_xml(builder)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
if name
|
|
35
|
+
builder.place name
|
|
36
|
+
else
|
|
37
|
+
builder.place do |b|
|
|
38
|
+
b.city city
|
|
39
|
+
region.each { |r| b.region { r.to_xml b } }
|
|
40
|
+
country.each { |c| b.country { c.to_xml b } }
|
|
41
|
+
end
|
|
42
|
+
end
|
|
23
43
|
end
|
|
24
44
|
|
|
45
|
+
#
|
|
46
|
+
# Render place as Hash.
|
|
47
|
+
#
|
|
25
48
|
# @return [Hash]
|
|
49
|
+
#
|
|
26
50
|
def to_hash
|
|
27
|
-
if
|
|
28
|
-
hash = { "name" => name }
|
|
29
|
-
hash["uri"] = uri if uri
|
|
30
|
-
hash["region"] = region if region
|
|
31
|
-
hash
|
|
51
|
+
if name then name
|
|
32
52
|
else
|
|
33
|
-
|
|
53
|
+
hash = { "city" => city }
|
|
54
|
+
hash["region"] = region.map(&:to_hash) if region.any?
|
|
55
|
+
hash["country"] = country.map(&:to_hash) if country.any?
|
|
56
|
+
hash
|
|
34
57
|
end
|
|
35
58
|
end
|
|
36
59
|
|
|
60
|
+
#
|
|
61
|
+
# Render place as AsciiBib.
|
|
62
|
+
#
|
|
37
63
|
# @param prefix [String]
|
|
38
64
|
# @param count [Integer] number of places
|
|
65
|
+
#
|
|
39
66
|
# @return [Stirng]
|
|
40
|
-
|
|
41
|
-
|
|
67
|
+
#
|
|
68
|
+
def to_asciibib(prefix = "", count = 1) # rubocop:disable Metrics/AbcSize
|
|
69
|
+
pref = prefix.empty? ? "place" : "#{prefix}.place"
|
|
42
70
|
out = count > 1 ? "#{pref}::\n" : ""
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
out += "#{pref}.
|
|
46
|
-
out
|
|
71
|
+
return "#{out}#{pref}.name:: #{name}\n" if name
|
|
72
|
+
|
|
73
|
+
out += "#{pref}.city:: #{city}\n"
|
|
74
|
+
out += region.map { |r| r.to_asciibib("#{pref}.region", region.size) }.join
|
|
75
|
+
out + country.map { |c| c.to_asciibib("#{pref}.country", country.size) }.join
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
class RegionType
|
|
79
|
+
# @return [Strign] name of region
|
|
80
|
+
attr_reader :name
|
|
81
|
+
|
|
82
|
+
# @return [Strign, nil] ISO code of region
|
|
83
|
+
attr_reader :iso
|
|
84
|
+
|
|
85
|
+
# @return [Boolean, nil] <description>
|
|
86
|
+
attr_reader :recommended
|
|
87
|
+
|
|
88
|
+
#
|
|
89
|
+
# Initialize region type.
|
|
90
|
+
#
|
|
91
|
+
# @param [String] name name of region
|
|
92
|
+
# @param [String, nil] iso ISO code of region
|
|
93
|
+
# @param [Boolean, nil] recommended recommended region
|
|
94
|
+
#
|
|
95
|
+
def initialize(name:, iso: nil, recommended: nil)
|
|
96
|
+
@name = name
|
|
97
|
+
@iso = iso
|
|
98
|
+
@recommended = recommended
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Render region type as XML.
|
|
103
|
+
#
|
|
104
|
+
# @param [Nokogiri::XML::Builder] builder XML builder
|
|
105
|
+
#
|
|
106
|
+
def to_xml(builder)
|
|
107
|
+
builder.parent["iso"] = iso if iso
|
|
108
|
+
builder.parent["recommended"] = recommended.to_s unless recommended.nil?
|
|
109
|
+
builder.text name
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Render region type as Hash.
|
|
114
|
+
#
|
|
115
|
+
# @return [Hash] region type as Hash
|
|
116
|
+
#
|
|
117
|
+
def to_hash
|
|
118
|
+
hash = { "name" => name }
|
|
119
|
+
hash["iso"] = iso if iso
|
|
120
|
+
hash["recommended"] = recommended unless recommended.nil?
|
|
121
|
+
hash
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
#
|
|
125
|
+
# Render region type as AsciiBib.
|
|
126
|
+
#
|
|
127
|
+
# @param [String] pref prefix
|
|
128
|
+
# @param [Integer] count number of region types
|
|
129
|
+
#
|
|
130
|
+
# @return [String] region type as AsciiBib
|
|
131
|
+
#
|
|
132
|
+
def to_asciibib(pref, count = 1) # rubocop:disable Metrics/AbcSize
|
|
133
|
+
out = count > 1 ? "#{pref}::\n" : ""
|
|
134
|
+
out += "#{pref}.name:: #{name}\n"
|
|
135
|
+
out += "#{pref}.iso:: #{iso}\n" if iso
|
|
136
|
+
out += "#{pref}.recommended:: #{recommended}\n" if recommended
|
|
137
|
+
out
|
|
138
|
+
end
|
|
47
139
|
end
|
|
48
140
|
end
|
|
49
141
|
end
|
data/lib/relaton_bib/series.rb
CHANGED
|
@@ -7,49 +7,35 @@ module RelatonBib
|
|
|
7
7
|
class Series
|
|
8
8
|
# TYPES = %w[main alt].freeze
|
|
9
9
|
|
|
10
|
-
# @return [String,
|
|
10
|
+
# @return [String, nil] allowed values: "main" or "alt"
|
|
11
11
|
attr_reader :type
|
|
12
12
|
|
|
13
|
-
# @return [RelatonBib::FormattedRef,
|
|
13
|
+
# @return [RelatonBib::FormattedRef, nil]
|
|
14
14
|
attr_reader :formattedref
|
|
15
15
|
|
|
16
|
-
# @return [RelatonBib::TypedTitleString,
|
|
16
|
+
# @return [RelatonBib::TypedTitleString, nil] title
|
|
17
17
|
attr_reader :title
|
|
18
18
|
|
|
19
|
-
# @return [String,
|
|
20
|
-
attr_reader :place
|
|
19
|
+
# @return [String, nil]
|
|
20
|
+
attr_reader :place, :organization, :from, :to, :number, :partnumber, :run
|
|
21
21
|
|
|
22
|
-
# @return [
|
|
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,
|
|
43
|
-
# @param formattedref [RelatonBib::FormattedRef,
|
|
44
|
-
# @param title [RelatonBib::TypedTitleString,
|
|
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,
|
|
47
|
-
# @param orgaization [String,
|
|
48
|
-
# @param abbreviation [RelatonBib::LocalizedString,
|
|
49
|
-
# @param from [String,
|
|
50
|
-
# @param to [String,
|
|
51
|
-
# @param number [String,
|
|
52
|
-
# @param partnumber [String,
|
|
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
|
data/lib/relaton_bib/version.rb
CHANGED
|
@@ -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),
|
|
@@ -71,7 +72,26 @@ module RelatonBib
|
|
|
71
72
|
|
|
72
73
|
def fetch_place(item)
|
|
73
74
|
item.xpath("./place").map do |pl|
|
|
74
|
-
|
|
75
|
+
if (city = pl.at("./city"))
|
|
76
|
+
Place.new(city: city.text, region: create_region_country(pl),
|
|
77
|
+
country: create_region_country(pl, "country"))
|
|
78
|
+
else
|
|
79
|
+
Place.new(name: pl.text)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# Create region or country from place element
|
|
86
|
+
#
|
|
87
|
+
# @param [Nokogiri::XML::Element] place place element
|
|
88
|
+
# @param [String] node name of the node to parse
|
|
89
|
+
#
|
|
90
|
+
# @return [Array<RelatonBib::Place::RegionType>] <description>
|
|
91
|
+
#
|
|
92
|
+
def create_region_country(place, node = "region")
|
|
93
|
+
place.xpath("./#{node}").map do |r|
|
|
94
|
+
Place::RegionType.new(name: r.text, iso: r[:iso], recommended: r[:recommended])
|
|
75
95
|
end
|
|
76
96
|
end
|
|
77
97
|
|
|
@@ -115,29 +135,38 @@ module RelatonBib
|
|
|
115
135
|
organization: sr.at("organization")&.text,
|
|
116
136
|
abbreviation: abbreviation, from: sr.at("from")&.text,
|
|
117
137
|
to: sr.at("to")&.text, number: sr.at("number")&.text,
|
|
118
|
-
partnumber: sr.at("partnumber")&.text
|
|
138
|
+
partnumber: sr.at("partnumber")&.text, run: sr.at("run")&.text,
|
|
119
139
|
)
|
|
120
140
|
end
|
|
121
141
|
end
|
|
122
142
|
|
|
123
|
-
def fetch_medium(item)
|
|
143
|
+
def fetch_medium(item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/AbcSize,Metrics/PerceivedComplexity
|
|
124
144
|
medium = item.at("./medium")
|
|
125
145
|
return unless medium
|
|
126
146
|
|
|
127
147
|
Medium.new(
|
|
128
|
-
|
|
129
|
-
|
|
148
|
+
content: medium.at("content")&.text, genre: medium.at("genre")&.text,
|
|
149
|
+
form: medium.at("form")&.text, carrier: medium.at("carrier")&.text,
|
|
150
|
+
size: medium.at("size")&.text, scale: medium.at("scale")&.text
|
|
130
151
|
)
|
|
131
152
|
end
|
|
132
153
|
|
|
133
154
|
def fetch_extent(item)
|
|
134
|
-
item.xpath("./extent").
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
)
|
|
155
|
+
item.xpath("./extent").reduce([]) do |a, ex|
|
|
156
|
+
a + localities(ex)
|
|
157
|
+
# Locality.new(
|
|
158
|
+
# ex[:type], ex.at("referenceFrom")&.text, ex.at("referenceTo")&.text
|
|
159
|
+
# )
|
|
138
160
|
end
|
|
139
161
|
end
|
|
140
162
|
|
|
163
|
+
def fetch_size(item)
|
|
164
|
+
size = item.xpath("./size/value").map do |sz|
|
|
165
|
+
BibliographicSize::Value.new type: sz[:type], value: sz.text
|
|
166
|
+
end
|
|
167
|
+
BibliographicSize.new size if size.any?
|
|
168
|
+
end
|
|
169
|
+
|
|
141
170
|
def fetch_classification(item)
|
|
142
171
|
item.xpath("classification").map do |cls|
|
|
143
172
|
Classification.new type: cls[:type], value: cls.text
|
|
@@ -390,22 +419,26 @@ module RelatonBib
|
|
|
390
419
|
# @return [Array<RelatonBib::Locality, RelatonBib::LocalityStack>]
|
|
391
420
|
def localities(rel)
|
|
392
421
|
rel.xpath("./locality|./localityStack").map do |lc|
|
|
393
|
-
if lc
|
|
394
|
-
|
|
422
|
+
if lc.name == "locality"
|
|
423
|
+
locality lc
|
|
395
424
|
else
|
|
396
425
|
LocalityStack.new(lc.xpath("./locality").map { |l| locality l })
|
|
397
426
|
end
|
|
398
427
|
end
|
|
399
428
|
end
|
|
400
429
|
|
|
430
|
+
#
|
|
431
|
+
# Create Locality object from Nokogiri::XML::Element
|
|
432
|
+
#
|
|
401
433
|
# @param loc [Nokogiri::XML::Element]
|
|
434
|
+
# @param klass [RelatonBib::Locality.class, RelatonBib::LocalityStack.class]
|
|
435
|
+
#
|
|
402
436
|
# @return [RelatonBib::Locality]
|
|
403
437
|
def locality(loc, klass = Locality)
|
|
404
|
-
ref_to = (rt = loc.at("./referenceTo")) && LocalizedString.new(rt.text)
|
|
405
438
|
klass.new(
|
|
406
439
|
loc[:type],
|
|
407
|
-
|
|
408
|
-
|
|
440
|
+
loc.at("./referenceFrom")&.text,
|
|
441
|
+
loc.at("./referenceTo")&.text,
|
|
409
442
|
)
|
|
410
443
|
end
|
|
411
444
|
|
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.
|
|
4
|
+
version: 1.11.2
|
|
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-
|
|
11
|
+
date: 2022-04-25 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
|