relaton-bib 0.3.6 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2652e6a30640ef8035238e6ae6126063b9057890
4
- data.tar.gz: 03f6a59bf6dd3d152578073e55d5d35b235bfc34
2
+ SHA256:
3
+ metadata.gz: 036777d6efe6a40b3f0ec2e6c1e1acfaf793d556cbaf907f330ee867716dc5b8
4
+ data.tar.gz: c16adf3cedb42c0521266792c1fefbdae2081a3a5561dda64fa373965e24f225
5
5
  SHA512:
6
- metadata.gz: 6ead52473fc5af8a5c86d9fce36bc048f383c3740c2047a7fd7bfc26cfd3f6211587842a0a5add6cdc7d1060e4d9d1d6f167b4e20fb751f8482f3c2a53be2e68
7
- data.tar.gz: 540bccaead183468e59e4ea8b3edc64352d1d1df1c12ca6f3a09e4e8f7c3c2f891681490a5f7d548412833dcdc9c05b96839e8a134306b1e464d92041148e863
6
+ metadata.gz: f03693eca920a087d1a0e1f7d2ff0d30a69e4a70fabc4a68f2ce92dff39a091e871eb9dbdf51cbd637af12b7b88ab0b0ce8000cf8dd7e78e7ca76b0d788c23ad
7
+ data.tar.gz: 571a1e896ad96a4b7c76a32c12596694ea8528c91fab2a14c5d93106dd4c8f10ae73823fee8e5c6123a8e0a095ae6bb1425234e52cce21268dc503cb108e62f7
@@ -0,0 +1,27 @@
1
+ # Auto-generated !!! Do not edit it manually
2
+ # use ci-master https://github.com/metanorma/metanorma-build-scripts
3
+ name: macos
4
+
5
+ on: [push]
6
+
7
+ jobs:
8
+ test-macos:
9
+ name: Test on Ruby ${{ matrix.ruby }} macOS
10
+ runs-on: macos-latest
11
+ strategy:
12
+ matrix:
13
+ ruby: [ '2.6', '2.5', '2.4' ]
14
+ steps:
15
+ - uses: actions/checkout@master
16
+ - name: Use Ruby
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ architecture: 'x64'
21
+ - name: Update gems
22
+ run: |
23
+ sudo gem install bundler -v "~> 2" --force
24
+ bundle install --jobs 4 --retry 3
25
+ - name: Run specs
26
+ run: |
27
+ bundle exec rake
@@ -0,0 +1,27 @@
1
+ # Auto-generated !!! Do not edit it manually
2
+ # use ci-master https://github.com/metanorma/metanorma-build-scripts
3
+ name: ubuntu
4
+
5
+ on: [push]
6
+
7
+ jobs:
8
+ test-linux:
9
+ name: Test on Ruby ${{ matrix.ruby }} Ubuntu
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ ruby: [ '2.6', '2.5', '2.4' ]
14
+ steps:
15
+ - uses: actions/checkout@master
16
+ - name: Use Ruby
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ architecture: 'x64'
21
+ - name: Update gems
22
+ run: |
23
+ gem install bundler -v "~> 2"
24
+ bundle install --jobs 4 --retry 3
25
+ - name: Run specs
26
+ run: |
27
+ bundle exec rake
@@ -0,0 +1,30 @@
1
+ # Auto-generated !!! Do not edit it manually
2
+ # use ci-master https://github.com/metanorma/metanorma-build-scripts
3
+ name: windows
4
+
5
+ on: [push]
6
+
7
+ jobs:
8
+ test-windows:
9
+ name: Test on Ruby ${{ matrix.ruby }} Windows
10
+ runs-on: windows-latest
11
+ strategy:
12
+ matrix:
13
+ ruby: [ '2.6', '2.5', '2.4' ]
14
+ steps:
15
+ - uses: actions/checkout@master
16
+ - name: Use Ruby
17
+ uses: actions/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ architecture: 'x64'
21
+ - name: Update gems
22
+ shell: pwsh
23
+ run: |
24
+ gem install bundler -v "~> 2"
25
+ bundle config --local path vendor/bundle
26
+ bundle update
27
+ bundle install --jobs 4 --retry 3
28
+ - name: Run specs
29
+ run: |
30
+ bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- relaton-bib (0.3.6)
4
+ relaton-bib (0.3.11)
5
5
  addressable
6
6
  nokogiri
7
7
 
data/docs/hash.adoc CHANGED
@@ -273,7 +273,7 @@ for the entry, the subclause title should be left as `{blank}`.
273
273
 
274
274
  So the following is a very simple reference in Metanorma Asciidoctor:
275
275
 
276
- [source,asciidoctor]
276
+ [source,asciidoc]
277
277
  ----
278
278
  [%bibitem]
279
279
  === Rubber latex -- Sampling
@@ -291,7 +291,7 @@ The anchor crossreference for the bibliographic entry may be encoded as the
291
291
  `id` entry in the definition list, or as the normal Asciidoctor anchor on the
292
292
  subclause, which takes priority over it:
293
293
 
294
- [source,asciidoctor]
294
+ [source,asciidoc]
295
295
  ----
296
296
  [[iso123]]
297
297
  [%bibitem]
@@ -306,7 +306,7 @@ Asciidoctor does not currently cope with definition lists more than four levels
306
306
  deep. If deeper nesting is needed, you will need to attach a new definition
307
307
  list with a list continuation:
308
308
 
309
- [source,asciidoctor]
309
+ [source,asciidoc]
310
310
  ----
311
311
  [[iso123]]
312
312
  [%bibitem]
@@ -555,7 +555,7 @@ The foregoing structure requires frequent breakouts into open blocks, to deal
555
555
  with the limitation on Asciidoctor nested definition lists. An alternative is to
556
556
  represent the nested structure of Relaton records in a simple, one-level definition list, and to use the key for each key-value pair to represent the hierarchical nesting of entries, as a dot-delimited path of keys. For example,
557
557
 
558
- [source,asciidoctor]
558
+ [source,asciidoc]
559
559
  ----
560
560
  [%bibitem]
561
561
  === Rubber latex -- Sampling
@@ -567,7 +567,7 @@ docid::
567
567
 
568
568
  can instead be represented as:
569
569
 
570
- [source,asciidoctor]
570
+ [source,asciidoc]
571
571
  ----
572
572
  [%bibitem]
573
573
  === Rubber latex -- Sampling
@@ -578,7 +578,7 @@ docid.id::: ISO 123
578
578
 
579
579
  Whenever part of the key is repeated between entries, the entries are assumed to attach to the same parent. If an array of hashes is needed, a blank entry is required for the key of each repeating element: For example,
580
580
 
581
- [source,asciidoctor]
581
+ [source,asciidoc]
582
582
  ----
583
583
  [%bibitem]
584
584
  === Rubber latex -- Sampling
@@ -594,7 +594,7 @@ type:: standard
594
594
 
595
595
  can instead be represented as:
596
596
 
597
- [source,asciidoctor]
597
+ [source,asciidoc]
598
598
  ----
599
599
  [%bibitem]
600
600
  === Rubber latex -- Sampling
@@ -609,7 +609,7 @@ docid.id:: 32784
609
609
 
610
610
  Embedded elements can also repeat:
611
611
 
612
- [source,asciidoctor]
612
+ [source,asciidoc]
613
613
  ----
614
614
  [%bibitem]
615
615
  ...
@@ -629,7 +629,7 @@ person::
629
629
 
630
630
  can instead be represented as:
631
631
 
632
- [source,asciidoctor]
632
+ [source,asciidoc]
633
633
  ----
634
634
  [%bibitem]
635
635
  ...
@@ -20,7 +20,7 @@ module RelatonBib
20
20
  # @param builder [Nokogiri::XML::Builder]
21
21
  def to_xml(builder)
22
22
  builder.version do
23
- builder.revision_date revision_date if revision_date
23
+ builder.send("revision-date", revision_date) if revision_date
24
24
  draft.each { |d| builder.draft d }
25
25
  end
26
26
  end
@@ -6,8 +6,7 @@ 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
@@ -28,7 +27,7 @@ module RelatonBib
28
27
  def initialize(type:, on: nil, from: nil, to: nil)
29
28
  raise ArgumentError, "expected :on or :from argument" unless on || from
30
29
 
31
- raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
30
+ # raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
32
31
 
33
32
  @type = type
34
33
  @on = RelatonBib.parse_date on
@@ -169,7 +169,7 @@ module RelatonBib
169
169
  # @option link [String] :content
170
170
  def initialize(**args)
171
171
  if args[:type] && !TYPES.include?(args[:type])
172
- raise ArgumentError, %{Type "#{args[:type]}" is invalid.}
172
+ warn %{Document type "#{args[:type]}" is invalid.}
173
173
  end
174
174
 
175
175
  @title = (args[:title] || []).map do |t|
@@ -284,6 +284,7 @@ module RelatonBib
284
284
  hash["contributor"] = single_element_array(contributor) if contributor&.any?
285
285
  hash["edition"] = edition if edition
286
286
  hash["version"] = version.to_hash if version
287
+ hash["revdate"] = revdate if revdate
287
288
  hash["biblionote"] = single_element_array(biblionote) if biblionote&.any?
288
289
  hash["language"] = single_element_array(language) if language&.any?
289
290
  hash["script"] = single_element_array(script) if script&.any?
@@ -303,6 +304,16 @@ module RelatonBib
303
304
  hash
304
305
  end
305
306
 
307
+ # If revision_date exists then returns it else returns published date or nil
308
+ # @return [String, NilClass]
309
+ def revdate
310
+ @revdate ||= if version&.revision_date
311
+ version.revision_date
312
+ else
313
+ date.detect { |d| d.type == "published" }&.on&.to_s
314
+ end
315
+ end
316
+
306
317
  private
307
318
 
308
319
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
@@ -13,8 +13,8 @@ module RelatonBib
13
13
  attr_reader :format
14
14
 
15
15
  # @param content [String]
16
- # @param language [String] language code Iso639
17
- # @param script [String] script code Iso15924
16
+ # @param language [String, NilClass] language code Iso639
17
+ # @param script [String, NilClass] script code Iso15924
18
18
  # @param format [String] the content type
19
19
  def initialize(content:, language: nil, script: nil, format: "text/plain")
20
20
  # if format && !FORMATS.include?(format)
@@ -35,6 +35,7 @@ module RelatonBib
35
35
 
36
36
  def extent_hash_to_bib(ret)
37
37
  return unless ret[:extent]
38
+
38
39
  ret[:extent] = array(ret[:extent])
39
40
  ret[:extent]&.each_with_index do |e, i|
40
41
  ret[:extent][i] = BibItemLocality.new(e[:type], e[:reference_from],
@@ -44,45 +45,57 @@ module RelatonBib
44
45
 
45
46
  def title_hash_to_bib(ret)
46
47
  return unless ret[:title]
48
+
47
49
  ret[:title] = array(ret[:title])
48
50
  ret[:title] = ret[:title].map do |t|
49
- t.is_a?(Hash) ? t : { content: t, language: "en", script: "Latn",
50
- format: "text/plain", type: "main" }
51
+ if t.is_a?(Hash) then t
52
+ else
53
+ { content: t, language: "en", script: "Latn", format: "text/plain", type: "main" }
54
+ end
51
55
  end
52
56
  end
53
57
 
54
58
  def language_hash_to_bib(ret)
55
59
  return unless ret[:language]
60
+
56
61
  ret[:language] = array(ret[:language])
57
62
  end
58
63
 
59
64
  def script_hash_to_bib(ret)
60
65
  return unless ret[:script]
66
+
61
67
  ret[:script] = array(ret[:script])
62
68
  end
63
69
 
64
70
  def abstract_hash_to_bib(ret)
65
71
  return unless ret[:abstract]
66
- ret[:abstract] = array(ret[:abstract])
72
+
73
+ ret[:abstract] = array(ret[:abstract]).map do |a|
74
+ a.is_a?(String) ? FormattedString.new(content: a) : a
75
+ end
67
76
  end
68
77
 
69
78
  def link_hash_to_bib(ret)
70
79
  return unless ret[:link]
80
+
71
81
  ret[:link] = array(ret[:link])
72
82
  end
73
83
 
74
84
  def place_hash_to_bib(ret)
75
85
  return unless ret[:place]
86
+
76
87
  ret[:place] = array(ret[:place])
77
88
  end
78
89
 
79
90
  def accesslocation_hash_to_bib(ret)
80
91
  return unless ret[:accesslocation]
92
+
81
93
  ret[:accesslocation] = array(ret[:accesslocation])
82
94
  end
83
95
 
84
96
  def dates_hash_to_bib(ret)
85
97
  return unless ret[:date]
98
+
86
99
  ret[:date] = array(ret[:date])
87
100
  ret[:date].each_with_index do |d, i|
88
101
  # value is synonym of on: it is reserved word in YAML
@@ -95,6 +108,7 @@ module RelatonBib
95
108
 
96
109
  def docid_hash_to_bib(ret)
97
110
  return unless ret[:docid]
111
+
98
112
  ret[:docid] = array(ret[:docid])
99
113
  ret[:docid]&.each_with_index do |id, i|
100
114
  ret[:docid][i] = DocumentIdentifier.new(id: id[:id], type: id[:type])
@@ -103,32 +117,35 @@ module RelatonBib
103
117
 
104
118
  def version_hash_to_bib(ret)
105
119
  return unless ret[:version]
120
+
106
121
  ret[:version][:draft] = array(ret[:version][:draft])
107
- ret[:version] and ret[:version] = BibliographicItem::Version.new(
108
- ret[:version][:revision_date], ret[:version][:draft])
122
+ ret[:version] && ret[:version] = BibliographicItem::Version.new(
123
+ ret[:version][:revision_date], ret[:version][:draft]
124
+ )
109
125
  end
110
126
 
111
127
  def biblionote_hash_to_bib(ret)
112
128
  return unless ret[:biblionote]
129
+
113
130
  ret[:biblionote] = array(ret[:biblionote])
114
131
  (ret[:biblionote])&.each_with_index do |n, i|
115
- ret[:biblionote][i] =
116
- BiblioNote.new(content: n[:content], type: n[:type],
117
- language: n[:language],
118
- script: n[:script], format: n[:format])
132
+ ret[:biblionote][i] = BiblioNote.new(
133
+ content: n[:content], type: n[:type], language: n[:language],
134
+ script: n[:script], format: n[:format]
135
+ )
119
136
  end
120
137
  end
121
138
 
122
139
  def formattedref_hash_to_bib(ret)
123
- ret[:formattedref] and ret[:formattedref] =
124
- formattedref(ret[:formattedref])
140
+ ret[:formattedref] && ret[:formattedref] = formattedref(ret[:formattedref])
125
141
  end
126
142
 
127
143
  def docstatus_hash_to_bib(ret)
128
- ret[:docstatus] and ret[:docstatus] =
129
- DocumentStatus.new(stage: ret[:docstatus][:stage],
130
- substage: ret[:docstatus][:substage],
131
- iteration: ret[:docstatus][:iteration])
144
+ ret[:docstatus] && ret[:docstatus] = DocumentStatus.new(
145
+ stage: ret[:docstatus][:stage],
146
+ substage: ret[:docstatus][:substage],
147
+ iteration: ret[:docstatus][:iteration],
148
+ )
132
149
  end
133
150
 
134
151
  def contributors_hash_to_bib(ret)
@@ -146,73 +163,83 @@ module RelatonBib
146
163
  end
147
164
  end
148
165
  ret[:contributor][i][:role] = roles
149
- ret[:contributor][i][:entity] = c[:person] ?
150
- person_hash_to_bib(c[:person]) : org_hash_to_bib(c[:organization])
166
+ ret[:contributor][i][:entity] = if c[:person]
167
+ person_hash_to_bib(c[:person])
168
+ else
169
+ org_hash_to_bib(c[:organization])
170
+ end
151
171
  ret[:contributor][i].delete(:person)
152
172
  ret[:contributor][i].delete(:organization)
153
173
  end
154
174
  end
155
175
 
156
- def org_hash_to_bib(c)
157
- return nil if c.nil?
158
- c[:identifier] = array(c[:identifier])&.map do |a|
176
+ def org_hash_to_bib(org)
177
+ return nil if org.nil?
178
+
179
+ org[:identifier] = array(org[:identifier])&.map do |a|
159
180
  OrgIdentifier.new(a[:type], a[:id])
160
181
  end
161
- c
182
+ org
162
183
  end
163
184
 
164
- def person_hash_to_bib(c)
185
+ def person_hash_to_bib(person)
165
186
  Person.new(
166
- name: fullname_hash_to_bib(c),
167
- affiliation: affiliation_hash_to_bib(c),
168
- contact: contacts_hash_to_bib(c),
169
- identifier: person_identifiers_hash_to_bib(c),
187
+ name: fullname_hash_to_bib(person),
188
+ affiliation: affiliation_hash_to_bib(person),
189
+ contact: contacts_hash_to_bib(person),
190
+ identifier: person_identifiers_hash_to_bib(person),
170
191
  )
171
192
  end
172
193
 
173
- def fullname_hash_to_bib(c)
174
- n = c[:name]
194
+ def fullname_hash_to_bib(person)
195
+ n = person[:name]
175
196
  FullName.new(
176
- forename: array(n[:forename])&.map { |f| localname(f, c) },
177
- initial: array(n[:initial])&.map { |f| localname(f, c) },
178
- addition: array(n[:addition])&.map { |f| localname(f, c) },
179
- prefix: array(n[:prefix])&.map { |f| localname(f, c) },
180
- surname: localname(n[:surname], c),
181
- completename: localname(n[:completename], c),
197
+ forename: array(n[:forename])&.map { |f| localname(f, person) },
198
+ initial: array(n[:initial])&.map { |f| localname(f, person) },
199
+ addition: array(n[:addition])&.map { |f| localname(f, person) },
200
+ prefix: array(n[:prefix])&.map { |f| localname(f, person) },
201
+ surname: localname(n[:surname], person),
202
+ completename: localname(n[:completename], person),
182
203
  )
183
204
  end
184
205
 
185
- def person_identifiers_hash_to_bib(c)
186
- array(c[:identifier])&.map do |a|
206
+ def person_identifiers_hash_to_bib(person)
207
+ array(person[:identifier])&.map do |a|
187
208
  PersonIdentifier.new(a[:type], a[:id])
188
209
  end
189
210
  end
190
211
 
191
- def affiliation_hash_to_bib(c)
192
- return [] unless c[:affiliation]
193
- array(c[:affiliation]).map do |a|
212
+ def affiliation_hash_to_bib(person)
213
+ return [] unless person[:affiliation]
214
+
215
+ array(person[:affiliation]).map do |a|
194
216
  a[:description] = array(a[:description])&.map do |d|
195
- FormattedString.new(
196
- d.is_a?(Hash) ?
197
- { content: d[:content], language: d[:language],
198
- script: d[:script], format: d[:format] } :
199
- { content: d })
217
+ cnt = if d.is_a?(Hash)
218
+ { content: d[:content], language: d[:language],
219
+ script: d[:script], format: d[:format] }
220
+ else { content: d }
221
+ end
222
+ FormattedString.new cnt
200
223
  end
201
224
  Affilation.new(
202
225
  organization: Organization.new(org_hash_to_bib(a[:organization])),
203
- description: a[:description]
226
+ description: a[:description],
204
227
  )
205
228
  end
206
229
  end
207
230
 
208
- def contacts_hash_to_bib(c)
209
- return [] unless c[:contact]
210
- array(c[:contact]).map do |a|
211
- (a[:city] || a[:country]) ?
231
+ def contacts_hash_to_bib(person)
232
+ return [] unless person[:contact]
233
+
234
+ array(person[:contact]).map do |a|
235
+ if a[:city] || a[:country]
212
236
  RelatonBib::Address.new(
213
237
  street: Array(a[:street]), city: a[:city], postcode: a[:postcode],
214
- country: a[:country], state: a[:state]) :
215
- RelatonBib::Contact.new(type: a[:type], value: a[:value])
238
+ country: a[:country], state: a[:state]
239
+ )
240
+ else
241
+ RelatonBib::Contact.new(type: a[:type], value: a[:value])
242
+ end
216
243
  end
217
244
  end
218
245
 
@@ -227,14 +254,14 @@ module RelatonBib
227
254
  end
228
255
 
229
256
  # @param ret [Hash]
230
- # @param r [Hash] relation
231
- # @param i [Integr] index of relation
232
- def relation_bibitem_hash_to_bib(ret, r, i)
233
- if r[:bibitem]
234
- ret[:relation][i][:bibitem] = bib_item(hash_to_bib(r[:bibitem], true))
257
+ # @param rel [Hash] relation
258
+ # @param idx [Integr] index of relation
259
+ def relation_bibitem_hash_to_bib(ret, rel, idx)
260
+ if rel[:bibitem]
261
+ ret[:relation][idx][:bibitem] = bib_item(hash_to_bib(rel[:bibitem], true))
235
262
  else
236
- warn "bibitem missing: #{r}"
237
- ret[:relation][i][:bibitem] = nil
263
+ warn "bibitem missing: #{rel}"
264
+ ret[:relation][idx][:bibitem] = nil
238
265
  end
239
266
  end
240
267
 
@@ -244,9 +271,9 @@ module RelatonBib
244
271
  BibliographicItem.new(item)
245
272
  end
246
273
 
247
- def relation_biblocality_hash_to_bib(ret, r, i)
248
- ret[:relation][i][:bib_locality] =
249
- array(r[:bib_locality])&.map do |bl|
274
+ def relation_biblocality_hash_to_bib(ret, rel, idx)
275
+ ret[:relation][idx][:bib_locality] =
276
+ array(rel[:bib_locality])&.map do |bl|
250
277
  BibItemLocality.new(bl[:type], bl[:reference_from],
251
278
  bl[:reference_to])
252
279
  end
@@ -271,7 +298,7 @@ module RelatonBib
271
298
  end
272
299
 
273
300
  def medium_hash_to_bib(ret)
274
- ret[:medium] and ret[:medium] = Medium.new(ret[:medium])
301
+ ret[:medium] = Medium.new(ret[:medium]) if ret[:medium]
275
302
  end
276
303
 
277
304
  def classification_hash_to_bib(ret)
@@ -279,52 +306,70 @@ module RelatonBib
279
306
  # ret[:classification]&.each_with_index do |c, i|
280
307
  # ret[:classification][i] = RelatonBib::Classification.new(c)
281
308
  # end
282
- ret[:classification] and
309
+ if ret[:classification]
283
310
  ret[:classification] = Classification.new(ret[:classification])
311
+ end
284
312
  end
285
313
 
286
314
  def validity_hash_to_bib(ret)
287
315
  return unless ret[:validity]
288
- ret[:validity][:begins] and b = Time.parse(ret[:validity][:begins])
289
- ret[:validity][:ends] and e = Time.parse(ret[:validity][:ends])
290
- ret[:validity][:revision] and r = Time.parse(ret[:validity][:revision])
316
+
317
+ ret[:validity][:begins] && b = Time.parse(ret[:validity][:begins])
318
+ ret[:validity][:ends] && e = Time.parse(ret[:validity][:ends])
319
+ ret[:validity][:revision] && r = Time.parse(ret[:validity][:revision])
291
320
  ret[:validity] = Validity.new(begins: b, ends: e, revision: r)
292
321
  end
293
322
 
323
+ # @param ogj [Hash, Array, String]
324
+ # @return [Hash, Array, String]
294
325
  def symbolize(obj)
295
- obj.is_a? Hash and
296
- return obj.inject({}){|memo,(k,v)| memo[k.to_sym] = symbolize(v); memo}
297
- obj.is_a? Array and
298
- return obj.inject([]){|memo,v | memo << symbolize(v); memo}
299
- return obj
326
+ if obj.is_a? Hash
327
+ obj.reduce({}) do |memo, (k, v)|
328
+ memo[k.to_sym] = symbolize(v)
329
+ memo
330
+ end
331
+ elsif obj.is_a? Array
332
+ obj.reduce([]) { |memo, v| memo << symbolize(v) }
333
+ else
334
+ obj
335
+ end
300
336
  end
301
337
 
302
- def array(a)
303
- return [] unless a
304
- return [a] unless a.is_a?(Array)
305
- a
338
+ def array(arr)
339
+ return [] unless arr
340
+ return [arr] unless arr.is_a?(Array)
341
+
342
+ arr
306
343
  end
307
344
 
308
- def localname(f, c)
309
- return nil if f.nil?
310
- f.is_a?(Hash) and lang = f[:language]
311
- lang ||= c[:name][:language]
312
- f.is_a?(Hash) and script = f[:script]
313
- script ||= c[:name][:script]
314
- f.is_a?(Hash) ?
315
- RelatonBib::LocalizedString.new(f[:content], lang, script) :
316
- RelatonBib::LocalizedString.new(f, lang, script)
345
+ def localname(name, person)
346
+ return nil if name.nil?
347
+
348
+ lang = name[:language] if name.is_a?(Hash)
349
+ lang ||= person[:name][:language]
350
+ script = name[:script] if name.is_a?(Hash)
351
+ script ||= person[:name][:script]
352
+ if name.is_a?(Hash)
353
+ RelatonBib::LocalizedString.new(name[:content], lang, script)
354
+ else
355
+ RelatonBib::LocalizedString.new(name, lang, script)
356
+ end
317
357
  end
318
358
 
319
- def localizedstring(f)
320
- f.is_a?(Hash) ?
321
- RelatonBib::LocalizedString.new(f[:content], f[:language], f[:script]) :
322
- RelatonBib::LocalizedString.new(f)
359
+ def localizedstring(lst)
360
+ if lst.is_a?(Hash)
361
+ RelatonBib::LocalizedString.new(lst[:content], lst[:language], lst[:script])
362
+ else
363
+ RelatonBib::LocalizedString.new(lst)
364
+ end
323
365
  end
324
366
 
325
- def formattedref(f)
326
- f.is_a?(Hash) ? RelatonBib::FormattedRef.new(f) :
327
- RelatonBib::FormattedRef.new(content: f)
367
+ def formattedref(frf)
368
+ if frf.is_a?(Hash)
369
+ RelatonBib::FormattedRef.new(frf)
370
+ else
371
+ RelatonBib::FormattedRef.new(content: frf)
372
+ end
328
373
  end
329
374
  end
330
375
  end
@@ -4,7 +4,7 @@ module RelatonBib
4
4
  attr_reader :hit
5
5
 
6
6
  # @param hit [Hash]
7
- # @param hit_collection [RelatonNist:HitCollection]
7
+ # @param hit_collection [RelatonIso::HitCollection, RelatonNist:HitCollection]
8
8
  def initialize(hit, hit_collection = nil)
9
9
  @hit = hit
10
10
  @hit_collection = hit_collection
@@ -9,7 +9,7 @@ module RelatonBib
9
9
  # @return [String]
10
10
  attr_reader :year
11
11
 
12
- # @return [Iecbib::HitCollection]
12
+ # @return [RelatonIso::HitCollection]
13
13
  def fetch
14
14
  workers = WorkersPool.new 4
15
15
  workers.worker(&:fetch)
@@ -45,9 +45,16 @@ module RelatonBib
45
45
 
46
46
  # @return [Hash]
47
47
  def to_hash
48
- hash = {}
49
- hash["type"] = type if type
50
- hash.merge title.to_hash
48
+ th = title.to_hash
49
+ return th unless type
50
+
51
+ hash = { "type" => type }
52
+ if th.is_a? String
53
+ hash["content"] = th
54
+ else
55
+ hash.merge! th
56
+ end
57
+ hash
51
58
  end
52
59
  end
53
60
  end
@@ -6,7 +6,7 @@ module RelatonBib
6
6
  # @return [Symbol] :src/:obp/:rss
7
7
  attr_reader :type
8
8
  # @retutn [URI]
9
- attr_reader :content
9
+ attr_accessor :content
10
10
 
11
11
  # @param type [String] src/obp/rss
12
12
  # @param content [String]
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "0.3.6".freeze
2
+ VERSION = "0.3.11".freeze
3
3
  end
@@ -5,7 +5,8 @@ module RelatonBib
5
5
  class << self
6
6
  def from_xml(xml)
7
7
  doc = Nokogiri::XML(xml)
8
- bibitem = doc.at "/bibitem"
8
+ doc.remove_namespaces!
9
+ bibitem = doc.at "/bibitem|/bibdata"
9
10
  BibliographicItem.new(item_data(bibitem))
10
11
  end
11
12
 
@@ -29,8 +30,8 @@ module RelatonBib
29
30
  edition: bibitem.at("./edition")&.text,
30
31
  version: fetch_version(bibitem),
31
32
  biblionote: fetch_note(bibitem),
32
- language: bibitem.xpath("./language").map(&:text),
33
- script: bibitem.xpath("./script").map(&:text),
33
+ language: fetch_language(bibitem),
34
+ script: fetch_script(bibitem),
34
35
  abstract: fetch_abstract(bibitem),
35
36
  docstatus: fetch_status(bibitem),
36
37
  copyright: fetch_copyright(bibitem),
@@ -50,7 +51,7 @@ module RelatonBib
50
51
  version = item.at "./version"
51
52
  return unless version
52
53
 
53
- revision_date = version.at("revision_date").text
54
+ revision_date = version.at("revision-date")&.text
54
55
  draft = version.xpath("draft").map &:text
55
56
  RelatonBib::BibliographicItem::Version.new revision_date, draft
56
57
  end
@@ -67,6 +68,14 @@ module RelatonBib
67
68
  end
68
69
  end
69
70
 
71
+ def fetch_language(item)
72
+ item.xpath("./language").reduce([]) { |a, l| l.text.empty? ? a : a << l.text }
73
+ end
74
+
75
+ def fetch_script(item)
76
+ item.xpath("./script").reduce([]) { |a, s| s.text.empty? ? a : a << s.text }
77
+ end
78
+
70
79
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
71
80
 
72
81
  def fetch_series(item)
@@ -145,8 +154,9 @@ module RelatonBib
145
154
  status = item.at("./status")
146
155
  return unless status
147
156
 
157
+ stage = status.at "stage"
148
158
  DocumentStatus.new(
149
- stage: status.at("stage").text,
159
+ stage: stage ? stage.text : status.text,
150
160
  substage: status.at("substage")&.text,
151
161
  iteration: status.at("iteration")&.text,
152
162
  )
@@ -154,8 +164,9 @@ module RelatonBib
154
164
 
155
165
  def fetch_dates(item)
156
166
  item.xpath("./date").map do |d|
167
+ type = d[:type].to_s.empty? ? "published" : d[:type]
157
168
  RelatonBib::BibliographicDate.new(
158
- type: d[:type], on: d.at("on")&.text, from: d.at("from")&.text,
169
+ type: type, on: d.at("on")&.text, from: d.at("from")&.text,
159
170
  to: d.at("to")&.text
160
171
  )
161
172
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-11 00:00:00.000000000 Z
11
+ date: 2019-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,16 +157,17 @@ executables: []
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
+ - ".github/workflows/macos.yml"
161
+ - ".github/workflows/ubuntu.yml"
162
+ - ".github/workflows/windows.yml"
160
163
  - ".gitignore"
161
164
  - ".rspec"
162
165
  - ".rubocop.yml"
163
- - ".travis.yml"
164
166
  - Gemfile
165
167
  - Gemfile.lock
166
168
  - LICENSE.txt
167
169
  - README.adoc
168
170
  - Rakefile
169
- - appveyor.yml
170
171
  - bin/console
171
172
  - bin/setup
172
173
  - docs/hash.adoc
@@ -221,8 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
222
  - !ruby/object:Gem::Version
222
223
  version: '0'
223
224
  requirements: []
224
- rubyforge_project:
225
- rubygems_version: 2.6.12
225
+ rubygems_version: 3.0.6
226
226
  signing_key:
227
227
  specification_version: 4
228
228
  summary: 'RelatonBib: Ruby XMLDOC impementation.'
data/.travis.yml DELETED
@@ -1,18 +0,0 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
3
- language: ruby
4
- cache: bundler
5
- os:
6
- - linux
7
- - osx
8
- rvm:
9
- - 2.6
10
- - 2.5
11
- - 2.4
12
- - ruby-head
13
- before_install:
14
- - gem install bundler -v "~> 2"
15
- - bundle update
16
- matrix:
17
- allow_failures:
18
- - rvm: ruby-head
data/appveyor.yml DELETED
@@ -1,37 +0,0 @@
1
- # Auto-generated !!! Do not edit it manually
2
- # use ci-master https://github.com/metanorma/metanorma-build-scripts
3
- version: '{build}'
4
-
5
- cache:
6
- - vendor/bundle
7
-
8
- environment:
9
- matrix:
10
- - RUBY_VERSION: 26
11
- - RUBY_VERSION: 25
12
- - RUBY_VERSION: 24
13
- - RUBY_VERSION: _trunk
14
-
15
- matrix:
16
- allow_failures:
17
- - RUBY_VERSION: _trunk
18
-
19
- install:
20
- - ps: . { iwr -useb https://raw.githubusercontent.com/metanorma/metanorma-build-scripts/master/appveyor.ps1 } | iex
21
- - refreshenv
22
-
23
- build_script:
24
- - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
25
- - set GIT_TERMINAL_PROMPT=0
26
- - gem install bundler -v "~> 2"
27
- - bundle config --local path vendor/bundle
28
- - bundle update
29
- - bundle install
30
-
31
- before_test:
32
- - ruby -v
33
- - gem -v
34
- - bundle -v
35
-
36
- test_script:
37
- - bundle exec rake