relaton-bib 0.3.3 → 0.3.8
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 +5 -5
- data/Gemfile.lock +5 -5
- data/docs/hash.adoc +298 -34
- data/lib/relaton_bib.rb +33 -1
- data/lib/relaton_bib/bib_item_locality.rb +12 -5
- data/lib/relaton_bib/biblio_note.rb +15 -5
- data/lib/relaton_bib/biblio_version.rb +12 -2
- data/lib/relaton_bib/bibliographic_date.rb +18 -24
- data/lib/relaton_bib/bibliographic_item.rb +49 -11
- data/lib/relaton_bib/classification.rb +7 -0
- data/lib/relaton_bib/contribution_info.rb +26 -4
- data/lib/relaton_bib/contributor.rb +42 -4
- data/lib/relaton_bib/copyright_association.rb +12 -5
- data/lib/relaton_bib/document_identifier.rb +7 -0
- data/lib/relaton_bib/document_relation.rb +9 -0
- data/lib/relaton_bib/document_status.rb +8 -0
- data/lib/relaton_bib/formatted_string.rb +12 -2
- data/lib/relaton_bib/hash_converter.rb +164 -101
- data/lib/relaton_bib/hit.rb +32 -0
- data/lib/relaton_bib/hit_collection.rb +34 -0
- data/lib/relaton_bib/localized_string.rb +16 -6
- data/lib/relaton_bib/medium.rb +9 -0
- data/lib/relaton_bib/organization.rb +36 -26
- data/lib/relaton_bib/person.rb +28 -1
- data/lib/relaton_bib/series.rb +16 -0
- data/lib/relaton_bib/typed_title_string.rb +14 -0
- data/lib/relaton_bib/typed_uri.rb +6 -0
- data/lib/relaton_bib/validity.rb +14 -4
- data/lib/relaton_bib/version.rb +1 -1
- data/lib/relaton_bib/xml_parser.rb +20 -6
- data/relaton-bib.gemspec +2 -2
- metadata +10 -8
data/lib/relaton_bib.rb
CHANGED
@@ -1,8 +1,40 @@
|
|
1
1
|
require "relaton_bib/version"
|
2
|
-
require "relaton_bib/bibliographic_item
|
2
|
+
require "relaton_bib/bibliographic_item"
|
3
|
+
require "relaton_bib/hit_collection"
|
4
|
+
require "relaton_bib/hit"
|
3
5
|
|
4
6
|
module RelatonBib
|
5
7
|
class Error < StandardError; end
|
6
8
|
|
7
9
|
class RequestError < StandardError; end
|
10
|
+
|
11
|
+
class << self
|
12
|
+
# @param date [String]
|
13
|
+
# @return [Date, NilClass]
|
14
|
+
def parse_date(sdate)
|
15
|
+
if /(?<date>\w+\s\d{4})/ =~ sdate # February 2012
|
16
|
+
Date.strptime(date, "%B %Y")
|
17
|
+
elsif /(?<date>\w+\s\d{1,2},\s\d{4})/ =~ sdate # February 11, 2012
|
18
|
+
Date.strptime(date, "%B %d, %Y")
|
19
|
+
elsif /(?<date>\d{4}-\d{2}-\d{2})/ =~ sdate # 2012-02-11
|
20
|
+
Date.parse(date)
|
21
|
+
elsif /(?<date>\d{4}-\d{2})/ =~ sdate # 2012-02
|
22
|
+
Date.strptime date, "%Y-%m"
|
23
|
+
elsif /(?<date>\d{4})/ =~ sdate # 2012
|
24
|
+
Date.strptime date, "%Y"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# @param array [Array]
|
32
|
+
# @return [Array<String>, String]
|
33
|
+
def single_element_array(array)
|
34
|
+
if array.size > 1
|
35
|
+
array.map { |e| e.is_a?(String) ? e : e.to_hash }
|
36
|
+
else
|
37
|
+
array[0].is_a?(String) ? array[0] : array[0].to_hash
|
38
|
+
end
|
39
|
+
end
|
8
40
|
end
|
@@ -17,18 +17,18 @@ module RelatonBib
|
|
17
17
|
|
18
18
|
# Bibliographic item locality.
|
19
19
|
class BibItemLocality
|
20
|
-
# @return [
|
20
|
+
# @return [String]
|
21
21
|
attr_reader :type
|
22
22
|
|
23
|
-
# @return [
|
23
|
+
# @return [String]
|
24
24
|
attr_reader :reference_from
|
25
25
|
|
26
|
-
# @return [
|
26
|
+
# @return [String, NilClass]
|
27
27
|
attr_reader :reference_to
|
28
28
|
|
29
29
|
# @param type [String]
|
30
30
|
# @param referenceFrom [String]
|
31
|
-
# @param referenceTo [String]
|
31
|
+
# @param referenceTo [String, NilClass]
|
32
32
|
def initialize(type, reference_from, reference_to = nil)
|
33
33
|
@type = type
|
34
34
|
@reference_from = reference_from
|
@@ -42,5 +42,12 @@ module RelatonBib
|
|
42
42
|
builder.referenceTo reference_to if reference_to
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
# @return [Hash]
|
47
|
+
def to_hash
|
48
|
+
hash = { "type" => type, "reference_from" => reference_from }
|
49
|
+
hash["reference_to"] = reference_to if reference_to
|
50
|
+
hash
|
51
|
+
end
|
45
52
|
end
|
46
|
-
end
|
53
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module RelatonBib
|
2
2
|
class BiblioNote < FormattedString
|
3
|
-
# @return [String]
|
3
|
+
# @return [String, NilClass]
|
4
4
|
attr_reader :type
|
5
5
|
|
6
6
|
# @param content [String]
|
7
|
-
# @param type [String]
|
8
|
-
# @param language [String] language code Iso639
|
9
|
-
# @param script [String] script code Iso15924
|
10
|
-
# @param format [String] the content
|
7
|
+
# @param type [String, NilClass]
|
8
|
+
# @param language [String, NilClass] language code Iso639
|
9
|
+
# @param script [String, NilClass] script code Iso15924
|
10
|
+
# @param format [String, NilClass] the content format
|
11
11
|
def initialize(content:, type: nil, language: nil, script: nil, format: nil)
|
12
12
|
@type = type
|
13
13
|
super content: content, language: language, script: script, format: format
|
@@ -19,5 +19,15 @@ module RelatonBib
|
|
19
19
|
xml[:type] = type if type
|
20
20
|
xml
|
21
21
|
end
|
22
|
+
|
23
|
+
# @return [Hash]
|
24
|
+
def to_hash
|
25
|
+
hash = super
|
26
|
+
return hash unless type
|
27
|
+
|
28
|
+
hash = { "content" => hash } if hash.is_a? String
|
29
|
+
hash["type"] = type
|
30
|
+
hash
|
31
|
+
end
|
22
32
|
end
|
23
33
|
end
|
@@ -2,13 +2,15 @@ module RelatonBib
|
|
2
2
|
# Version
|
3
3
|
class BibliographicItem
|
4
4
|
class Version
|
5
|
-
|
5
|
+
include RelatonBib
|
6
|
+
|
7
|
+
# @return [String, NilClass]
|
6
8
|
attr_reader :revision_date
|
7
9
|
|
8
10
|
# @return [Array<String>]
|
9
11
|
attr_reader :draft
|
10
12
|
|
11
|
-
# @param revision_date [String]
|
13
|
+
# @param revision_date [String, NilClass]
|
12
14
|
# @param draft [Array<String>]
|
13
15
|
def initialize(revision_date = nil, draft = [])
|
14
16
|
@revision_date = revision_date
|
@@ -22,6 +24,14 @@ module RelatonBib
|
|
22
24
|
draft.each { |d| builder.draft d }
|
23
25
|
end
|
24
26
|
end
|
27
|
+
|
28
|
+
# @return [Hash]
|
29
|
+
def to_hash
|
30
|
+
hash = {}
|
31
|
+
hash["revision_date"] = revision_date if revision_date
|
32
|
+
hash["draft"] = single_element_array(draft) if draft&.any?
|
33
|
+
hash
|
34
|
+
end
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -6,34 +6,33 @@ module RelatonBib
|
|
6
6
|
# Bibliographic date.
|
7
7
|
class BibliographicDate
|
8
8
|
TYPES = %w[published accessed created implemented obsoleted confirmed
|
9
|
-
updated issued transmitted copied unchanged circulated
|
10
|
-
].freeze
|
9
|
+
updated issued transmitted copied unchanged circulated adapted].freeze
|
11
10
|
|
12
11
|
# @return [String]
|
13
12
|
attr_reader :type
|
14
13
|
|
15
|
-
# @return [
|
14
|
+
# @return [Date]
|
16
15
|
attr_reader :from
|
17
16
|
|
18
|
-
# @return [
|
17
|
+
# @return [Date]
|
19
18
|
attr_reader :to
|
20
19
|
|
21
|
-
# @return [
|
20
|
+
# @return [Date]
|
22
21
|
attr_reader :on
|
23
22
|
|
24
23
|
# @param type [String] "published", "accessed", "created", "activated"
|
24
|
+
# @param on [String]
|
25
25
|
# @param from [String]
|
26
26
|
# @param to [String]
|
27
27
|
def initialize(type:, on: nil, from: nil, to: nil)
|
28
28
|
raise ArgumentError, "expected :on or :from argument" unless on || from
|
29
29
|
|
30
|
-
TYPES.include?
|
31
|
-
raise ArgumentError, %{Type "#{type}" is invalid.} unless
|
30
|
+
# raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
|
32
31
|
|
33
32
|
@type = type
|
34
|
-
@on = parse_date on
|
35
|
-
@from = parse_date from
|
36
|
-
@to = parse_date to
|
33
|
+
@on = RelatonBib.parse_date on
|
34
|
+
@from = RelatonBib.parse_date from
|
35
|
+
@to = RelatonBib.parse_date to
|
37
36
|
end
|
38
37
|
|
39
38
|
# rubocop:disable Metrics/AbcSize
|
@@ -52,6 +51,15 @@ module RelatonBib
|
|
52
51
|
end
|
53
52
|
# rubocop:enable Metrics/AbcSize
|
54
53
|
|
54
|
+
# @return [Hash]
|
55
|
+
def to_hash
|
56
|
+
hash = { "type" => type }
|
57
|
+
hash["value"] = on.to_s if on
|
58
|
+
hash["from"] = from.to_s if from
|
59
|
+
hash["to"] = to.to_s if to
|
60
|
+
hash
|
61
|
+
end
|
62
|
+
|
55
63
|
private
|
56
64
|
|
57
65
|
# Formats date
|
@@ -65,19 +73,5 @@ module RelatonBib
|
|
65
73
|
else date.year
|
66
74
|
end
|
67
75
|
end
|
68
|
-
|
69
|
-
# @params date [String] 'yyyy', 'yyyy-mm', 'yyyy-mm-dd
|
70
|
-
# @return [Time]
|
71
|
-
def parse_date(date)
|
72
|
-
return unless date
|
73
|
-
|
74
|
-
if date =~ /^\d{4}$/
|
75
|
-
Time.strptime date, "%Y"
|
76
|
-
elsif date =~ /^\d{4}-\d{2}$/
|
77
|
-
Time.strptime date, "%Y-%m"
|
78
|
-
elsif date =~ /\d{4}-\d{2}-\d{2}$/
|
79
|
-
Time.strptime date, "%Y-%m-%d"
|
80
|
-
end
|
81
|
-
end
|
82
76
|
end
|
83
77
|
end
|
@@ -26,13 +26,14 @@ require "relaton_bib/hash_converter"
|
|
26
26
|
module RelatonBib
|
27
27
|
# Bibliographic item
|
28
28
|
class BibliographicItem
|
29
|
+
include RelatonBib
|
30
|
+
|
29
31
|
TYPES = %W[article book booklet conference manual proceedings presentation
|
30
32
|
thesis techreport standard unpublished map electronic\sresource
|
31
33
|
audiovisual film video broadcast graphic_work music patent
|
32
|
-
inbook incollection inproceedings journal
|
33
|
-
].freeze
|
34
|
+
inbook incollection inproceedings journal].freeze
|
34
35
|
|
35
|
-
# @return [String]
|
36
|
+
# @return [String, NilClass]
|
36
37
|
attr_reader :id
|
37
38
|
|
38
39
|
# @return [Array<RelatonBib::TypedTitleString>]
|
@@ -41,13 +42,13 @@ module RelatonBib
|
|
41
42
|
# @return [Array<RelatonBib::TypedUri>]
|
42
43
|
attr_reader :link
|
43
44
|
|
44
|
-
# @return [String]
|
45
|
+
# @return [String, NilClass]
|
45
46
|
attr_reader :type
|
46
47
|
|
47
48
|
# @return [Array<RelatonBib::DocumentIdentifier>]
|
48
49
|
attr_reader :docidentifier
|
49
50
|
|
50
|
-
# @return [String] docnumber
|
51
|
+
# @return [String, NilClass] docnumber
|
51
52
|
attr_reader :docnumber
|
52
53
|
|
53
54
|
# @return [Array<RelatonBib::BibliographicDate>]
|
@@ -59,10 +60,10 @@ module RelatonBib
|
|
59
60
|
# @return [String, NillClass]
|
60
61
|
attr_reader :edition
|
61
62
|
|
62
|
-
# @return [RelatonBib::BibliongraphicItem::Version]
|
63
|
+
# @return [RelatonBib::BibliongraphicItem::Version, NilClass]
|
63
64
|
attr_reader :version
|
64
65
|
|
65
|
-
# @return [Array<RelatonBib::BiblioNote
|
66
|
+
# @return [Array<RelatonBib::BiblioNote>]
|
66
67
|
attr_reader :biblionote
|
67
68
|
|
68
69
|
# @return [Array<String>] language Iso639 code
|
@@ -71,7 +72,7 @@ module RelatonBib
|
|
71
72
|
# @return [Array<String>] script Iso15924 code
|
72
73
|
attr_reader :script
|
73
74
|
|
74
|
-
# @return [RelatonBib::FormattedRef]
|
75
|
+
# @return [RelatonBib::FormattedRef, NilClass]
|
75
76
|
attr_reader :formattedref
|
76
77
|
|
77
78
|
# @!attribute [r] abstract
|
@@ -80,7 +81,7 @@ module RelatonBib
|
|
80
81
|
# @return [RelatonBib::DocumentStatus, NilClass]
|
81
82
|
attr_reader :status
|
82
83
|
|
83
|
-
# @return [RelatonBib::CopyrightAssociation]
|
84
|
+
# @return [RelatonBib::CopyrightAssociation, NilClass]
|
84
85
|
attr_reader :copyright
|
85
86
|
|
86
87
|
# @return [RelatonBib::DocRelationCollection]
|
@@ -134,6 +135,11 @@ module RelatonBib
|
|
134
135
|
# @param validity [RelatonBib:Validity, NilClass]
|
135
136
|
# @param fetched [Date, NilClass] default nil
|
136
137
|
#
|
138
|
+
# @param copyright [Hash, RelatonBib::CopyrightAssociation, NilClass]
|
139
|
+
# @option copyright [Hash, RelatonBib::ContributionInfo] :owner
|
140
|
+
# @option copyright [String] :form
|
141
|
+
# @option copyright [String, NilClass] :to
|
142
|
+
#
|
137
143
|
# @param date [Array<Hash>]
|
138
144
|
# @option date [String] :type
|
139
145
|
# @option date [String] :from
|
@@ -163,7 +169,7 @@ module RelatonBib
|
|
163
169
|
# @option link [String] :content
|
164
170
|
def initialize(**args)
|
165
171
|
if args[:type] && !TYPES.include?(args[:type])
|
166
|
-
|
172
|
+
warn %{Document type "#{args[:type]}" is invalid.}
|
167
173
|
end
|
168
174
|
|
169
175
|
@title = (args[:title] || []).map do |t|
|
@@ -204,7 +210,7 @@ module RelatonBib
|
|
204
210
|
@language = args.fetch :language, []
|
205
211
|
@script = args.fetch :script, []
|
206
212
|
@status = args[:docstatus]
|
207
|
-
@relation
|
213
|
+
@relation = DocRelationCollection.new(args[:relation] || [])
|
208
214
|
@link = args.fetch(:link, []).map { |s| s.is_a?(Hash) ? TypedUri.new(s) : s }
|
209
215
|
@series = args.fetch :series, []
|
210
216
|
@medium = args[:medium]
|
@@ -265,6 +271,38 @@ module RelatonBib
|
|
265
271
|
end
|
266
272
|
end
|
267
273
|
|
274
|
+
# @return [Hash]
|
275
|
+
def to_hash
|
276
|
+
hash = {}
|
277
|
+
hash["id"] = id if id
|
278
|
+
hash["title"] = single_element_array(title) if title&.any?
|
279
|
+
hash["link"] = single_element_array(link) if link&.any?
|
280
|
+
hash["type"] = type if type
|
281
|
+
hash["docid"] = single_element_array(docidentifier) if docidentifier&.any?
|
282
|
+
hash["docnumber"] = docnumber if docnumber
|
283
|
+
hash["date"] = single_element_array(date) if date&.any?
|
284
|
+
hash["contributor"] = single_element_array(contributor) if contributor&.any?
|
285
|
+
hash["edition"] = edition if edition
|
286
|
+
hash["version"] = version.to_hash if version
|
287
|
+
hash["biblionote"] = single_element_array(biblionote) if biblionote&.any?
|
288
|
+
hash["language"] = single_element_array(language) if language&.any?
|
289
|
+
hash["script"] = single_element_array(script) if script&.any?
|
290
|
+
hash["formattedref"] = formattedref.to_hash if formattedref
|
291
|
+
hash["abstract"] = single_element_array(abstract) if abstract&.any?
|
292
|
+
hash["docstatus"] = status.to_hash if status
|
293
|
+
hash["copyright"] = copyright.to_hash if copyright
|
294
|
+
hash["relation"] = single_element_array(relation) if relation&.any?
|
295
|
+
hash["series"] = single_element_array(series) if series&.any?
|
296
|
+
hash["medium"] = medium.to_hash if medium
|
297
|
+
hash["place"] = single_element_array(place) if place&.any?
|
298
|
+
hash["extent"] = single_element_array(extent) if extent&.any?
|
299
|
+
hash["accesslocation"] = single_element_array(accesslocation) if accesslocation&.any?
|
300
|
+
hash["classification"] = classification.to_hash if classification
|
301
|
+
hash["validity"] = validity.to_hash if validity
|
302
|
+
hash["fetched"] = fetched.to_s if fetched
|
303
|
+
hash
|
304
|
+
end
|
305
|
+
|
268
306
|
private
|
269
307
|
|
270
308
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
@@ -4,17 +4,17 @@ require "relaton_bib/person"
|
|
4
4
|
|
5
5
|
# RelatonBib module
|
6
6
|
module RelatonBib
|
7
|
-
|
8
7
|
# Contributor's role.
|
9
8
|
class ContributorRole
|
9
|
+
include RelatonBib
|
10
|
+
|
10
11
|
TYPES = %w[author performer publisher editor adapter translator
|
11
|
-
distributor
|
12
|
-
].freeze
|
12
|
+
distributor].freeze
|
13
13
|
|
14
14
|
# @return [Array<RelatonBib::FormattedString>]
|
15
15
|
attr_reader :description
|
16
16
|
|
17
|
-
# @return [
|
17
|
+
# @return [Strig]
|
18
18
|
attr_reader :type
|
19
19
|
|
20
20
|
# @param type [String] allowed types "author", "editor",
|
@@ -29,6 +29,7 @@ module RelatonBib
|
|
29
29
|
@description = args.fetch(:description, []).map { |d| FormattedString.new content: d, format: nil }
|
30
30
|
end
|
31
31
|
|
32
|
+
# @param builder [Nokogiri::XML::Builder]
|
32
33
|
def to_xml(builder)
|
33
34
|
builder.role(type: type) do
|
34
35
|
description.each do |d|
|
@@ -36,10 +37,23 @@ module RelatonBib
|
|
36
37
|
end
|
37
38
|
end
|
38
39
|
end
|
40
|
+
|
41
|
+
# @return [Hash, String]
|
42
|
+
def to_hash
|
43
|
+
if description&.any?
|
44
|
+
hash = { "description" => single_element_array(description) }
|
45
|
+
hash["type"] = type if type
|
46
|
+
hash
|
47
|
+
elsif type
|
48
|
+
type
|
49
|
+
end
|
50
|
+
end
|
39
51
|
end
|
40
52
|
|
41
53
|
# Contribution info.
|
42
54
|
class ContributionInfo
|
55
|
+
include RelatonBib
|
56
|
+
|
43
57
|
# @return [Array<RelatonBib::ContributorRole>]
|
44
58
|
attr_reader :role
|
45
59
|
|
@@ -54,8 +68,16 @@ module RelatonBib
|
|
54
68
|
@role = role.map { |r| ContributorRole.new(**r) }
|
55
69
|
end
|
56
70
|
|
71
|
+
# @param builder [Nokogiri::XML::Builder]
|
57
72
|
def to_xml(builder)
|
58
73
|
entity.to_xml builder
|
59
74
|
end
|
75
|
+
|
76
|
+
# @return [Hash]
|
77
|
+
def to_hash
|
78
|
+
hash = entity.to_hash
|
79
|
+
hash["role"] = single_element_array(role) if role&.any?
|
80
|
+
hash
|
81
|
+
end
|
60
82
|
end
|
61
83
|
end
|
@@ -43,6 +43,17 @@ module RelatonBib
|
|
43
43
|
doc.postcode postcode if postcode
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
# @return [Hash]
|
48
|
+
def to_hash
|
49
|
+
hash = {}
|
50
|
+
hash["street"] = street if street&.any?
|
51
|
+
hash["city"] = city
|
52
|
+
hash["state"] = state if state
|
53
|
+
hash["country"] = country
|
54
|
+
hash["postcode"] = postcode if postcode
|
55
|
+
hash
|
56
|
+
end
|
46
57
|
end
|
47
58
|
|
48
59
|
# Contact class.
|
@@ -63,11 +74,18 @@ module RelatonBib
|
|
63
74
|
def to_xml(doc)
|
64
75
|
doc.send type, value
|
65
76
|
end
|
77
|
+
|
78
|
+
# @return [Hash]
|
79
|
+
def to_hash
|
80
|
+
{ "type" => type, "value" => value }
|
81
|
+
end
|
66
82
|
end
|
67
83
|
|
68
84
|
# Affilation.
|
69
85
|
class Affilation
|
70
|
-
|
86
|
+
include RelatonBib
|
87
|
+
|
88
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
71
89
|
attr_reader :name
|
72
90
|
|
73
91
|
# @return [Array<RelatonBib::FormattedString>]
|
@@ -77,8 +95,10 @@ module RelatonBib
|
|
77
95
|
attr_reader :organization
|
78
96
|
|
79
97
|
# @param organization [RelatonBib::Organization]
|
98
|
+
# @param name [RelatonBib::LocalizedString, NilClass]
|
80
99
|
# @param description [Array<RelatonBib::FormattedString>]
|
81
|
-
def initialize(organization, description
|
100
|
+
def initialize(organization:, name: nil, description: [])
|
101
|
+
@name = name
|
82
102
|
@organization = organization
|
83
103
|
@description = description
|
84
104
|
end
|
@@ -91,18 +111,28 @@ module RelatonBib
|
|
91
111
|
organization.to_xml builder
|
92
112
|
end
|
93
113
|
end
|
114
|
+
|
115
|
+
# @return [Hash]
|
116
|
+
def to_hash
|
117
|
+
hash = organization.to_hash
|
118
|
+
hash["name"] = name.to_hash if name
|
119
|
+
hash["description"] = single_element_array(description) if description&.any?
|
120
|
+
hash
|
121
|
+
end
|
94
122
|
end
|
95
123
|
|
96
124
|
# Contributor.
|
97
125
|
class Contributor
|
126
|
+
include RelatonBib
|
127
|
+
|
98
128
|
# @return [URI]
|
99
129
|
attr_reader :uri
|
100
130
|
|
101
|
-
# @return [Array<RelatonBib::Address, RelatonBib::
|
131
|
+
# @return [Array<RelatonBib::Address, RelatonBib::Contact>]
|
102
132
|
attr_reader :contact
|
103
133
|
|
104
134
|
# @param url [String]
|
105
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
135
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
106
136
|
def initialize(url: nil, contact: [])
|
107
137
|
@uri = URI url if url
|
108
138
|
@contact = contact
|
@@ -118,5 +148,13 @@ module RelatonBib
|
|
118
148
|
def to_xml(builder)
|
119
149
|
contact.each { |contact| contact.to_xml builder }
|
120
150
|
end
|
151
|
+
|
152
|
+
# @return [Hash]
|
153
|
+
def to_hash
|
154
|
+
hash = {}
|
155
|
+
hash["url"] = uri.to_s if uri
|
156
|
+
hash["contact"] = single_element_array(contact) if contact&.any?
|
157
|
+
hash
|
158
|
+
end
|
121
159
|
end
|
122
160
|
end
|