iso-bib-item 0.1.6 → 0.1.7
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 +1 -1
- data/lib/iso_bib_item.rb +0 -5
- data/lib/iso_bib_item/bibliographic_date.rb +5 -0
- data/lib/iso_bib_item/bibliographic_item.rb +36 -11
- data/lib/iso_bib_item/contribution_info.rb +5 -4
- data/lib/iso_bib_item/contributor.rb +72 -7
- data/lib/iso_bib_item/iso_bibliographic_item.rb +9 -10
- data/lib/iso_bib_item/iso_localized_title.rb +3 -2
- data/lib/iso_bib_item/organization.rb +1 -1
- data/lib/iso_bib_item/person.rb +54 -15
- data/lib/iso_bib_item/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 28b47902774baa20582877c3f4bb40b511858665
|
4
|
+
data.tar.gz: 0b91cba1d8b30a5b725ef4cb5c6945ac17fdc197
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fe3106f7ce849ad2f8687abb31c936ab782e9cb143c8a6cd94a0e276ace015fd9289bce6fb1426537dcd5aa9d0c2998c58087d7888252cbdcef23ca52e04bc4
|
7
|
+
data.tar.gz: 7a8de9331fa305198f6f63c04a93f913d34a276687dd9ff164d7575ef1648ce5900bd594d3b879d26fc6d198ec5abec633870eb3fa1b378471e4d57ebd9f087e
|
data/Gemfile.lock
CHANGED
data/lib/iso_bib_item.rb
CHANGED
@@ -28,6 +28,10 @@ module IsoBibItem
|
|
28
28
|
@to = Time.strptime(to, '%Y-%d') if to
|
29
29
|
end
|
30
30
|
|
31
|
+
# rubocop:disable Metric/AbcSize
|
32
|
+
|
33
|
+
# @param builder [Nokogiri::XML::Builder]
|
34
|
+
# @return [Nokogiri::XML::Builder]
|
31
35
|
def to_xml(builder, **opts)
|
32
36
|
builder.date(type: type) do
|
33
37
|
if on
|
@@ -38,5 +42,6 @@ module IsoBibItem
|
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
45
|
+
# rubocop:enable Metric/AbcSize
|
41
46
|
end
|
42
47
|
end
|
@@ -83,6 +83,9 @@ module IsoBibItem
|
|
83
83
|
|
84
84
|
# Bibliographic item
|
85
85
|
class BibliographicItem
|
86
|
+
# @return [String]
|
87
|
+
attr_reader :id
|
88
|
+
|
86
89
|
# @return [Array<IsoBibItem::FormattedString>]
|
87
90
|
attr_reader :title
|
88
91
|
|
@@ -128,6 +131,11 @@ module IsoBibItem
|
|
128
131
|
# @return [IsoBibItem::DocRelationCollection]
|
129
132
|
attr_reader :relations
|
130
133
|
|
134
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
135
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
136
|
+
|
137
|
+
# @param id [Arrat<IsoBibItem::DocumentIdentifier>]
|
138
|
+
# @param title [Array<IsoBibItem::FormattedString>]
|
131
139
|
# @param language [Arra<String>]
|
132
140
|
# @param script [Array<String>]
|
133
141
|
# @param dates [Array<Hash{type=>String, from=>String, to=>String}>]
|
@@ -136,14 +144,16 @@ module IsoBibItem
|
|
136
144
|
# @param abstract [Array<Hash{content=>String, language=>String,
|
137
145
|
# script=>String, type=>String}>]
|
138
146
|
# @param relations [Array<Hash{type=>String, identifier=>String}>]
|
139
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
140
147
|
def initialize(**args)
|
141
|
-
@
|
148
|
+
@id = args[:id]
|
149
|
+
@title = (args[:titles] || []).map { |t| FormattedString.new t }
|
142
150
|
@docidentifier = []
|
143
|
-
@dates = (args[:dates] || []).map
|
144
|
-
|
145
|
-
|
146
|
-
|
151
|
+
@dates = (args[:dates] || []).map do |d|
|
152
|
+
d.is_a?(Hash) ? BibliographicDate.new(d) : d
|
153
|
+
end
|
154
|
+
@contributors = (args[:contributors] || []).map do |c|
|
155
|
+
e = c[:entity].is_a?(Hash) ? Organization.new(c[:entity]) : c[:entity]
|
156
|
+
ContributionInfo.new(entity: e, role: c[:roles])
|
147
157
|
end
|
148
158
|
@notes = []
|
149
159
|
@language = args[:language]
|
@@ -152,13 +162,10 @@ module IsoBibItem
|
|
152
162
|
FormattedString.new(a)
|
153
163
|
end
|
154
164
|
@relations = DocRelationCollection.new(args[:relations] || [])
|
165
|
+
@source = args[:source].map { |s| TypedUri.new(s) }
|
155
166
|
end
|
156
167
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
157
|
-
|
158
|
-
# @param docid [DocumentIdentifier]
|
159
|
-
# def add_docidentifier(docid)
|
160
|
-
# @docidentifier << docid
|
161
|
-
# end
|
168
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
162
169
|
|
163
170
|
# @param lang [String] language code Iso639
|
164
171
|
# @return [IsoBibItem::FormattedString, Array<IsoBibItem::FormattedString>]
|
@@ -169,5 +176,23 @@ module IsoBibItem
|
|
169
176
|
@abstract
|
170
177
|
end
|
171
178
|
end
|
179
|
+
|
180
|
+
# @return [String]
|
181
|
+
def to_xml
|
182
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
183
|
+
xml.bibitem(id: id) do
|
184
|
+
title.each { |t| xml.title { t.to_xml xml } }
|
185
|
+
source.each { |s| s.to_xml xml }
|
186
|
+
dates.each { |d| d.to_xml xml }
|
187
|
+
contributors.each do |c|
|
188
|
+
xml.contributor do
|
189
|
+
c.role.each { |r| r.to_xml xml }
|
190
|
+
c.to_xml xml
|
191
|
+
end
|
192
|
+
end
|
193
|
+
language.each { |l| xml.language l }
|
194
|
+
end
|
195
|
+
end.doc.root.to_xml
|
196
|
+
end
|
172
197
|
end
|
173
198
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'iso_bib_item/person'
|
4
|
+
|
3
5
|
# Isobib module
|
4
6
|
module IsoBibItem
|
5
7
|
# Contributor's role.
|
@@ -10,8 +12,9 @@ module IsoBibItem
|
|
10
12
|
# @return [ContributorRoleType]
|
11
13
|
attr_reader :type
|
12
14
|
|
13
|
-
# @param type [
|
15
|
+
# @param type [String] allowed types "author", "editor",
|
14
16
|
# "cartographer", "publisher"
|
17
|
+
# @param description [Array<String>]
|
15
18
|
def initialize(type, description = [])
|
16
19
|
@type = type
|
17
20
|
@description = description.map { |d| FormattedString.new d }
|
@@ -20,9 +23,7 @@ module IsoBibItem
|
|
20
23
|
def to_xml(builder)
|
21
24
|
builder.role(type: type) do
|
22
25
|
description.each do |d|
|
23
|
-
builder.description
|
24
|
-
d.to_xml(desc)
|
25
|
-
end
|
26
|
+
builder.description { |desc| d.to_xml(desc) }
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -3,10 +3,66 @@
|
|
3
3
|
require 'uri'
|
4
4
|
|
5
5
|
module IsoBibItem
|
6
|
-
#
|
7
|
-
class
|
8
|
-
# @return [String]
|
9
|
-
attr_reader :
|
6
|
+
# Address class.
|
7
|
+
class Address
|
8
|
+
# @return [Array<String>]
|
9
|
+
attr_reader :street
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
attr_reader :city
|
13
|
+
|
14
|
+
# @return [String, NilClass]
|
15
|
+
attr_reader :state
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
attr_reader :country
|
19
|
+
|
20
|
+
# @return [String, NilClass]
|
21
|
+
attr_reader :postcode
|
22
|
+
|
23
|
+
# @param street [Array<String>]
|
24
|
+
# @param city [String]
|
25
|
+
# @param state [String]
|
26
|
+
# @param country [String]
|
27
|
+
# @param postcode [String]
|
28
|
+
def initialize(street:, city:, state: nil, country:, postcode: nil)
|
29
|
+
@street = street
|
30
|
+
@city = city
|
31
|
+
@state = state
|
32
|
+
@country = country
|
33
|
+
@postcode = postcode
|
34
|
+
end
|
35
|
+
|
36
|
+
# @param builder [Nokogiri::XML::Document]
|
37
|
+
def to_xml(doc)
|
38
|
+
doc.address do
|
39
|
+
street.each { |str| doc.street str }
|
40
|
+
doc.city city
|
41
|
+
doc.state state if state
|
42
|
+
doc.country country
|
43
|
+
doc.postcode postcode if postcode
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Contact class.
|
49
|
+
class Contact
|
50
|
+
# @return [String] allowed "phone", "email" or "uri"
|
51
|
+
attr_reader :type
|
52
|
+
|
53
|
+
# @return [String]
|
54
|
+
attr_reader :value
|
55
|
+
|
56
|
+
# @param phone [String]
|
57
|
+
def initialize(type:, value:)
|
58
|
+
@type = type
|
59
|
+
@value = value
|
60
|
+
end
|
61
|
+
|
62
|
+
# @param builder [Nokogiri::XML::Document]
|
63
|
+
def to_xml(doc)
|
64
|
+
doc.send type, value
|
65
|
+
end
|
10
66
|
end
|
11
67
|
|
12
68
|
# Affilation.
|
@@ -25,6 +81,14 @@ module IsoBibItem
|
|
25
81
|
@organization = organization
|
26
82
|
@description = []
|
27
83
|
end
|
84
|
+
|
85
|
+
def to_xml(builder)
|
86
|
+
builder.affilation do
|
87
|
+
builder.name { name.to_xml builder } if name
|
88
|
+
description.each { |d| builder.description { d.to_xml builder } }
|
89
|
+
organization.to_xml builder
|
90
|
+
end
|
91
|
+
end
|
28
92
|
end
|
29
93
|
|
30
94
|
# Contributor.
|
@@ -32,13 +96,14 @@ module IsoBibItem
|
|
32
96
|
# @return [URI]
|
33
97
|
attr_reader :uri
|
34
98
|
|
35
|
-
# @return [Array<IsoBibItem::
|
99
|
+
# @return [Array<IsoBibItem::Address, IsoBibItem::Phone>]
|
36
100
|
attr_reader :contacts
|
37
101
|
|
38
102
|
# @param url [String]
|
39
|
-
|
103
|
+
# @param contacts [Array<IsoBibItem::Address, IsoBibItem::Phone>]
|
104
|
+
def initialize(url: nil, contacts: [])
|
40
105
|
@uri = URI url if url
|
41
|
-
@contacts =
|
106
|
+
@contacts = contacts
|
42
107
|
end
|
43
108
|
|
44
109
|
# @return [String]
|
@@ -93,6 +93,7 @@ module IsoBibItem
|
|
93
93
|
attr_reader :ics
|
94
94
|
|
95
95
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
96
|
+
|
96
97
|
# @param docid [Hash{project_number=>Integer, part_number=>Integer}]
|
97
98
|
# @param titles [Array<Hash{title_intro=>String, title_main=>String,
|
98
99
|
# title_part=>String, language=>String, script=>String}>]
|
@@ -116,7 +117,9 @@ module IsoBibItem
|
|
116
117
|
# @param relations [Array<Hash{type=>String, identifier=>String}>]
|
117
118
|
def initialize(**args)
|
118
119
|
super_args = args.select do |k|
|
119
|
-
%i[
|
120
|
+
%i[
|
121
|
+
id language script dates abstract contributors relations source
|
122
|
+
].include? k
|
120
123
|
end
|
121
124
|
super(super_args)
|
122
125
|
@docidentifier = IsoDocumentId.new args[:docid]
|
@@ -126,10 +129,7 @@ module IsoBibItem
|
|
126
129
|
@status = IsoDocumentStatus.new(args[:docstatus])
|
127
130
|
@workgroup = IsoProjectGroup.new(args[:workgroup]) if args[:workgroup]
|
128
131
|
@ics = args[:ics].map { |i| Ics.new(i) }
|
129
|
-
if args[:copyright]
|
130
|
-
@copyright = CopyrightAssociation.new(args[:copyright])
|
131
|
-
end
|
132
|
-
@source = args[:source].map { |s| TypedUri.new(s) }
|
132
|
+
@copyright = CopyrightAssociation.new args[:copyright] if args[:copyright]
|
133
133
|
end
|
134
134
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
135
135
|
|
@@ -139,10 +139,11 @@ module IsoBibItem
|
|
139
139
|
def to_all_parts
|
140
140
|
me = Duplicate.duplicate(self)
|
141
141
|
@relations << DocumentRelation.new(type: "partOf", identifier: nil, url: nil, bibitem: me)
|
142
|
-
|
142
|
+
|
143
|
+
@title.each(&:remove_part)
|
143
144
|
@abstract = []
|
144
145
|
@docidentifier.remove_part
|
145
|
-
@
|
146
|
+
@all_parts = true
|
146
147
|
end
|
147
148
|
|
148
149
|
# convert ISO:yyyy reference to reference to most recent
|
@@ -211,7 +212,6 @@ module IsoBibItem
|
|
211
212
|
idstr.strip
|
212
213
|
end
|
213
214
|
|
214
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
215
215
|
def render_xml(builder, **opts)
|
216
216
|
builder.send(:bibitem, type: type, id: id) do
|
217
217
|
title.each { |t| t.to_xml builder }
|
@@ -236,10 +236,9 @@ module IsoBibItem
|
|
236
236
|
builder.note("ISO DATE: #{opts[:note]}", format: 'text/plain')
|
237
237
|
end
|
238
238
|
ics.each { |i| i.to_xml builder }
|
239
|
-
builder.allParts
|
239
|
+
builder.allParts 'true' if @all_parts
|
240
240
|
yield(builder) if block_given?
|
241
241
|
end
|
242
242
|
end
|
243
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
244
243
|
end
|
245
244
|
end
|
@@ -23,13 +23,14 @@ module IsoBibItem
|
|
23
23
|
# @param title_part [String]
|
24
24
|
# @param language [String] language Iso639 code
|
25
25
|
# @param script [String] script Iso15924 code
|
26
|
-
def initialize(title_intro:, title_main:, title_part: nil, language:,
|
26
|
+
def initialize(title_intro:, title_main:, title_part: nil, language:,
|
27
|
+
script:)
|
27
28
|
@title_intro = title_intro
|
28
29
|
@title_main = title_main
|
29
30
|
@title_part = title_part
|
30
31
|
@language = language
|
31
32
|
@script = script
|
32
|
-
@title_main =
|
33
|
+
@title_main = '[ -- ]' if @title_main.nil? || @title_main.empty?
|
33
34
|
# "[ -- ]" # title cannot be nil
|
34
35
|
end
|
35
36
|
|
@@ -43,7 +43,7 @@ module IsoBibItem
|
|
43
43
|
# @param abbreviation [String]
|
44
44
|
# @param url [String]
|
45
45
|
def initialize(name:, abbreviation: nil, url: nil)
|
46
|
-
super(url)
|
46
|
+
super(url: url)
|
47
47
|
@name = LocalizedString.new name
|
48
48
|
@abbreviation = LocalizedString.new abbreviation
|
49
49
|
@identifiers = []
|
data/lib/iso_bib_item/person.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'iso_bib_item/contributor'
|
2
4
|
|
3
5
|
module IsoBibItem
|
@@ -6,30 +8,57 @@ module IsoBibItem
|
|
6
8
|
# @return [Array<IsoBibItem::LocalizedString>]
|
7
9
|
attr_accessor :forenames
|
8
10
|
|
9
|
-
# @return [Array<IsoBibItem::LocalizedString]
|
10
|
-
attr_accessor :
|
11
|
+
# @return [Array<IsoBibItem::LocalizedString>]
|
12
|
+
attr_accessor :initials
|
11
13
|
|
12
14
|
# @return [IsoBibItem::LocalizedString]
|
13
15
|
attr_accessor :surname
|
14
16
|
|
15
|
-
# @return [Array<IsoBibItem::LocalizedString]
|
17
|
+
# @return [Array<IsoBibItem::LocalizedString>]
|
16
18
|
attr_accessor :additions
|
17
19
|
|
18
|
-
# @return [Array<IsoBibItem::LocalizedString]
|
20
|
+
# @return [Array<IsoBibItem::LocalizedString>]
|
19
21
|
attr_accessor :prefix
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
# @return [IsoBibItem::LocalizedString]
|
24
|
+
attr_reader :completename
|
25
|
+
|
26
|
+
# @param surname [IsoBibItem::LocalizedString]
|
27
|
+
# @param forenames [Array<IsoBibItem::LocalizedString>]
|
28
|
+
# @param initials [Array<IsoBibItem::LocalizedString>]
|
29
|
+
# @param prefix [Array<IsoBibItem::LocalizedString>]
|
30
|
+
# @param completename [IsoBibItem::LocalizedString]
|
31
|
+
def initialize(**args)
|
32
|
+
unless args[:surname] || args[:completename]
|
33
|
+
raise ArgumentError, 'Should be given :surname or :completename'
|
34
|
+
end
|
35
|
+
@surname = args[:surname]
|
36
|
+
@forenames = args[:forenames]
|
37
|
+
@initials = args[:initials]
|
38
|
+
@additions = args[:additions]
|
39
|
+
@prefix = args[:prefix]
|
40
|
+
@completename = args[:completename]
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param builder [Nokogiri::XML::Builder]
|
44
|
+
def to_xml(builder)
|
45
|
+
builder.name do
|
46
|
+
if completename
|
47
|
+
builder.completename { completename.to_xml builder }
|
48
|
+
else
|
49
|
+
builder.prefix { prefix.each { |p| p.to_xml builder } } if prefix
|
50
|
+
builder.initial { initials.each { |i| i.to_xml builder } } if initials
|
51
|
+
builder.addition { additions.each { |a| a.to_xml builder } } if additions
|
52
|
+
builder.surname { surname.to_xml builder }
|
53
|
+
builder.forename { forenames.each { |f| f.to_xml builder } } if forenames
|
54
|
+
end
|
55
|
+
end
|
27
56
|
end
|
28
57
|
end
|
29
58
|
|
30
59
|
module PersonIdentifierType
|
31
|
-
ISNI = 'isni'
|
32
|
-
URI = 'uri'
|
60
|
+
ISNI = 'isni'
|
61
|
+
URI = 'uri'
|
33
62
|
end
|
34
63
|
|
35
64
|
# Person identifier.
|
@@ -57,10 +86,20 @@ module IsoBibItem
|
|
57
86
|
# @return [Array<IsoBibItem::PersonIdentifier>]
|
58
87
|
attr_accessor :identifiers
|
59
88
|
|
60
|
-
|
61
|
-
|
62
|
-
|
89
|
+
# @param name [IsoBibItem::FullName]
|
90
|
+
# @param affilation [Array<IsoBibItem::Affilation>]
|
91
|
+
def initialize(name:, affilation: [], contacts:)
|
92
|
+
super(contacts: contacts)
|
93
|
+
@name = name
|
94
|
+
@affilation = affilation
|
63
95
|
@identifiers = []
|
64
96
|
end
|
97
|
+
|
98
|
+
def to_xml(builder)
|
99
|
+
builder.person do
|
100
|
+
name.to_xml builder
|
101
|
+
affilation.each { |a| a.to_xml builder }
|
102
|
+
end
|
103
|
+
end
|
65
104
|
end
|
66
105
|
end
|
data/lib/iso_bib_item/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iso-bib-item
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
requirements: []
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.
|
180
|
+
rubygems_version: 2.6.12
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: 'IsoBibItem: Ruby ISOXMLDOC impementation.'
|