relaton-cli 0.5.0 → 0.6.0
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/.github/workflows/macos.yml +9 -4
- data/.github/workflows/ubuntu.yml +9 -4
- data/.github/workflows/windows.yml +9 -4
- data/.rspec +1 -0
- data/docs/README.adoc +10 -272
- data/lib/relaton/bibcollection.rb +11 -13
- data/lib/relaton/bibdata.rb +55 -97
- data/lib/relaton/cli/base_convertor.rb +13 -17
- data/lib/relaton/cli/command.rb +11 -35
- data/lib/relaton/cli/relaton_file.rb +6 -25
- data/lib/relaton/cli/version.rb +1 -1
- data/lib/relaton/cli/xml_convertor.rb +13 -1
- data/lib/relaton/cli/xml_to_html_renderer.rb +1 -1
- data/lib/relaton/cli/yaml_convertor.rb +30 -4
- data/lib/relaton/cli.rb +13 -2
- data/lib/relaton-cli.rb +0 -1
- data/relaton-cli.gemspec +1 -1
- data/templates/_document.liquid +2 -2
- metadata +5 -9
- data/lib/relaton/bibcollectionnew.rb +0 -116
- data/lib/relaton/bibdatanew.rb +0 -62
- data/lib/relaton/cli/xml_convertor_new.rb +0 -57
- data/lib/relaton/cli/yaml_convertor_new.rb +0 -85
- data/lib/relaton/xml_document.rb +0 -92
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fdcb1820641391e7cddeb35b48d11d0fe0cdbb76712e3295c16bcbb60b3634b
|
4
|
+
data.tar.gz: cad8f85257a2eb9eb59035bd2a7b4515a3d9b0332803c430f90a25cbc85c9554
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31090e660806cca71e117e4122ed364d86c576fb40feb63eb747385502e2fe4d4a3c128bb148efcf351e6070e7beb8c9947cb586aad3eb28cbaeebbe0c4f91af
|
7
|
+
data.tar.gz: 4114acb8fd5e55c822d192ac181155914e5f4eadb87c73b0f3873a3279aa51c7818d5ed79b551121c6ad75753373b44a2ee5f6f150f272ea2d0909671231e2de
|
data/.github/workflows/macos.yml
CHANGED
@@ -1,14 +1,19 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: macos
|
4
4
|
|
5
|
-
on:
|
5
|
+
on:
|
6
|
+
push:
|
7
|
+
branches: [ master ]
|
8
|
+
pull_request:
|
9
|
+
branches: [ '**' ]
|
6
10
|
|
7
11
|
jobs:
|
8
12
|
test-macos:
|
9
13
|
name: Test on Ruby ${{ matrix.ruby }} macOS
|
10
14
|
runs-on: macos-latest
|
11
15
|
strategy:
|
16
|
+
fail-fast: false
|
12
17
|
matrix:
|
13
18
|
ruby: [ '2.6', '2.5', '2.4' ]
|
14
19
|
steps:
|
@@ -20,7 +25,7 @@ jobs:
|
|
20
25
|
architecture: 'x64'
|
21
26
|
- name: Update gems
|
22
27
|
run: |
|
23
|
-
sudo gem install bundler
|
28
|
+
sudo gem install bundler --force
|
24
29
|
bundle install --jobs 4 --retry 3
|
25
30
|
- name: Run specs
|
26
31
|
run: |
|
@@ -1,14 +1,19 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: ubuntu
|
4
4
|
|
5
|
-
on:
|
5
|
+
on:
|
6
|
+
push:
|
7
|
+
branches: [ master ]
|
8
|
+
pull_request:
|
9
|
+
branches: [ '**' ]
|
6
10
|
|
7
11
|
jobs:
|
8
12
|
test-linux:
|
9
13
|
name: Test on Ruby ${{ matrix.ruby }} Ubuntu
|
10
14
|
runs-on: ubuntu-latest
|
11
15
|
strategy:
|
16
|
+
fail-fast: false
|
12
17
|
matrix:
|
13
18
|
ruby: [ '2.6', '2.5', '2.4' ]
|
14
19
|
steps:
|
@@ -20,7 +25,7 @@ jobs:
|
|
20
25
|
architecture: 'x64'
|
21
26
|
- name: Update gems
|
22
27
|
run: |
|
23
|
-
gem install bundler
|
28
|
+
gem install bundler
|
24
29
|
bundle install --jobs 4 --retry 3
|
25
30
|
- name: Run specs
|
26
31
|
run: |
|
@@ -1,14 +1,19 @@
|
|
1
|
-
# Auto-generated
|
2
|
-
#
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
3
|
name: windows
|
4
4
|
|
5
|
-
on:
|
5
|
+
on:
|
6
|
+
push:
|
7
|
+
branches: [ master ]
|
8
|
+
pull_request:
|
9
|
+
branches: [ '**' ]
|
6
10
|
|
7
11
|
jobs:
|
8
12
|
test-windows:
|
9
13
|
name: Test on Ruby ${{ matrix.ruby }} Windows
|
10
14
|
runs-on: windows-latest
|
11
15
|
strategy:
|
16
|
+
fail-fast: false
|
12
17
|
matrix:
|
13
18
|
ruby: [ '2.6', '2.5', '2.4' ]
|
14
19
|
steps:
|
@@ -21,7 +26,7 @@ jobs:
|
|
21
26
|
- name: Update gems
|
22
27
|
shell: pwsh
|
23
28
|
run: |
|
24
|
-
gem install bundler
|
29
|
+
gem install bundler
|
25
30
|
bundle config --local path vendor/bundle
|
26
31
|
bundle update
|
27
32
|
bundle install --jobs 4 --retry 3
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/docs/README.adoc
CHANGED
@@ -18,7 +18,7 @@ The following commands are provided.
|
|
18
18
|
|
19
19
|
[source,console]
|
20
20
|
----
|
21
|
-
$ relaton concatenate Source-Directory Relaton-Collection-File -t TITLE -g ORGANIZATION
|
21
|
+
$ relaton concatenate Source-Directory Relaton-Collection-File -t TITLE -g ORGANIZATION
|
22
22
|
----
|
23
23
|
|
24
24
|
Iterates through all the Relaton files (YAML and XML) in `Source-Directory`, and concatenates them into a Relaton Collection file. The extension of the Collection file can be set using the `Relaton-Collection-File` file name (i.e, if it uses an extension of `yaml`, a Relaton YAML file will be created; if `rxl`, a Relaton XML file will be created, or via the `-x [ext]` (or `--extension`) option.
|
@@ -29,20 +29,16 @@ file), a link to that file is inserted.
|
|
29
29
|
If the `TITLE` or `ORGANIZATION` options are given, they are added to the `Collection-File` output as the
|
30
30
|
title and author of the `Relaton-Collection-File` document.
|
31
31
|
|
32
|
-
If the `-n` or `--new` option given then use the new Relaton YAML format https://github.com/relaton/relaton-bib/blob/master/docs/hash.adoc.
|
33
|
-
|
34
32
|
=== relaton split
|
35
33
|
|
36
34
|
[source,console]
|
37
35
|
----
|
38
|
-
$ relaton split Relaton-Collection-File Relaton-File-Directory -x rxl
|
36
|
+
$ relaton split Relaton-Collection-File Relaton-File-Directory -x rxl
|
39
37
|
----
|
40
38
|
|
41
39
|
Splits a `Relaton-Collection-File` into multiple files in the `Relaton-File-Directory`, and it also
|
42
40
|
suports an additional `-x` or `--extension` options to use different extension.
|
43
41
|
|
44
|
-
If the `-n` or `--new` option given then use the new Relaton YAML format https://github.com/relaton/relaton-bib/blob/master/docs/hash.adoc.
|
45
|
-
|
46
42
|
=== relaton fetch
|
47
43
|
|
48
44
|
[source,console]
|
@@ -146,7 +142,6 @@ Sample HTML output for a bibliographic entry:
|
|
146
142
|
</div>
|
147
143
|
----
|
148
144
|
|
149
|
-
[[relaton-yaml]]
|
150
145
|
=== relaton yaml2xml
|
151
146
|
|
152
147
|
[source,console]
|
@@ -156,67 +151,7 @@ $ relaton yaml2xml YAML -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LI
|
|
156
151
|
|
157
152
|
Convert a Relaton YAML file (`filename.yaml`) into a Relaton XML file (`filename.xml`). If the Relaton YAML file specifies multiple bibliograph items, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton XML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.rxl`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
|
158
153
|
|
159
|
-
|
160
|
-
|
161
|
-
[source,yaml]
|
162
|
-
----
|
163
|
-
htmlstylesheet: ./index-style.css
|
164
|
-
root:
|
165
|
-
title: CalConnect Standards Registry
|
166
|
-
author: "CalConnect: The Calendaring and Scheduling Consortium"
|
167
|
-
items:
|
168
|
-
- technical_committee: TC VCARD
|
169
|
-
docidentifier: 18001
|
170
|
-
doctype: standard
|
171
|
-
title: "Date and time -- Representations for information interchange -- Part 1: Basic rules"
|
172
|
-
stage: Published
|
173
|
-
revdate: 2018-10-17
|
174
|
-
xml: standards/csd-datetime-explict/csd-datetime-explict.xml
|
175
|
-
html: standards/csd-datetime-explict/csd-datetime-explict.html
|
176
|
-
pdf: standards/csd-datetime-explict/csd-datetime-explict.pdf
|
177
|
-
doc: standards/csd-datetime-explict/csd-datetime-explict.doc
|
178
|
-
relaton: standards/csd-datetime-explict/cc-18001.xml
|
179
|
-
- technical_committee: TC PUBLISH
|
180
|
-
docidentifier: 10001
|
181
|
-
doctype: governance
|
182
|
-
title: "Standardization and publication"
|
183
|
-
stage: proposal
|
184
|
-
revdate: 2018-10-17
|
185
|
-
uri: standards/csd-standardization/csd-standardization.xml
|
186
|
-
agency: CalConnect
|
187
|
-
language: en
|
188
|
-
script: Latn
|
189
|
-
edition: 1
|
190
|
-
----
|
191
|
-
|
192
|
-
=== relaton xml2yaml
|
193
|
-
|
194
|
-
[source,console]
|
195
|
-
----
|
196
|
-
$ relaton xml2yaml XML -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LIBRARY
|
197
|
-
----
|
198
|
-
|
199
|
-
Convert a Relaton XML file (`filename.xml` or `filename.rxl`) into a Relaton YAML file (`filename.yaml`). If the Relaton XML file is a collection, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton YAML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.yaml`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
|
200
|
-
|
201
|
-
|
202
|
-
=== relaton yaml2html
|
203
|
-
|
204
|
-
[source,console]
|
205
|
-
----
|
206
|
-
$ relaton yaml2xml <filename.yaml> [<stylesheet>] [<liquid-template-dir>]
|
207
|
-
----
|
208
|
-
|
209
|
-
Render a Relaton YAML file (`filename.yaml`) as an HTML file. The stylesheet and liquid-template-dir directories are as for <<relaton-xml2html,relaton xml2html>>.
|
210
|
-
|
211
|
-
=== relaton yaml2xmlnew
|
212
|
-
|
213
|
-
[source,console]
|
214
|
-
----
|
215
|
-
$ relaton yaml2xmlnew <filename.yaml> -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LIBRARY
|
216
|
-
----
|
217
|
-
|
218
|
-
Convert a Relaton YAML file (`filename.yaml`) in a new format into a Relaton XML file (`filename.xml`). If the Relaton YAML file specifies multiple bibliographic items, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton XML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.rxl`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
|
219
|
-
|
154
|
+
[[relaton-yaml]]
|
220
155
|
A Relaton Collection YAML file contains some initial metadata, and a list of metadata about each bibliographic entry:
|
221
156
|
|
222
157
|
[source,yaml]
|
@@ -253,220 +188,23 @@ root:
|
|
253
188
|
value: 2018-10-25
|
254
189
|
----
|
255
190
|
|
256
|
-
A Relaton YAML file describing an individual bibliographic entry is limited to metadata specific to that entry. Flavor gems have additional fields. The
|
257
|
-
|
258
|
-
[source,yaml]
|
259
|
-
----
|
260
|
-
---
|
261
|
-
id: ISO/TC211
|
262
|
-
title:
|
263
|
-
- type: main
|
264
|
-
content: Geographic information
|
265
|
-
language: en
|
266
|
-
script: Latn
|
267
|
-
format: text/plain
|
268
|
-
- content: Information géographique
|
269
|
-
language: fr
|
270
|
-
script: Latn
|
271
|
-
format: text/plain
|
272
|
-
link:
|
273
|
-
- type: src
|
274
|
-
content: https://www.iso.org/standard/53798.html
|
275
|
-
- type: obp
|
276
|
-
content: https://www.iso.org/obp/ui/#!iso:std:53798:en
|
277
|
-
- type: rss
|
278
|
-
content: https://www.iso.org/contents/data/standard/05/37/53798.detail.rss
|
279
|
-
type: standard
|
280
|
-
docid:
|
281
|
-
id: TC211
|
282
|
-
type: ISO
|
283
|
-
docnumber: '123456'
|
284
|
-
date:
|
285
|
-
- type: issued
|
286
|
-
value: '2014-01-01'
|
287
|
-
- type: published
|
288
|
-
value: '2014-04-01'
|
289
|
-
- type: accessed
|
290
|
-
value: '2015-05-20'
|
291
|
-
contributor:
|
292
|
-
- organization:
|
293
|
-
name: International Organization for Standardization
|
294
|
-
abbreviation: ISO
|
295
|
-
subdivision: division
|
296
|
-
url: www.iso.org
|
297
|
-
role:
|
298
|
-
description: Publisher role
|
299
|
-
type: publisher
|
300
|
-
- person:
|
301
|
-
name:
|
302
|
-
completename:
|
303
|
-
content: A. Bierman
|
304
|
-
language: en
|
305
|
-
affiliation:
|
306
|
-
organization:
|
307
|
-
name: IETF
|
308
|
-
abbreviation: IETF
|
309
|
-
identifier:
|
310
|
-
type: uri
|
311
|
-
id: www.ietf.org
|
312
|
-
contact:
|
313
|
-
- street:
|
314
|
-
- Street
|
315
|
-
city: City
|
316
|
-
state: State
|
317
|
-
country: Country
|
318
|
-
postcode: '123456'
|
319
|
-
- type: phone
|
320
|
-
value: '223322'
|
321
|
-
role: author
|
322
|
-
- organization:
|
323
|
-
name: IETF
|
324
|
-
abbreviation: IETF
|
325
|
-
identifier:
|
326
|
-
type: uri
|
327
|
-
id: www.ietf.org
|
328
|
-
role: publisher
|
329
|
-
- person:
|
330
|
-
name:
|
331
|
-
forename:
|
332
|
-
content: Forename
|
333
|
-
language: en
|
334
|
-
initial:
|
335
|
-
content: A.
|
336
|
-
language: en
|
337
|
-
surname:
|
338
|
-
content: Bierman
|
339
|
-
language: en
|
340
|
-
addition:
|
341
|
-
content: Addition
|
342
|
-
language: en
|
343
|
-
prefix:
|
344
|
-
content: Prefix
|
345
|
-
language: en
|
346
|
-
affiliation:
|
347
|
-
organization:
|
348
|
-
name: IETF
|
349
|
-
abbreviation: IETF
|
350
|
-
description:
|
351
|
-
content: Description
|
352
|
-
language: en
|
353
|
-
identifier:
|
354
|
-
type: uri
|
355
|
-
id: www.person.com
|
356
|
-
contact:
|
357
|
-
- street:
|
358
|
-
- Street
|
359
|
-
city: City
|
360
|
-
state: State
|
361
|
-
country: Country
|
362
|
-
postcode: '123456'
|
363
|
-
- type: phone
|
364
|
-
value: '223322'
|
365
|
-
role: author
|
366
|
-
edition: '1'
|
367
|
-
version:
|
368
|
-
revision_date: '2019-04-01'
|
369
|
-
draft: draft
|
370
|
-
biblionote:
|
371
|
-
content: note
|
372
|
-
type: bibnote
|
373
|
-
language:
|
374
|
-
- en
|
375
|
-
- fr
|
376
|
-
script: Latn
|
377
|
-
abstract:
|
378
|
-
- content: ISO 19115-1:2014 defines the schema required for ...
|
379
|
-
language: en
|
380
|
-
script: Latn
|
381
|
-
format: text/plain
|
382
|
-
- content: L'ISO 19115-1:2014 définit le schéma requis pour ...
|
383
|
-
language: fr
|
384
|
-
script: Latn
|
385
|
-
format: text/plain
|
386
|
-
docstatus:
|
387
|
-
stage: stage
|
388
|
-
substage: substage
|
389
|
-
iteration: final
|
390
|
-
copyright:
|
391
|
-
owner:
|
392
|
-
name: International Organization for Standardization
|
393
|
-
abbreviation: ISO
|
394
|
-
url: www.iso.org
|
395
|
-
from: '2014'
|
396
|
-
to: '2020'
|
397
|
-
relation:
|
398
|
-
- type: updates
|
399
|
-
bibitem:
|
400
|
-
formattedref:
|
401
|
-
content: ISO 19115:2003
|
402
|
-
format: text/plain
|
403
|
-
bib_locality:
|
404
|
-
type: updates
|
405
|
-
reference_from: Reference form
|
406
|
-
- type: updates
|
407
|
-
bibitem:
|
408
|
-
type: standard
|
409
|
-
formattedref:
|
410
|
-
content: ISO 19115:2003/Cor 1:2006
|
411
|
-
format: text/plain
|
412
|
-
series:
|
413
|
-
- type: main
|
414
|
-
title:
|
415
|
-
type: original
|
416
|
-
content: ISO/IEC FDIS 10118-3
|
417
|
-
language: en
|
418
|
-
script: Latn
|
419
|
-
format: text/plain
|
420
|
-
place: Serie's place
|
421
|
-
organization: Serie's organization
|
422
|
-
abbreviation: ABVR
|
423
|
-
from: '2009-02-01'
|
424
|
-
to: '2010-12-20'
|
425
|
-
number: serie1234
|
426
|
-
partnumber: part5678
|
427
|
-
- type: alt
|
428
|
-
formattedref:
|
429
|
-
content: serieref
|
430
|
-
language: en
|
431
|
-
script: Latn
|
432
|
-
format: text/plain
|
433
|
-
medium:
|
434
|
-
form: medium form
|
435
|
-
size: medium size
|
436
|
-
scale: medium scale
|
437
|
-
place: bib place
|
438
|
-
extent:
|
439
|
-
type: section
|
440
|
-
reference_from: Reference from
|
441
|
-
reference_to: Reference to
|
442
|
-
accesslocation:
|
443
|
-
- accesslocation1
|
444
|
-
- accesslocation2
|
445
|
-
classification:
|
446
|
-
value: value
|
447
|
-
type: type
|
448
|
-
validity:
|
449
|
-
begins: 2010-10-10 12:21
|
450
|
-
ends: 2011-02-03 18:30
|
451
|
-
revision: 2011-03-04 09:00
|
452
|
-
fetched: '2019-08-16'
|
453
|
-
----
|
191
|
+
A Relaton YAML file describing an individual bibliographic entry is limited to metadata specific to that entry. Flavor gems have additional fields. The link:https://github.com/relaton/relaton-bib/blob/master/docs/hash.adoc#yaml[Relaton YAML] illustrates the common fields supported by all flavor gems.
|
454
192
|
|
455
|
-
=== relaton
|
193
|
+
=== relaton xml2yaml
|
456
194
|
|
457
195
|
[source,console]
|
458
196
|
----
|
459
|
-
$ relaton
|
197
|
+
$ relaton xml2yaml XML -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LIBRARY
|
460
198
|
----
|
461
199
|
|
462
|
-
Convert a Relaton XML file (`filename.xml` or `filename.rxl`) into a Relaton YAML file (`filename.yaml`)
|
200
|
+
Convert a Relaton XML file (`filename.xml` or `filename.rxl`) into a Relaton YAML file (`filename.yaml`). If the Relaton XML file is a collection, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton YAML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.yaml`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
|
463
201
|
|
464
|
-
=== relaton
|
202
|
+
=== relaton yaml2html
|
465
203
|
|
466
204
|
[source,console]
|
467
205
|
----
|
468
|
-
$ relaton
|
206
|
+
$ relaton yaml2html YAML [<stylesheet>] [<liquid-template-dir>]
|
469
207
|
----
|
470
208
|
|
471
|
-
Render a Relaton YAML file
|
209
|
+
Render a Relaton YAML file (`filename.yaml`) as an HTML file. The `stylesheet` and `liquid-template-dir` directories are as for <<relaton-xml2html,relaton xml2html>>.
|
472
210
|
|
@@ -9,7 +9,7 @@ module Relaton
|
|
9
9
|
items
|
10
10
|
doctype
|
11
11
|
author
|
12
|
-
]
|
12
|
+
].freeze
|
13
13
|
|
14
14
|
attr_accessor *ATTRIBS
|
15
15
|
|
@@ -17,16 +17,14 @@ module Relaton
|
|
17
17
|
self.items = []
|
18
18
|
ATTRIBS.each do |k|
|
19
19
|
value = options[k] || options[k.to_s]
|
20
|
-
|
20
|
+
send("#{k}=", value)
|
21
21
|
end
|
22
|
-
self.items = (
|
22
|
+
self.items = (items || []).reduce([]) do |acc, item|
|
23
23
|
acc << if item.is_a?(::Relaton::Bibcollection) || item.is_a?(::Relaton::Bibdata)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
24
|
+
item
|
25
|
+
else new_bib_item_class(item)
|
26
|
+
end
|
28
27
|
end
|
29
|
-
self
|
30
28
|
end
|
31
29
|
|
32
30
|
# arbitrary number, must sort after all bib items
|
@@ -39,7 +37,7 @@ module Relaton
|
|
39
37
|
author = find_text("./relaton-collection/contributor[role/@type = 'author']/organization/name", source)
|
40
38
|
|
41
39
|
items = find_xpath("./relaton-collection/relation", source)&.map do |item|
|
42
|
-
bibdata = find("./bibdata
|
40
|
+
bibdata = find("./bibdata", item)
|
43
41
|
klass = bibdata ? Bibdata : Bibcollection
|
44
42
|
klass.from_xml(bibdata || item)
|
45
43
|
end
|
@@ -48,16 +46,16 @@ module Relaton
|
|
48
46
|
end
|
49
47
|
|
50
48
|
def new_bib_item_class(options)
|
51
|
-
if options["items"]
|
52
|
-
|
49
|
+
if options.is_a?(Hash) && options["items"]
|
50
|
+
::Relaton::Bibcollection.new(options)
|
53
51
|
else
|
54
|
-
|
52
|
+
::Relaton::Bibdata.new(options)
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
56
|
def items_flattened
|
59
57
|
items.sort_by! do |b|
|
60
|
-
b.
|
58
|
+
b.docnumber
|
61
59
|
end
|
62
60
|
|
63
61
|
items.inject([]) do |acc,item|
|
data/lib/relaton/bibdata.rb
CHANGED
@@ -2,46 +2,34 @@ require "date"
|
|
2
2
|
|
3
3
|
module Relaton
|
4
4
|
class Bibdata
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
contributor_publisher_organization
|
28
|
-
language
|
29
|
-
script
|
30
|
-
edition
|
31
|
-
datetype
|
32
|
-
bib_rxl
|
33
|
-
ref
|
34
|
-
]
|
35
|
-
|
36
|
-
attr_accessor *ATTRIBS
|
37
|
-
|
38
|
-
def initialize(options)
|
39
|
-
options.each_pair do |k,v|
|
40
|
-
send("#{k.to_s}=", v)
|
41
|
-
end
|
42
|
-
self
|
5
|
+
URL_TYPES = %i[uri xml pdf doc html rxl txt]
|
6
|
+
|
7
|
+
attr_reader :bibitem
|
8
|
+
|
9
|
+
def initialize(bibitem)
|
10
|
+
@bibitem = bibitem
|
11
|
+
end
|
12
|
+
|
13
|
+
# def method_missing(method, *args)
|
14
|
+
# %r{(?<m>\w+)=$} =~ method
|
15
|
+
# return unless m && %w[xml pdf doc html rxl txt].include?(m)
|
16
|
+
|
17
|
+
# uri = @bibitem.link.detect { |u| u.type == m }
|
18
|
+
# if uri
|
19
|
+
# uri.content = args[0]
|
20
|
+
# else
|
21
|
+
# @bibitem.link << RelatonBib::TypedUri.new(type: m, content: args[0])
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
|
25
|
+
def docidentifier
|
26
|
+
@bibitem.docidentifier.first&.id
|
43
27
|
end
|
44
28
|
|
29
|
+
# def doctype
|
30
|
+
# @bibitem.type
|
31
|
+
# end
|
32
|
+
|
45
33
|
# From http://gavinmiller.io/2016/creating-a-secure-sanitization-function/
|
46
34
|
FILENAME_BAD_CHARS = [ '/', '\\', '?', '%', '*', ':', '|', '"', '<', '>', '.', ' ' ]
|
47
35
|
|
@@ -58,78 +46,48 @@ module Relaton
|
|
58
46
|
end
|
59
47
|
|
60
48
|
def self.from_xml(source)
|
61
|
-
new(Relaton::
|
49
|
+
new(Relaton::Cli.parse_xml(source))
|
62
50
|
end
|
63
51
|
|
64
52
|
def to_xml(opts = {})
|
65
|
-
|
66
|
-
|
67
|
-
ret = ref ? "<bibitem id= '#{ref}' type='#{doctype}'>\n" : "<bibdata type='#{doctype}'>\n"
|
68
|
-
ret += "<fetched>#{Date.today.to_s}</fetched>\n"
|
69
|
-
ret += "<title>#{title}</title>\n"
|
70
|
-
ret += "<docidentifier>#{docidentifier}</docidentifier>\n" if docidentifier
|
71
|
-
ret += "<uri>#{uri}</uri>\n" if uri
|
72
|
-
ret += "<uri type='xml'>#{xml}</uri>\n" if xml
|
73
|
-
ret += "<uri type='html'>#{html}</uri>\n" if html
|
74
|
-
ret += "<uri type='pdf'>#{pdf}</uri>\n" if pdf
|
75
|
-
ret += "<uri type='doc'>#{doc}</uri>\n" if doc
|
76
|
-
ret += "<uri type='rxl'>#{rxl}</uri>\n" if rxl
|
77
|
-
|
78
|
-
ret += "<language>#{language}</language>\n"
|
79
|
-
ret += "<script>#{script}</script>\n"
|
80
|
-
|
81
|
-
if copyright_from
|
82
|
-
ret += "<copyright>"
|
83
|
-
ret += "<from>#{copyright_from}</from>\n" if copyright_from
|
84
|
-
ret += "<owner><organization><name>#{copyright_owner}</name></organization></owner>\n" if copyright_owner
|
85
|
-
ret += "</copyright>"
|
86
|
-
end
|
53
|
+
options = { bibdata: true, date_format: :full }.merge opts.select { |k,v| k.is_a? Symbol }
|
54
|
+
@bibitem.to_xml nil, **options
|
87
55
|
|
88
|
-
|
89
|
-
ret += "<contributor>\n"
|
90
|
-
ret += "<role type='author'/>\n"
|
91
|
-
ret += "<organization><name>#{contributor_author_organization}</name></organization>\n"
|
92
|
-
ret += "</contributor>\n"
|
93
|
-
end
|
56
|
+
# #datetype = stage&.casecmp("published") == 0 ? "published" : "circulated"
|
94
57
|
|
95
|
-
|
96
|
-
|
97
|
-
ret += "<contributor>\n"
|
98
|
-
ret += "<role type='author'/>\n"
|
99
|
-
ret += "<person><name><completename>#{name}</completename></name></person>\n"
|
100
|
-
ret += "</contributor>\n"
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
if contributor_publisher_role
|
105
|
-
ret += "<contributor>\n"
|
106
|
-
ret += "<role type='publisher'/>\n"
|
107
|
-
ret += "<organization><name>#{contributor_publisher_organization}</name></organization>\n"
|
108
|
-
ret += "</contributor>\n"
|
109
|
-
end
|
110
|
-
|
111
|
-
ret += "<date type='#{datetype}'><on>#{revdate}</on></date>\n" if revdate
|
112
|
-
# ret += "<contributor><role type='author'/><organization><name>#{agency}</name></organization></contributor>" if agency
|
113
|
-
# ret += "<contributor><role type='publisher'/><organization><name>#{agency}</name></organization></contributor>" if agency
|
114
|
-
ret += "<edition>#{edition}</edition>\n" if edition
|
115
|
-
ret += "<language>#{language}</language>\n" if language
|
116
|
-
ret += "<script>#{script}</script>\n" if script
|
117
|
-
ret += "<abstract>#{abstract}</abstract>\n" if abstract
|
118
|
-
ret += "<status>#{stage}</status>\n" if stage
|
119
|
-
ret += "<editorialgroup><technical-committee>#{technical_committee}</technical-committee></editorialgroup>\n" if technical_committee
|
120
|
-
ret += ref ? "</bibitem>\n" : "</bibdata>\n"
|
58
|
+
# ret = ref ? "<bibitem id= '#{ref}' type='#{doctype}'>\n" : "<bibdata type='#{doctype}'>\n"
|
59
|
+
# ret += "<fetched>#{Date.today.to_s}</fetched>\n"
|
121
60
|
end
|
122
61
|
|
123
62
|
def to_h
|
124
|
-
|
125
|
-
value = send
|
126
|
-
|
127
|
-
|
63
|
+
URL_TYPES.reduce(@bibitem.to_hash) do |h, t|
|
64
|
+
value = self.send t
|
65
|
+
h[t.to_s] = value
|
66
|
+
h
|
128
67
|
end
|
129
68
|
end
|
130
69
|
|
131
70
|
def to_yaml
|
132
71
|
to_h.to_yaml
|
133
72
|
end
|
73
|
+
|
74
|
+
def method_missing(meth, *args)
|
75
|
+
if @bibitem.respond_to?(meth)
|
76
|
+
@bibitem.send meth, *args
|
77
|
+
elsif URL_TYPES.include? meth
|
78
|
+
link = @bibitem.link.detect { |l| l.type == meth.to_s || meth == :uri && l.type.nil? }
|
79
|
+
link&.content&.to_s
|
80
|
+
elsif URL_TYPES.include? meth.match(/^\w+(?==)/).to_s.to_sym
|
81
|
+
/^(?<type>\w+)/ =~ meth
|
82
|
+
link = @bibitem.link.detect { |l| l.type == type || type == "uri" && l.type.nil? }
|
83
|
+
if link
|
84
|
+
link.content = args[0]
|
85
|
+
else
|
86
|
+
@bibitem.link << RelatonBib::TypedUri.new(type: type, content: args[0])
|
87
|
+
end
|
88
|
+
else
|
89
|
+
super
|
90
|
+
end
|
91
|
+
end
|
134
92
|
end
|
135
93
|
end
|