relaton-bib 1.0.1 → 1.1.1

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.
@@ -147,17 +147,16 @@ module RelatonBib
147
147
  # @param bibtex [BibTeX::Entry]
148
148
  # @return [Array<RelatonBib::BiblioNote>]
149
149
  def fetch_note(bibtex)
150
- note = []
151
- note << BiblioNote.new(type: "annote", content: bibtex.annote.to_s) if bibtex["annote"]
152
-
153
- if bibtex["howpublished"]
154
- note << BiblioNote.new(type: "howpublished", content: bibtex.howpublished.to_s)
150
+ bibtex.select do |k, _v|
151
+ %i[annote howpublished comment note content].include? k
152
+ end.reduce([]) do |mem, note|
153
+ type = case note[0]
154
+ when :note then nil
155
+ when :content then "tableOfContents"
156
+ else note[0].to_s
157
+ end
158
+ mem << BiblioNote.new(type: type, content: note[1].to_s)
155
159
  end
156
-
157
- note << BiblioNote.new(type: "comment", content: bibtex.comment.to_s) if bibtex["comment"]
158
- note << BiblioNote.new(content: bibtex.note.to_s) if bibtex["note"]
159
- note << BiblioNote.new(type: "tableOfContents", content: bibtex["content"]) if bibtex["content"]
160
- note
161
160
  end
162
161
 
163
162
  # @param bibtex [BibTeX::Entry]
@@ -172,16 +171,19 @@ module RelatonBib
172
171
  # @param bibtex [BibTeX::Entry]
173
172
  # @return [Array<RelatonBib::BibItemLocality>]
174
173
  def fetch_extent(bibtex)
175
- extent = []
176
- extent << BibItemLocality.new("chapter", bibtex.chapter.to_s) if bibtex["chapter"]
177
-
178
- if bibtex["pages"]
179
- from, to = bibtex.pages.to_s.split "-"
180
- extent << BibItemLocality.new("page", from, to)
174
+ bibtex.select do |k, _v|
175
+ %i[chapter pages volume].include? k
176
+ end.reduce([]) do |mem, loc|
177
+ if loc[0] == :pages
178
+ type = "page"
179
+ from, to = loc[1].to_s.split "-"
180
+ else
181
+ type = loc[0].to_s
182
+ from = loc[1].to_s
183
+ to = nil
184
+ end
185
+ mem << BibItemLocality.new(type, from, to)
181
186
  end
182
-
183
- extent << BibItemLocality.new("volume", bibtex.volume.to_s) if bibtex["volume"]
184
- extent
185
187
  end
186
188
 
187
189
  # @param bibtex [BibTeX::Entry]
@@ -192,7 +194,7 @@ module RelatonBib
192
194
  series << Series.new(
193
195
  type: "journal",
194
196
  title: TypedTitleString.new(content: bibtex.journal.to_s),
195
- number: bibtex["number"]&.to_s
197
+ number: bibtex["number"]&.to_s,
196
198
  )
197
199
  end
198
200
 
@@ -1,29 +1,41 @@
1
1
  module RelatonBib
2
2
  # Copyright association.
3
3
  class CopyrightAssociation
4
+ include RelatonBib
5
+
4
6
  # @return [Date]
5
7
  attr_reader :from
6
8
 
7
9
  # @return [Date, NilClass]
8
10
  attr_reader :to
9
11
 
10
- # @return [RelatonBib::ContributionInfo]
12
+ # @return [String, NilClass]
13
+ attr_reader :scope
14
+
15
+ # @return [Array<RelatonBib::ContributionInfo>]
11
16
  attr_reader :owner
12
17
 
13
- # @param owner [Hash, RelatonBib::ContributionInfo] contributor
18
+ # rubocop:disable Metrics/AbcSize
19
+
20
+ # @param owner [Array<Hash, RelatonBib::ContributionInfo>] contributor
14
21
  # @option owner [String] :name
15
22
  # @option owner [String] :abbreviation
16
23
  # @option owner [String] :url
17
24
  # @param from [String] date
18
25
  # @param to [String, NilClass] date
19
- def initialize(owner:, from:, to: nil)
20
- @owner = if owner.is_a?(Hash)
21
- ContributionInfo.new entity: Organization.new(owner)
22
- else owner
23
- end
26
+ # @param scope [String, NilClass]
27
+ def initialize(owner:, from:, to: nil, scope: nil)
28
+ unless owner.any?
29
+ raise ArgumentError, "at least one owner should exist."
30
+ end
31
+
32
+ @owner = owner.map do |o|
33
+ o.is_a?(Hash) ? ContributionInfo.new(entity: Organization.new(o)) : o
34
+ end
24
35
 
25
36
  @from = Date.strptime(from.to_s, "%Y") if from.to_s =~ /\d{4}/
26
37
  @to = Date.strptime(to.to_s, "%Y") unless to.to_s.empty?
38
+ @scope = scope
27
39
  end
28
40
 
29
41
  # @param builder [Nokogiri::XML::Builder]
@@ -31,14 +43,21 @@ module RelatonBib
31
43
  builder.copyright do
32
44
  builder.from from ? from.year : "unknown"
33
45
  builder.to to.year if to
34
- builder.owner { owner.to_xml builder }
46
+ owner.each { |o| builder.owner { o.to_xml builder } }
47
+ builder.scope scope if scope
35
48
  end
36
49
  end
50
+ # rubocop:enable Metrics/AbcSize
37
51
 
38
52
  # @return [Hash]
39
53
  def to_hash
40
- hash = { "owner" => owner.to_hash["organization"], "from" => from.year.to_s }
54
+ owners = single_element_array(owner.map { |o| o.to_hash["organization"] })
55
+ hash = {
56
+ "owner" => owners,
57
+ "from" => from.year.to_s,
58
+ }
41
59
  hash["to"] = to.year.to_s if to
60
+ hash["scope"] = scope if scope
42
61
  hash
43
62
  end
44
63
  end
@@ -4,11 +4,16 @@ module RelatonBib
4
4
  include RelatonBib
5
5
 
6
6
  TYPES = %w[
7
- obsoletes obsoletedBy supersedes supersededBy updates updatedBy
8
- complements derivedFrom translatedFrom hasTranslation adoptedFrom
9
- equivalent identical nonequivalent includedIn includes instance
10
- instanceOf partOf hasPart hasDraft draftOf merges splits amends amendedBy
11
- corrects correctedBy revises revisedBy describes describedBy
7
+ includes includedIn hasPart partOf merges mergedInto splits splitInto
8
+ instance hasInstance exemplarOf hasExemplar manifestationOf
9
+ hasManifestation reproductionOf hasReproduction reprintOf hasReprint
10
+ expressionOf hasExpression translatedFrom hasTranslation arrangementOf
11
+ hasArrangement abridgementOf hasAbridgement annotationOf hasAnnotation
12
+ draftOf hasDraft editionOf hasEdition updates updatedBy derivedFrom
13
+ derives describes describedBy catalogues cataloguedBy hasSuccessor
14
+ successorOf adaptedFrom hasAdaptation adoptedFrom adoptedAs reviewOf
15
+ hasReview commentaryOf hasCommentary related complements complementOf
16
+ obsoletes obsoletedBy cited isCitedIn
12
17
  ].freeze
13
18
 
14
19
  # @return [String]
@@ -26,16 +31,20 @@ module RelatonBib
26
31
  # @return [Array<RelatonBib::Locality, RelatonBib::LocalityStack>]
27
32
  attr_reader :locality
28
33
 
29
- # @return [Array<RelatonBib::SourceLocality, RelatonBib::SourceLocalityStack>]
34
+ # @return [Array<RelatonBib::SourceLocality,
35
+ # RelatonBib::SourceLocalityStack>]
30
36
  attr_reader :source_locality
31
37
 
32
38
  # @param type [String]
33
39
  # @parma description [RelatonBib::FormattedString, NilClass]
34
- # @param bibitem [RelatonBib::BibliographicItem, RelatonIso::IsoBibliographicItem]
40
+ # @param bibitem [RelatonBib::BibliographicItem,
41
+ # RelatonIso::IsoBibliographicItem]
35
42
  # @param locality [Array<RelatonBib::Locality, RelatonBib::LocalityStack>]
36
- # @param source_locality [Array<RelatonBib::SourceLocality, RelatonBib::SourceLocalityStack>]
37
- def initialize(type:, description: nil, bibitem:, locality: [], source_locality: [])
38
- type = "obsoletes" if type == "Now withdrawn"
43
+ # @param source_locality [Array<RelatonBib::SourceLocality,
44
+ # RelatonBib::SourceLocalityStack>]
45
+ def initialize(type:, description: nil, bibitem:, locality: [],
46
+ source_locality: [])
47
+ type = "obsoletes" if type == "Now withdrawn"
39
48
  unless TYPES.include? type
40
49
  warn "[relaton-bib] WARNING: invalid relation type: #{type}"
41
50
  end
@@ -46,6 +55,8 @@ module RelatonBib
46
55
  @bibitem = bibitem
47
56
  end
48
57
 
58
+ # rubocop:disable Metrics/AbcSize
59
+
49
60
  # @param builder [Nokogiri::XML::Builder]
50
61
  def to_xml(builder, **opts)
51
62
  opts.delete :bibdata
@@ -57,6 +68,7 @@ module RelatonBib
57
68
  source_locality.each { |l| l.to_xml builder }
58
69
  end
59
70
  end
71
+ # rubocop:enable Metrics/AbcSize
60
72
 
61
73
  # @return [Hash]
62
74
  def to_hash
@@ -8,7 +8,7 @@ module RelatonBib
8
8
  extend Forwardable
9
9
 
10
10
  def_delegators :@array, :<<, :[], :first, :last, :empty?, :any?, :size,
11
- :each, :detect, :map, :length
11
+ :each, :detect, :map, :length
12
12
 
13
13
  # @param relation [Array<RelatonBib::DocumentRelation, Hash>]
14
14
  # @option relation [String] :type
@@ -20,15 +20,15 @@ module RelatonBib
20
20
  # RelatonBib::SourceLocalityStack>] :source_locality
21
21
  # @option relation [RelatonBib::BibliographicItem, NillClass] :bibitem (nil)
22
22
  def initialize(relation)
23
- @array = relation.map { |r| r.is_a?(Hash) ? DocumentRelation.new(r) : r }
23
+ @array = relation.map { |r| r.is_a?(Hash) ? DocumentRelation.new(r) : r }
24
24
  end
25
25
 
26
26
  # @todo We don't have replace type anymore. Suppose we should update this
27
27
  # method or delete it.
28
28
  #
29
29
  # @return [RelatonBib::DocRelationCollection]
30
- # def replaces
31
- # DocRelationCollection.new @array.select { |r| r.type == "replace" }
32
- # end
30
+ def replaces
31
+ DocRelationCollection.new(@array.select { |r| r.type == "replace" })
32
+ end
33
33
  end
34
34
  end
@@ -5,21 +5,21 @@ require "relaton_bib/localized_string"
5
5
  module RelatonBib
6
6
  # Document status.
7
7
  class DocumentStatus
8
- # @return [String]
8
+ # @return [RelatonBib::DocumentStatus::Stage]
9
9
  attr_reader :stage
10
10
 
11
- # @return [String, NilClass]
11
+ # @return [RelatonBib::DocumentStatus::Stage, NilClass]
12
12
  attr_reader :substage
13
13
 
14
14
  # @return [String, NilClass]
15
15
  attr_reader :iteration
16
16
 
17
- # @param stage [String]
18
- # @param substage [String, NilClass]
17
+ # @param stage [String, Hash, RelatonBib::DocumentStatus::Stage]
18
+ # @param substage [String, Hash, NilClass, RelatonBib::DocumentStatus::Stage]
19
19
  # @param iteration [String, NilClass]
20
20
  def initialize(stage:, substage: nil, iteration: nil)
21
- @stage = stage
22
- @substage = substage
21
+ @stage = stage_new stage
22
+ @substage = stage_new substage
23
23
  @iteration = iteration
24
24
  end
25
25
 
@@ -27,18 +27,57 @@ module RelatonBib
27
27
  def to_xml(builder)
28
28
  builder.status do
29
29
  # FormattedString.instance_method(:to_xml).bind(status).call builder
30
- builder.stage stage
31
- builder.substage substage if substage
30
+ builder.stage { |b| stage.to_xml b }
31
+ builder.substage { |b| substage.to_xml b } if substage
32
32
  builder.iteration iteration unless iteration.to_s.empty?
33
33
  end
34
34
  end
35
35
 
36
36
  # @return [Hash]
37
37
  def to_hash
38
- hash = { "stage" => stage }
39
- hash["substage"] = substage if substage
38
+ hash = { "stage" => stage.to_hash }
39
+ hash["substage"] = substage.to_hash if substage
40
40
  hash["iteration"] = iteration if iteration
41
41
  hash
42
42
  end
43
+
44
+ private
45
+
46
+ # @param stg [RelatonBib::DocumentStatus::Stage, Hash, String, NilClass]
47
+ # @return [RelatonBib::DocumentStatus::Stage]
48
+ def stage_new(stg)
49
+ if stg.is_a?(Stage) then stg
50
+ elsif stg.is_a?(Hash) then Stage.new(stg)
51
+ elsif stg.is_a?(String) then Stage.new(value: stg)
52
+ end
53
+ end
54
+
55
+ class Stage
56
+ # @return [String]
57
+ attr_reader :value
58
+
59
+ # @return [String, NilClass]
60
+ attr_reader :abbreviation
61
+
62
+ # @parma value [String]
63
+ # @param abbreviation [String, NilClass]
64
+ def initialize(value:, abbreviation: nil)
65
+ @value = value
66
+ @abbreviation = abbreviation
67
+ end
68
+
69
+ # @param [Nokogiri::XML::Builder]
70
+ def to_xml(builder)
71
+ builder.parent[:abbreviation] = abbreviation if abbreviation
72
+ builder.text value
73
+ end
74
+
75
+ # @return [Hash]
76
+ def to_hash
77
+ hash = { "value" => value }
78
+ hash["abbreviation"] = abbreviation if abbreviation
79
+ hash
80
+ end
81
+ end
43
82
  end
44
83
  end
@@ -0,0 +1,27 @@
1
+ require "relaton_bib/technical_committee"
2
+
3
+ module RelatonBib
4
+ class EditorialGroup
5
+ include RelatonBib
6
+
7
+ # @return [Array<RelatonBib::TechnicalCommittee>]
8
+ attr_accessor :technical_committee
9
+
10
+ # @param technical_committee [Array<RelatonBib::TecnicalCommittee>]
11
+ def initialize(technical_committee)
12
+ @technical_committee = technical_committee
13
+ end
14
+
15
+ # @param builder [Nokogigi::XML::Builder]
16
+ def to_xml(builder)
17
+ builder.editorialgroup do |b|
18
+ technical_committee.each { |tc| tc.to_xml b }
19
+ end
20
+ end
21
+
22
+ # @return [Hash]
23
+ def to_hash
24
+ single_element_array technical_committee
25
+ end
26
+ end
27
+ end
@@ -12,7 +12,7 @@ module RelatonBib
12
12
  # @return [String]
13
13
  attr_reader :format
14
14
 
15
- # @param content [String]
15
+ # @param content [String, Array<RelatonBib::LocalizedString>]
16
16
  # @param language [String, NilClass] language code Iso639
17
17
  # @param script [String, NilClass] script code Iso15924
18
18
  # @param format [String] the content type
@@ -36,8 +36,8 @@ module RelatonBib
36
36
  hash = super
37
37
  return hash unless format
38
38
 
39
- hash = { "content" => hash } if hash.is_a? String
40
- hash["format"] = format if format
39
+ hash = { "content" => hash } unless hash.is_a? Hash
40
+ hash["format"] = format
41
41
  hash
42
42
  end
43
43
  end
@@ -1,6 +1,11 @@
1
1
  module RelatonBib
2
2
  class HashConverter
3
3
  class << self
4
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5
+
6
+ # @param args [Hash]
7
+ # @param neated [TrueClas, FalseClass] default true
8
+ # @return [Hash]
4
9
  def hash_to_bib(args, nested = false)
5
10
  return nil unless args.is_a?(Hash)
6
11
 
@@ -18,6 +23,7 @@ module RelatonBib
18
23
  formattedref_hash_to_bib(ret)
19
24
  docstatus_hash_to_bib(ret)
20
25
  contributors_hash_to_bib(ret)
26
+ copyright_hash_to_bib(ret)
21
27
  relations_hash_to_bib(ret)
22
28
  series_hash_to_bib(ret)
23
29
  medium_hash_to_bib(ret)
@@ -28,8 +34,12 @@ module RelatonBib
28
34
  validity_hash_to_bib(ret)
29
35
  ret[:keyword] = array(ret[:keyword])
30
36
  ret[:license] = array(ret[:license])
37
+ editorialgroup_hash_to_bib ret
38
+ ics_hash_to_bib ret
39
+ structuredidentifier_hash_to_bib ret
31
40
  ret
32
41
  end
42
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
33
43
 
34
44
  def timestamp_hash(ret)
35
45
  ret[:fetched] ||= Date.today.to_s
@@ -48,11 +58,12 @@ module RelatonBib
48
58
  def title_hash_to_bib(ret)
49
59
  return unless ret[:title]
50
60
 
51
- ret[:title] = array(ret[:title])
52
- ret[:title] = ret[:title].map do |t|
53
- if t.is_a?(Hash) then t
61
+ ret[:title] = array(ret[:title]).reduce([]) do |m, t|
62
+ if t.is_a?(Hash) then m << t
54
63
  else
55
- { content: t, language: "en", script: "Latn", format: "text/plain", type: "main" }
64
+ m + TypedTitleString.from_string(t)
65
+ # { content: t, language: "en", script: "Latn", format: "text/plain",
66
+ # type: "main" }
56
67
  end
57
68
  end
58
69
  end
@@ -151,12 +162,21 @@ module RelatonBib
151
162
 
152
163
  def docstatus_hash_to_bib(ret)
153
164
  ret[:docstatus] && ret[:docstatus] = DocumentStatus.new(
154
- stage: ret[:docstatus][:stage],
155
- substage: ret[:docstatus][:substage],
165
+ stage: stage(ret[:docstatus][:stage]),
166
+ substage: stage(ret[:docstatus][:substage]),
156
167
  iteration: ret[:docstatus][:iteration],
157
168
  )
158
169
  end
159
170
 
171
+ # @param stg [Hash]
172
+ # @return [RelatonBib::DocumentStatus::Stage]
173
+ def stage(stg)
174
+ return unless stg
175
+
176
+ args = stg.is_a?(String) ? { value: stg } : stg
177
+ DocumentStatus::Stage.new(**args)
178
+ end
179
+
160
180
  def contributors_hash_to_bib(ret)
161
181
  return unless ret[:contributor]
162
182
 
@@ -252,6 +272,16 @@ module RelatonBib
252
272
  end
253
273
  end
254
274
 
275
+ # @param ret [Hash]
276
+ def copyright_hash_to_bib(ret)
277
+ return unless ret[:copyright]
278
+
279
+ ret[:copyright] = array(ret[:copyright]).map do |c|
280
+ c[:owner] = array(c[:owner])
281
+ c
282
+ end
283
+ end
284
+
255
285
  # @param ret [Hash]
256
286
  def relations_hash_to_bib(ret)
257
287
  return unless ret[:relation]
@@ -284,15 +314,16 @@ module RelatonBib
284
314
  end
285
315
 
286
316
  # @param rel [Hash] relation
317
+ # @return [RelatonBib::LocalityStack]
287
318
  def relation_locality_hash_to_bib(rel)
288
319
  rel[:locality] = array(rel[:locality])&.map do |bl|
289
320
  ls = if bl[:locality_stack]
290
- array(bl[:locality_stack]).map do |l|
291
- Locality.new(l[:type], l[:reference_from], l[:reference_to])
292
- end
293
- else
294
- [Locality.new(bl[:type], bl[:reference_from], bl[:reference_to])]
295
- end
321
+ array(bl[:locality_stack]).map do |l|
322
+ Locality.new(l[:type], l[:reference_from], l[:reference_to])
323
+ end
324
+ else
325
+ [Locality.new(bl[:type], bl[:reference_from], bl[:reference_to])]
326
+ end
296
327
  LocalityStack.new ls
297
328
  end
298
329
  end
@@ -311,11 +342,12 @@ module RelatonBib
311
342
  end
312
343
  end
313
344
 
345
+ # @param ret [Hash]
314
346
  def series_hash_to_bib(ret)
315
347
  ret[:series] = array(ret[:series])&.map do |s|
316
348
  s[:formattedref] && s[:formattedref] = formattedref(s[:formattedref])
317
349
  if s[:title]
318
- s[:title] = { content: s[:title] } unless s.is_a?(Hash)
350
+ s[:title] = { content: s[:title] } unless s[:title].is_a?(Hash)
319
351
  s[:title] = typed_title_strig(s[:title])
320
352
  end
321
353
  s[:abbreviation] && s[:abbreviation] = localizedstring(s[:abbreviation])
@@ -329,28 +361,60 @@ module RelatonBib
329
361
  TypedTitleString.new title
330
362
  end
331
363
 
364
+ # @param ret [Hash]
332
365
  def medium_hash_to_bib(ret)
333
366
  ret[:medium] = Medium.new(ret[:medium]) if ret[:medium]
334
367
  end
335
368
 
369
+ # @param ret [Hash]
336
370
  def classification_hash_to_bib(ret)
337
- # ret[:classification] = [ret[:classification]] unless ret[:classification].is_a?(Array)
338
- # ret[:classification]&.each_with_index do |c, i|
339
- # ret[:classification][i] = RelatonBib::Classification.new(c)
340
- # end
341
371
  if ret[:classification]
342
- ret[:classification] = array(ret[:classification]).map { |cls| Classification.new cls }
372
+ ret[:classification] = array(ret[:classification]).map do |cls|
373
+ Classification.new cls
374
+ end
343
375
  end
344
376
  end
345
377
 
378
+ # rubocop:disable Metrics/AbcSize
379
+
380
+ # @param ret [Hash]
346
381
  def validity_hash_to_bib(ret)
347
382
  return unless ret[:validity]
348
383
 
349
- ret[:validity][:begins] && b = Time.parse(ret[:validity][:begins])
350
- ret[:validity][:ends] && e = Time.parse(ret[:validity][:ends])
351
- ret[:validity][:revision] && r = Time.parse(ret[:validity][:revision])
384
+ ret[:validity][:begins] && b = Time.parse(ret[:validity][:begins].to_s)
385
+ ret[:validity][:ends] && e = Time.parse(ret[:validity][:ends].to_s)
386
+ ret[:validity][:revision] && r = Time.parse(ret[:validity][:revision].to_s)
352
387
  ret[:validity] = Validity.new(begins: b, ends: e, revision: r)
353
388
  end
389
+ # rubocop:enable Metrics/AbcSize
390
+
391
+ # @param ret [Hash]
392
+ def editorialgroup_hash_to_bib(ret)
393
+ return unless ret[:editorialgroup]
394
+
395
+ technical_committee = array(ret[:editorialgroup]).map do |wg|
396
+ TechnicalCommittee.new WorkGroup.new(wg)
397
+ end
398
+ ret[:editorialgroup] = EditorialGroup.new technical_committee
399
+ end
400
+
401
+ # @param ret [Hash]
402
+ def ics_hash_to_bib(ret)
403
+ return unless ret[:ics]
404
+
405
+ ret[:ics] = array(ret[:ics]).map { |ics| ICS.new ics }
406
+ end
407
+
408
+ # @param ret [Hash]
409
+ def structuredidentifier_hash_to_bib(ret)
410
+ return unless ret[:structuredidentifier]
411
+
412
+ sids = array(ret[:structuredidentifier]).map do |si|
413
+ si[:agency] = array si[:agency]
414
+ StructuredIdentifier.new si
415
+ end
416
+ ret[:structuredidentifier] = StructuredIdentifierCollection.new sids
417
+ end
354
418
 
355
419
  # @param ogj [Hash, Array, String]
356
420
  # @return [Hash, Array, String]
@@ -367,6 +431,8 @@ module RelatonBib
367
431
  end
368
432
  end
369
433
 
434
+ # @param arr [NilClass, Array, #is_a?]
435
+ # @return [Array]
370
436
  def array(arr)
371
437
  return [] unless arr
372
438
  return [arr] unless arr.is_a?(Array)
@@ -374,6 +440,9 @@ module RelatonBib
374
440
  arr
375
441
  end
376
442
 
443
+ # @param name [Hash, String, NilClass]
444
+ # @param person [Hash]
445
+ # @return [RelatonBib::LocalizedString]
377
446
  def localname(name, person)
378
447
  return nil if name.nil?
379
448
 
@@ -381,13 +450,12 @@ module RelatonBib
381
450
  lang ||= person[:name][:language]
382
451
  script = name[:script] if name.is_a?(Hash)
383
452
  script ||= person[:name][:script]
384
- if name.is_a?(Hash)
385
- RelatonBib::LocalizedString.new(name[:content], lang, script)
386
- else
387
- RelatonBib::LocalizedString.new(name, lang, script)
388
- end
453
+ n = name.is_a?(Hash) ? name[:content] : name
454
+ RelatonBib::LocalizedString.new(n, lang, script)
389
455
  end
390
456
 
457
+ # @param lst [Hash, Array<RelatonBib::LocalizedString>]
458
+ # @return [RelatonBib::LocalizedString]
391
459
  def localizedstring(lst)
392
460
  if lst.is_a?(Hash)
393
461
  RelatonBib::LocalizedString.new(lst[:content], lst[:language], lst[:script])
@@ -396,6 +464,8 @@ module RelatonBib
396
464
  end
397
465
  end
398
466
 
467
+ # @param frf [Hash, String]
468
+ # @return [RelatonBib::FormattedRef]
399
469
  def formattedref(frf)
400
470
  if frf.is_a?(Hash)
401
471
  RelatonBib::FormattedRef.new(frf)