relaton-bib 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +1 -1
- data/docs/hash.adoc +298 -34
- data/lib/relaton_bib/bib_item_locality.rb +11 -4
- data/lib/relaton_bib/biblio_note.rb +12 -5
- data/lib/relaton_bib/biblio_version.rb +10 -2
- data/lib/relaton_bib/bibliographic_date.rb +16 -7
- data/lib/relaton_bib/bibliographic_item.rb +44 -7
- data/lib/relaton_bib/classification.rb +7 -0
- data/lib/relaton_bib/contribution_info.rb +17 -0
- data/lib/relaton_bib/contributor.rb +38 -4
- data/lib/relaton_bib/copyright_association.rb +11 -4
- data/lib/relaton_bib/document_identifier.rb +7 -0
- data/lib/relaton_bib/document_relation.rb +7 -0
- data/lib/relaton_bib/document_status.rb +8 -0
- data/lib/relaton_bib/formatted_string.rb +7 -0
- data/lib/relaton_bib/hash_converter.rb +26 -8
- data/lib/relaton_bib/localized_string.rb +12 -6
- data/lib/relaton_bib/medium.rb +9 -0
- data/lib/relaton_bib/organization.rb +17 -3
- data/lib/relaton_bib/person.rb +35 -1
- data/lib/relaton_bib/series.rb +16 -0
- data/lib/relaton_bib/typed_title_string.rb +7 -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 +5 -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: ee06437cee7f0efbacf8d04554136258ad4544f4
|
4
|
+
data.tar.gz: 3608ad874a15aa0a7c1d2d03270dc02a2a308dfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45f05d3a1362dcb45a09c7a04696eb87a48094eaba7314271a519c13c85e83ddbeb85e2c6ccbad8e3f7a064a70c471dc6270684efabce3f2e09374c151fd38ad
|
7
|
+
data.tar.gz: 78315011778a04275ff534780f3138bb3f6e2c2476a6f7e7f1ea3287856664dffa80fe678ed0294494a5bed0d1d331c8c1f700d939ba4a7dad813fd435de3a53
|
data/Gemfile.lock
CHANGED
data/docs/hash.adoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= Relaton YAML
|
2
2
|
|
3
|
+
== YAML
|
4
|
+
|
3
5
|
The following structure is in place for encoding bibitem as YAML objects, and is also used
|
4
6
|
to represent bibliographic entries in Metanorma Asciidoctor. The structure has not yet been
|
5
7
|
generalised to `bibdata/ext`, the flavour specific extensions of relaton.
|
@@ -252,11 +254,14 @@ validity:
|
|
252
254
|
revision: 2011-03-04 09:00
|
253
255
|
....
|
254
256
|
|
257
|
+
== Metanorma structure: nested definition list
|
258
|
+
|
255
259
|
The Metanorma Asciidoctor representation of this hash structure
|
256
260
|
in a bibliography
|
257
261
|
is as a definition list, with nested definition lists for nested structures.
|
258
262
|
Repeating elements in a hash can be realised as ordered or unordered lists.
|
259
|
-
However, given how awkward lists of definition lists are in Asciidoctor
|
263
|
+
However, given how awkward lists of definition lists are in Asciidoctor
|
264
|
+
(with a limitation of three nesting levels),
|
260
265
|
Metanorma Asciidoctor also supports representing repeating elements
|
261
266
|
by repeating the key for that entry.
|
262
267
|
|
@@ -355,20 +360,20 @@ docid::
|
|
355
360
|
docnumber:: 211
|
356
361
|
edition:: 1
|
357
362
|
language::
|
358
|
-
|
359
|
-
|
363
|
+
. en
|
364
|
+
. fr
|
360
365
|
script:: Latn
|
361
366
|
version::
|
362
367
|
revision_date::: 2019-04-01
|
363
368
|
draft::: draft
|
364
369
|
biblionote::
|
365
370
|
type::: bibnote
|
366
|
-
content:::
|
371
|
+
content:::
|
367
372
|
+
|
368
|
-
|
373
|
+
--
|
369
374
|
Mark set a major league
|
370
375
|
home run record in 1998.
|
371
|
-
|
376
|
+
--
|
372
377
|
docstatus::
|
373
378
|
stage::: stage
|
374
379
|
substage::: substage
|
@@ -384,11 +389,11 @@ date::
|
|
384
389
|
type::: accessed
|
385
390
|
value::: 2015-05-20
|
386
391
|
abstract::
|
387
|
-
content:::
|
392
|
+
content:::
|
388
393
|
+
|
389
|
-
|
390
|
-
|
391
|
-
|
394
|
+
--
|
395
|
+
ISO 19115-1:2014 defines the schema required for ...
|
396
|
+
--
|
392
397
|
abstract::
|
393
398
|
content::: L'ISO 19115-1:2014 définit le schéma requis pour ...
|
394
399
|
language::: fr
|
@@ -419,8 +424,8 @@ extent::
|
|
419
424
|
type::: section
|
420
425
|
reference_from::: 7
|
421
426
|
accesslocation::
|
422
|
-
|
423
|
-
|
427
|
+
. accesslocation1
|
428
|
+
. accesslocation2
|
424
429
|
classification::
|
425
430
|
type::: type
|
426
431
|
value::: value
|
@@ -430,12 +435,12 @@ validity::
|
|
430
435
|
|
431
436
|
|
432
437
|
==== Contributor
|
433
|
-
|
438
|
+
organization::
|
434
439
|
name::: International Organization for Standardization
|
435
440
|
url::: www.iso.org
|
436
441
|
abbreviation::: ISO
|
437
442
|
subdivision::: division
|
438
|
-
role::
|
443
|
+
role::
|
439
444
|
type::: publisher
|
440
445
|
description::: Publisher role
|
441
446
|
|
@@ -443,22 +448,25 @@ role::
|
|
443
448
|
person::
|
444
449
|
name:::
|
445
450
|
completename::::
|
446
|
-
|
447
|
-
|
451
|
+
+
|
452
|
+
--
|
453
|
+
content:: A. Bierman
|
454
|
+
language:: en
|
455
|
+
--
|
448
456
|
affiliation:::
|
449
457
|
organization::::
|
450
|
-
name::::: IETF
|
451
|
-
abbreviation::::: IETF
|
452
|
-
identifier:::::
|
453
458
|
+
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
459
|
+
--
|
460
|
+
name:: IETF
|
461
|
+
abbreviation:: IETF
|
462
|
+
identifier::
|
463
|
+
type::: uri
|
464
|
+
id::: www.ietf.org
|
465
|
+
--
|
458
466
|
description:::: Affiliation description
|
459
467
|
contact:::
|
460
468
|
street::::
|
461
|
-
|
469
|
+
. 8 Street St
|
462
470
|
city:::: City
|
463
471
|
postcode:::: 123456
|
464
472
|
country:::: Country
|
@@ -469,7 +477,7 @@ id:: www.ietf.org
|
|
469
477
|
role:: author
|
470
478
|
|
471
479
|
==== Contributor
|
472
|
-
|
480
|
+
organization::
|
473
481
|
name::: IETF
|
474
482
|
abbreviation::: IETF
|
475
483
|
identifier:::
|
@@ -484,13 +492,16 @@ person::
|
|
484
492
|
initial:::: A.
|
485
493
|
surname:::: Bierman
|
486
494
|
affiliation:::
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
495
|
+
+
|
496
|
+
--
|
497
|
+
organization::
|
498
|
+
name::: IETF
|
499
|
+
abbreviation::: IETF
|
500
|
+
description::
|
501
|
+
content::: Affiliation description
|
502
|
+
language::: en
|
503
|
+
script::: Latn
|
504
|
+
--
|
494
505
|
identifier:::
|
495
506
|
type:::: uri
|
496
507
|
id:::: www.person.com
|
@@ -506,8 +517,8 @@ bibitem::
|
|
506
517
|
reference_to:::: 10
|
507
518
|
|
508
519
|
==== Relation
|
509
|
-
type
|
510
|
-
bibitem
|
520
|
+
type:: updates
|
521
|
+
bibitem::
|
511
522
|
type::: standard
|
512
523
|
formattedref::: ISO 19115:2003/Cor 1:2006
|
513
524
|
|
@@ -538,7 +549,260 @@ formattedref::
|
|
538
549
|
script::: Latn
|
539
550
|
....
|
540
551
|
|
552
|
+
== JSON Path style definition lists
|
553
|
+
|
554
|
+
The foregoing structure requires frequent breakouts into open blocks, to deal
|
555
|
+
with the limitation on Asciidoctor nested definition lists. An alternative is to
|
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
|
+
|
558
|
+
[source,asciidoctor]
|
559
|
+
----
|
560
|
+
[%bibitem]
|
561
|
+
=== Rubber latex -- Sampling
|
562
|
+
id:: iso123
|
563
|
+
docid::
|
564
|
+
type::: ISO
|
565
|
+
id::: ISO 123
|
566
|
+
----
|
567
|
+
|
568
|
+
can instead be represented as:
|
569
|
+
|
570
|
+
[source,asciidoctor]
|
571
|
+
----
|
572
|
+
[%bibitem]
|
573
|
+
=== Rubber latex -- Sampling
|
574
|
+
id:: iso123
|
575
|
+
docid.type:: ISO
|
576
|
+
docid.id::: ISO 123
|
577
|
+
----
|
578
|
+
|
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
|
+
|
581
|
+
[source,asciidoctor]
|
582
|
+
----
|
583
|
+
[%bibitem]
|
584
|
+
=== Rubber latex -- Sampling
|
585
|
+
id:: iso123
|
586
|
+
docid::
|
587
|
+
type::: ISO
|
588
|
+
id::: ISO 123
|
589
|
+
docid::
|
590
|
+
type::: ABC
|
591
|
+
id::: 32784
|
592
|
+
type:: standard
|
593
|
+
----
|
594
|
+
|
595
|
+
can instead be represented as:
|
596
|
+
|
597
|
+
[source,asciidoctor]
|
598
|
+
----
|
599
|
+
[%bibitem]
|
600
|
+
=== Rubber latex -- Sampling
|
601
|
+
id:: iso123
|
602
|
+
docid::
|
603
|
+
docid.type:: ISO
|
604
|
+
docid.id::: ISO 123
|
605
|
+
docid::
|
606
|
+
docid.type:: ABC
|
607
|
+
docid.id:: 32784
|
608
|
+
----
|
609
|
+
|
610
|
+
Embedded elements can also repeat:
|
611
|
+
|
612
|
+
[source,asciidoctor]
|
613
|
+
----
|
614
|
+
[%bibitem]
|
615
|
+
...
|
616
|
+
==== Contributor
|
617
|
+
person::
|
618
|
+
contact:::
|
619
|
+
street::::
|
620
|
+
. 8 Street St
|
621
|
+
city:::: City
|
622
|
+
postcode:::: 123456
|
623
|
+
country:::: Country
|
624
|
+
state:::: State
|
625
|
+
contact:::
|
626
|
+
type:::: phone
|
627
|
+
value:::: 223322
|
628
|
+
----
|
541
629
|
|
630
|
+
can instead be represented as:
|
542
631
|
|
632
|
+
[source,asciidoctor]
|
633
|
+
----
|
634
|
+
[%bibitem]
|
635
|
+
...
|
636
|
+
contributor.person.contact::
|
637
|
+
contributor.person.contact.street:: 8 Street St
|
638
|
+
contributor.person.contact.city:: City
|
639
|
+
contributor.person.contact.postcode:: 123456
|
640
|
+
contributor.person.contact.country:: Country
|
641
|
+
contributor.person.contact.state:: State
|
642
|
+
contributor.person.contact::
|
643
|
+
contributor.person.contact.type:: phone
|
644
|
+
contributor.person.contact.value:: 223322
|
645
|
+
----
|
543
646
|
|
647
|
+
The following is Metanorma Asciidoctor markup corresponding to the YAML
|
648
|
+
given above, using JSON Path style definition lists instead of nested definition lists:
|
544
649
|
|
650
|
+
[source,asciidoc]
|
651
|
+
....
|
652
|
+
[[ISO/TC211]]
|
653
|
+
[%bibitem]
|
654
|
+
=== {blank}
|
655
|
+
fetched:: 2019-06-30
|
656
|
+
title::
|
657
|
+
title.type:: main
|
658
|
+
title.content:: Geographic information
|
659
|
+
title::
|
660
|
+
title.type:: subtitle
|
661
|
+
title.content:: Geographic information subtitle
|
662
|
+
title.language:: en
|
663
|
+
title.script:: Latn
|
664
|
+
title.format:: text/plain
|
665
|
+
type:: standard
|
666
|
+
docid::
|
667
|
+
docid.type:: ISO
|
668
|
+
docid.id:: TC211
|
669
|
+
docnumber:: 211
|
670
|
+
edition:: 1
|
671
|
+
language:: en
|
672
|
+
language:: fr
|
673
|
+
script:: Latn
|
674
|
+
version.revision_date:: 2019-04-01
|
675
|
+
version.draft:: draft
|
676
|
+
biblionote.type:: bibnote
|
677
|
+
biblionote.content::
|
678
|
+
+
|
679
|
+
--
|
680
|
+
Mark set a major league
|
681
|
+
home run record in 1998.
|
682
|
+
--
|
683
|
+
docstatus.stage:: stage
|
684
|
+
docstatus.substage:: substage
|
685
|
+
docstatus.iteration:: iteration
|
686
|
+
date::
|
687
|
+
date.type:: issued
|
688
|
+
date.value:: 2014
|
689
|
+
date::
|
690
|
+
date.type:: published
|
691
|
+
date.from:: 2014-04
|
692
|
+
date.to:: 2014-05
|
693
|
+
date::
|
694
|
+
date.type:: accessed
|
695
|
+
date.value:: 2015-05-20
|
696
|
+
abstract::
|
697
|
+
abstract.content::
|
698
|
+
+
|
699
|
+
--
|
700
|
+
ISO 19115-1:2014 defines the schema required for ...
|
701
|
+
--
|
702
|
+
abstract::
|
703
|
+
abstract.content:: L'ISO 19115-1:2014 définit le schéma requis pour ...
|
704
|
+
abstract.language:: fr
|
705
|
+
abstract.script:: Latn
|
706
|
+
abstract.format:: text/plain
|
707
|
+
copyright.owner.name:: International Organization for Standardization
|
708
|
+
copyright.owner.abbreviation:: ISO
|
709
|
+
copyright.owner.url:: www.iso.org
|
710
|
+
copyright.from:: 2014
|
711
|
+
copyright.to:: 2020
|
712
|
+
link::
|
713
|
+
link.type:: src
|
714
|
+
link.content:: https://www.iso.org/standard/53798.html
|
715
|
+
link::
|
716
|
+
link.type:: obp
|
717
|
+
link.content:: https://www.iso.org/obp/ui/#!iso:std:53798:en
|
718
|
+
link::
|
719
|
+
link.type:: rss
|
720
|
+
link.content:: https://www.iso.org/contents/data/standard/05/37/53798.detail.rss
|
721
|
+
medium::
|
722
|
+
medium.form:: medium form
|
723
|
+
medium.size:: medium size
|
724
|
+
medium.scale:: medium scale
|
725
|
+
place:: bib place
|
726
|
+
extent.type:: section
|
727
|
+
extent.reference_from:: 7
|
728
|
+
accesslocation:: accesslocation1
|
729
|
+
accesslocation:: accesslocation2
|
730
|
+
classification.type:: type
|
731
|
+
classification.value:: value
|
732
|
+
validity.begins:: 2010-10-10 12:21
|
733
|
+
validity.ends:: 2011-02-03 18:30
|
734
|
+
contributor::
|
735
|
+
contributor.organization.name:: International Organization for Standardization
|
736
|
+
contributor.organization.url:: www.iso.org
|
737
|
+
contributor.organization.abbreviation:: ISO
|
738
|
+
contributor.organization.subdivision:: division
|
739
|
+
contributor.role.type:: publisher
|
740
|
+
contributor.role.description:: Publisher role
|
741
|
+
contributor::
|
742
|
+
contributor.person.name.completename.content:: A. Bierman
|
743
|
+
contributor.person.name.completename.language:: en
|
744
|
+
contributor.person.affiliation.organization.name:: IETF
|
745
|
+
contributor.person.affiliation.organization.abbreviation:: IETF
|
746
|
+
contributor.person.affiliation.organization.identifier.type:: uri
|
747
|
+
contributor.person.affiliation.organization.identifier.id:: www.ietf.org
|
748
|
+
contributor.person.affiliation.description:: Affiliation description
|
749
|
+
contributor.person.contact::
|
750
|
+
contributor.person.contact.street:: 8 Street St
|
751
|
+
contributor.person.contact.city:: City
|
752
|
+
contributor.person.contact.postcode:: 123456
|
753
|
+
contributor.person.contact.country:: Country
|
754
|
+
contributor.person.contact.state:: State
|
755
|
+
contributor.person.contact::
|
756
|
+
contributor.person.contact.type:: phone
|
757
|
+
contributor.person.contact.value:: 223322
|
758
|
+
contributor.role:: author
|
759
|
+
contributor::
|
760
|
+
contributor.organization.name:: IETF
|
761
|
+
contributor.organization.abbreviation:: IETF
|
762
|
+
contributor.organization.identifier.type:: uri
|
763
|
+
contributor.organization.identifier.id:: www.ietf.org
|
764
|
+
contributor.role:: publisher
|
765
|
+
contributor::
|
766
|
+
contributor.person.name.language:: en
|
767
|
+
contributor.person.name.initial:: A.
|
768
|
+
contributor.person.name.surname:: Bierman
|
769
|
+
contributor.person.affiliation.organization.name:: IETF
|
770
|
+
contributor.person.affiliation.organization.abbreviation:: IETF
|
771
|
+
contributor.person.affiliation.description.content:: Affiliation description
|
772
|
+
contributor.person.affiliation.description.language:: en
|
773
|
+
contributor.person.affiliation.description.script:: Latn
|
774
|
+
contributor.person.identifier.type:: uri
|
775
|
+
contributor.person.identifier.id:: www.person.com
|
776
|
+
contributor.role:: author
|
777
|
+
relation::
|
778
|
+
relation.type:: updates
|
779
|
+
relation.bibitem.formattedref:: ISO 19115:2003
|
780
|
+
relation.bibitem.bib_locality.type:: page
|
781
|
+
relation.bibitem.bib_locality.reference_from:: 7
|
782
|
+
relation.bibitem.bib_locality.reference_to:: 10
|
783
|
+
relation::
|
784
|
+
relation.type:: updates
|
785
|
+
relation.bibitem.type:: standard
|
786
|
+
relation.bibitem.formattedref:: ISO 19115:2003/Cor 1:2006
|
787
|
+
series::
|
788
|
+
series.type:: main
|
789
|
+
series.title.type:: original
|
790
|
+
series.title.content:: ISO/IEC FDIS 10118-3
|
791
|
+
series.title.language:: en
|
792
|
+
series.title.script:: Latn
|
793
|
+
series.title.format:: text/plain
|
794
|
+
series.place:: Serie's place
|
795
|
+
series.organization:: Serie's organization
|
796
|
+
series.abbreviation.content:: ABVR
|
797
|
+
series.abbreviation.language:: en
|
798
|
+
series.abbreviation.script:: Latn
|
799
|
+
series.from:: 2009-02-01
|
800
|
+
series.to:: 2010-12-20
|
801
|
+
series.number:: serie1234
|
802
|
+
series.partnumber:: part5678
|
803
|
+
series::
|
804
|
+
series.type:: alt
|
805
|
+
series.formattedref.content:: serieref
|
806
|
+
series.formattedref.language:: en
|
807
|
+
series.formattedref.script:: Latn
|
808
|
+
----
|
@@ -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
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,12 @@ 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
|
+
hash[:type] = type if type
|
27
|
+
hash
|
28
|
+
end
|
22
29
|
end
|
23
30
|
end
|
@@ -2,13 +2,13 @@ module RelatonBib
|
|
2
2
|
# Version
|
3
3
|
class BibliographicItem
|
4
4
|
class Version
|
5
|
-
# @return [String]
|
5
|
+
# @return [String, NilClass]
|
6
6
|
attr_reader :revision_date
|
7
7
|
|
8
8
|
# @return [Array<String>]
|
9
9
|
attr_reader :draft
|
10
10
|
|
11
|
-
# @param revision_date [String]
|
11
|
+
# @param revision_date [String, NilClass]
|
12
12
|
# @param draft [Array<String>]
|
13
13
|
def initialize(revision_date = nil, draft = [])
|
14
14
|
@revision_date = revision_date
|
@@ -22,6 +22,14 @@ module RelatonBib
|
|
22
22
|
draft.each { |d| builder.draft d }
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
# @return [Hash]
|
27
|
+
def to_hash
|
28
|
+
hash = {}
|
29
|
+
hash[:revision_date] = revision_date if revision_date
|
30
|
+
hash[:draft] = draft if draft&.any?
|
31
|
+
hash
|
32
|
+
end
|
25
33
|
end
|
26
34
|
end
|
27
35
|
end
|
@@ -12,13 +12,13 @@ module RelatonBib
|
|
12
12
|
# @return [String]
|
13
13
|
attr_reader :type
|
14
14
|
|
15
|
-
# @return [
|
15
|
+
# @return [Date]
|
16
16
|
attr_reader :from
|
17
17
|
|
18
|
-
# @return [
|
18
|
+
# @return [Date]
|
19
19
|
attr_reader :to
|
20
20
|
|
21
|
-
# @return [
|
21
|
+
# @return [Date]
|
22
22
|
attr_reader :on
|
23
23
|
|
24
24
|
# @param type [String] "published", "accessed", "created", "activated"
|
@@ -52,6 +52,15 @@ module RelatonBib
|
|
52
52
|
end
|
53
53
|
# rubocop:enable Metrics/AbcSize
|
54
54
|
|
55
|
+
# @return [Hash]
|
56
|
+
def to_hash
|
57
|
+
hash = { type: type }
|
58
|
+
hash[:value] = on.to_s if on
|
59
|
+
hash[:from] = from.to_s if from
|
60
|
+
hash[:to] = to.to_s if to
|
61
|
+
hash
|
62
|
+
end
|
63
|
+
|
55
64
|
private
|
56
65
|
|
57
66
|
# Formats date
|
@@ -67,16 +76,16 @@ module RelatonBib
|
|
67
76
|
end
|
68
77
|
|
69
78
|
# @params date [String] 'yyyy', 'yyyy-mm', 'yyyy-mm-dd
|
70
|
-
# @return [
|
79
|
+
# @return [Date]
|
71
80
|
def parse_date(date)
|
72
81
|
return unless date
|
73
82
|
|
74
83
|
if date =~ /^\d{4}$/
|
75
|
-
|
84
|
+
Date.strptime date, "%Y"
|
76
85
|
elsif date =~ /^\d{4}-\d{2}$/
|
77
|
-
|
86
|
+
Date.strptime date, "%Y-%m"
|
78
87
|
elsif date =~ /\d{4}-\d{2}-\d{2}$/
|
79
|
-
|
88
|
+
Date.strptime date, "%Y-%m-%d"
|
80
89
|
end
|
81
90
|
end
|
82
91
|
end
|
@@ -32,7 +32,7 @@ module RelatonBib
|
|
32
32
|
inbook incollection inproceedings journal
|
33
33
|
].freeze
|
34
34
|
|
35
|
-
# @return [String]
|
35
|
+
# @return [String, NilClass]
|
36
36
|
attr_reader :id
|
37
37
|
|
38
38
|
# @return [Array<RelatonBib::TypedTitleString>]
|
@@ -41,13 +41,13 @@ module RelatonBib
|
|
41
41
|
# @return [Array<RelatonBib::TypedUri>]
|
42
42
|
attr_reader :link
|
43
43
|
|
44
|
-
# @return [String]
|
44
|
+
# @return [String, NilClass]
|
45
45
|
attr_reader :type
|
46
46
|
|
47
47
|
# @return [Array<RelatonBib::DocumentIdentifier>]
|
48
48
|
attr_reader :docidentifier
|
49
49
|
|
50
|
-
# @return [String] docnumber
|
50
|
+
# @return [String, NilClass] docnumber
|
51
51
|
attr_reader :docnumber
|
52
52
|
|
53
53
|
# @return [Array<RelatonBib::BibliographicDate>]
|
@@ -59,10 +59,10 @@ module RelatonBib
|
|
59
59
|
# @return [String, NillClass]
|
60
60
|
attr_reader :edition
|
61
61
|
|
62
|
-
# @return [RelatonBib::BibliongraphicItem::Version]
|
62
|
+
# @return [RelatonBib::BibliongraphicItem::Version, NilClass]
|
63
63
|
attr_reader :version
|
64
64
|
|
65
|
-
# @return [Array<RelatonBib::BiblioNote
|
65
|
+
# @return [Array<RelatonBib::BiblioNote>]
|
66
66
|
attr_reader :biblionote
|
67
67
|
|
68
68
|
# @return [Array<String>] language Iso639 code
|
@@ -71,7 +71,7 @@ module RelatonBib
|
|
71
71
|
# @return [Array<String>] script Iso15924 code
|
72
72
|
attr_reader :script
|
73
73
|
|
74
|
-
# @return [RelatonBib::FormattedRef]
|
74
|
+
# @return [RelatonBib::FormattedRef, NilClass]
|
75
75
|
attr_reader :formattedref
|
76
76
|
|
77
77
|
# @!attribute [r] abstract
|
@@ -80,7 +80,7 @@ module RelatonBib
|
|
80
80
|
# @return [RelatonBib::DocumentStatus, NilClass]
|
81
81
|
attr_reader :status
|
82
82
|
|
83
|
-
# @return [RelatonBib::CopyrightAssociation]
|
83
|
+
# @return [RelatonBib::CopyrightAssociation, NilClass]
|
84
84
|
attr_reader :copyright
|
85
85
|
|
86
86
|
# @return [RelatonBib::DocRelationCollection]
|
@@ -134,6 +134,11 @@ module RelatonBib
|
|
134
134
|
# @param validity [RelatonBib:Validity, NilClass]
|
135
135
|
# @param fetched [Date, NilClass] default nil
|
136
136
|
#
|
137
|
+
# @param copyright [Hash, RelatonBib::CopyrightAssociation, NilClass]
|
138
|
+
# @option copyright [Hash, RelatonBib::ContributionInfo] :owner
|
139
|
+
# @option copyright [String] :form
|
140
|
+
# @option copyright [String, NilClass] :to
|
141
|
+
#
|
137
142
|
# @param date [Array<Hash>]
|
138
143
|
# @option date [String] :type
|
139
144
|
# @option date [String] :from
|
@@ -265,6 +270,38 @@ module RelatonBib
|
|
265
270
|
end
|
266
271
|
end
|
267
272
|
|
273
|
+
# @return [Hash]
|
274
|
+
def to_hash
|
275
|
+
hash = {}
|
276
|
+
hash[:id] = id if id
|
277
|
+
hash[:title] = title.map(&:to_hash) if title&.any?
|
278
|
+
hash[:link] = link.map(&:to_hash) if link&.any?
|
279
|
+
hash[:type] = type if type
|
280
|
+
hash[:docid] = docidentifier.map(&:to_hash) if docidentifier&.any?
|
281
|
+
hash[:docnumber] = docnumber if docnumber
|
282
|
+
hash[:date] = date.map(&:to_hash) if date&.any?
|
283
|
+
hash[:contributor] = contributor.map(&:to_hash) if contributor&.any?
|
284
|
+
hash[:edition] = edition if edition
|
285
|
+
hash[:version] = version.to_hash if version
|
286
|
+
hash[:biblionote] = biblionote.map(&:to_hash) if biblionote&.any?
|
287
|
+
hash[:language] = language if language&.any?
|
288
|
+
hash[:script] = script if script&.any?
|
289
|
+
hash[:formattedref] = formattedref.to_hash if formattedref
|
290
|
+
hash[:abstract] = abstract.map(&:to_hash) if abstract&.any?
|
291
|
+
hash[:docstatus] = status.to_hash if status
|
292
|
+
hash[:copyright] = copyright.to_hash if copyright
|
293
|
+
hash[:relation] = relation.map(&:to_hash) if relation&.any?
|
294
|
+
hash[:series] = series.map(&:to_hash) if series&.any?
|
295
|
+
hash[:medium] = medium.to_hash if medium
|
296
|
+
hash[:place] = place if place&.any?
|
297
|
+
hash[:extent] = extent.map(&:to_hash) if extent&.any?
|
298
|
+
hash[:accesslocation] = accesslocation if accesslocation&.any?
|
299
|
+
hash[:classification] = classification.to_hash if classification
|
300
|
+
hash[:validity] = validity.to_hash if validity
|
301
|
+
hash[:fetched] = fetched.to_s if fetched
|
302
|
+
hash
|
303
|
+
end
|
304
|
+
|
268
305
|
private
|
269
306
|
|
270
307
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
@@ -36,6 +36,15 @@ module RelatonBib
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
40
|
+
# @return [Array]
|
41
|
+
def to_hash
|
42
|
+
if description&.any?
|
43
|
+
[type, description.map(&:content)] if type
|
44
|
+
else
|
45
|
+
type if type
|
46
|
+
end
|
47
|
+
end
|
39
48
|
end
|
40
49
|
|
41
50
|
# Contribution info.
|
@@ -54,8 +63,16 @@ module RelatonBib
|
|
54
63
|
@role = role.map { |r| ContributorRole.new(**r) }
|
55
64
|
end
|
56
65
|
|
66
|
+
# @param builder [Nokogiri::XML::Builder]
|
57
67
|
def to_xml(builder)
|
58
68
|
entity.to_xml builder
|
59
69
|
end
|
70
|
+
|
71
|
+
# @return [Hash]
|
72
|
+
def to_hash
|
73
|
+
hash = entity.to_hash
|
74
|
+
hash[:role] = role.map(&:to_hash) if role&.any?
|
75
|
+
hash
|
76
|
+
end
|
60
77
|
end
|
61
78
|
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,16 @@ 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
|
-
# @return [RelatonBib::LocalizedString]
|
86
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
71
87
|
attr_reader :name
|
72
88
|
|
73
89
|
# @return [Array<RelatonBib::FormattedString>]
|
@@ -77,8 +93,10 @@ module RelatonBib
|
|
77
93
|
attr_reader :organization
|
78
94
|
|
79
95
|
# @param organization [RelatonBib::Organization]
|
96
|
+
# @param name [RelatonBib::LocalizedString, NilClass]
|
80
97
|
# @param description [Array<RelatonBib::FormattedString>]
|
81
|
-
def initialize(organization, description
|
98
|
+
def initialize(organization:, name: nil, description: [])
|
99
|
+
@name = name
|
82
100
|
@organization = organization
|
83
101
|
@description = description
|
84
102
|
end
|
@@ -91,6 +109,14 @@ module RelatonBib
|
|
91
109
|
organization.to_xml builder
|
92
110
|
end
|
93
111
|
end
|
112
|
+
|
113
|
+
# @return [Hash]
|
114
|
+
def to_hash
|
115
|
+
hash = organization.to_hash
|
116
|
+
hash[:name] = name.to_hash if name
|
117
|
+
hash[:description] = description.map(&:to_hash) if description&.any?
|
118
|
+
hash
|
119
|
+
end
|
94
120
|
end
|
95
121
|
|
96
122
|
# Contributor.
|
@@ -98,11 +124,11 @@ module RelatonBib
|
|
98
124
|
# @return [URI]
|
99
125
|
attr_reader :uri
|
100
126
|
|
101
|
-
# @return [Array<RelatonBib::Address, RelatonBib::
|
127
|
+
# @return [Array<RelatonBib::Address, RelatonBib::Contact>]
|
102
128
|
attr_reader :contact
|
103
129
|
|
104
130
|
# @param url [String]
|
105
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
131
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
106
132
|
def initialize(url: nil, contact: [])
|
107
133
|
@uri = URI url if url
|
108
134
|
@contact = contact
|
@@ -118,5 +144,13 @@ module RelatonBib
|
|
118
144
|
def to_xml(builder)
|
119
145
|
contact.each { |contact| contact.to_xml builder }
|
120
146
|
end
|
147
|
+
|
148
|
+
# @return [Hash]
|
149
|
+
def to_hash
|
150
|
+
hash = {}
|
151
|
+
hash[:url] = uri.to_s if uri
|
152
|
+
hash[:contact] = contact.map(&:to_hash) if contact&.any?
|
153
|
+
hash
|
154
|
+
end
|
121
155
|
end
|
122
156
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module RelatonBib
|
2
2
|
# Copyright association.
|
3
3
|
class CopyrightAssociation
|
4
|
-
# @return [
|
4
|
+
# @return [Date]
|
5
5
|
attr_reader :from
|
6
6
|
|
7
|
-
# @return [
|
7
|
+
# @return [Date, NilClass]
|
8
8
|
attr_reader :to
|
9
9
|
|
10
10
|
# @return [RelatonBib::ContributionInfo]
|
@@ -22,8 +22,8 @@ module RelatonBib
|
|
22
22
|
else owner
|
23
23
|
end
|
24
24
|
|
25
|
-
@from =
|
26
|
-
@to =
|
25
|
+
@from = Date.strptime(from, "%Y") unless from.empty?
|
26
|
+
@to = Date.strptime(to, "%Y") unless to.to_s.empty?
|
27
27
|
end
|
28
28
|
|
29
29
|
# @param builder [Nokogiri::XML::Builder]
|
@@ -34,5 +34,12 @@ module RelatonBib
|
|
34
34
|
builder.owner { owner.to_xml builder }
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
# @return [Hash]
|
39
|
+
def to_hash
|
40
|
+
hash = { owner: owner.to_hash[:organization], from: from.to_s }
|
41
|
+
hash[:to] = to.to_s if to
|
42
|
+
hash
|
43
|
+
end
|
37
44
|
end
|
38
45
|
end
|
@@ -32,5 +32,13 @@ module RelatonBib
|
|
32
32
|
builder.iteration iteration unless iteration.to_s.empty?
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
# @return [Hash]
|
37
|
+
def to_hash
|
38
|
+
hash = { stage: stage }
|
39
|
+
hash[:substage] = substage if substage
|
40
|
+
hash[:iteration] = iteration if iteration
|
41
|
+
hash
|
42
|
+
end
|
35
43
|
end
|
36
44
|
end
|
@@ -198,7 +198,9 @@ module RelatonBib
|
|
198
198
|
{ content: d })
|
199
199
|
end
|
200
200
|
Affilation.new(
|
201
|
-
Organization.new(org_hash_to_bib(a[:organization])),
|
201
|
+
organization: Organization.new(org_hash_to_bib(a[:organization])),
|
202
|
+
description: a[:description]
|
203
|
+
)
|
202
204
|
end
|
203
205
|
end
|
204
206
|
|
@@ -215,6 +217,7 @@ module RelatonBib
|
|
215
217
|
|
216
218
|
def relations_hash_to_bib(ret)
|
217
219
|
return unless ret[:relation]
|
220
|
+
|
218
221
|
ret[:relation] = array(ret[:relation])
|
219
222
|
ret[:relation]&.each_with_index do |r, i|
|
220
223
|
relation_bibitem_hash_to_bib(ret, r, i)
|
@@ -222,15 +225,24 @@ module RelatonBib
|
|
222
225
|
end
|
223
226
|
end
|
224
227
|
|
228
|
+
# @param ret [Hash]
|
229
|
+
# @param r [Hash] relation
|
230
|
+
# @param i [Integr] index of relation
|
225
231
|
def relation_bibitem_hash_to_bib(ret, r, i)
|
226
|
-
if r[:bibitem]
|
227
|
-
|
232
|
+
if r[:bibitem]
|
233
|
+
ret[:relation][i][:bibitem] = bib_item(hash_to_bib(r[:bibitem], true))
|
228
234
|
else
|
229
235
|
warn "bibitem missing: #{r}"
|
230
236
|
ret[:relation][i][:bibitem] = nil
|
231
237
|
end
|
232
238
|
end
|
233
239
|
|
240
|
+
# @param item [Hash]
|
241
|
+
# @retirn [RelatonBib::BibliographicItem]
|
242
|
+
def bib_item(item)
|
243
|
+
BibliographicItem.new(item)
|
244
|
+
end
|
245
|
+
|
234
246
|
def relation_biblocality_hash_to_bib(ret, r, i)
|
235
247
|
ret[:relation][i][:bib_locality] =
|
236
248
|
array(r[:bib_locality])&.map do |bl|
|
@@ -244,7 +256,7 @@ module RelatonBib
|
|
244
256
|
s[:formattedref] and s[:formattedref] = formattedref(s[:formattedref])
|
245
257
|
if s[:title]
|
246
258
|
s[:title] = { content: s[:title] } unless s.is_a?(Hash)
|
247
|
-
s[:title] =
|
259
|
+
s[:title] = typed_title_strig(s[:title])
|
248
260
|
end
|
249
261
|
s[:abbreviation] and
|
250
262
|
s[:abbreviation] = localizedstring(s[:abbreviation])
|
@@ -252,15 +264,21 @@ module RelatonBib
|
|
252
264
|
end
|
253
265
|
end
|
254
266
|
|
267
|
+
# @param title [Hash]
|
268
|
+
# @return [RelatonBib::TypedTitleString]
|
269
|
+
def typed_title_strig(title)
|
270
|
+
TypedTitleString.new title
|
271
|
+
end
|
272
|
+
|
255
273
|
def medium_hash_to_bib(ret)
|
256
274
|
ret[:medium] and ret[:medium] = Medium.new(ret[:medium])
|
257
275
|
end
|
258
276
|
|
259
277
|
def classification_hash_to_bib(ret)
|
260
|
-
#ret[:classification] = [ret[:classification]] unless ret[:classification].is_a?(Array)
|
261
|
-
#ret[:classification]&.each_with_index do |c, i|
|
262
|
-
#ret[:classification][i] = RelatonBib::Classification.new(c)
|
263
|
-
#end
|
278
|
+
# ret[:classification] = [ret[:classification]] unless ret[:classification].is_a?(Array)
|
279
|
+
# ret[:classification]&.each_with_index do |c, i|
|
280
|
+
# ret[:classification][i] = RelatonBib::Classification.new(c)
|
281
|
+
# end
|
264
282
|
ret[:classification] and
|
265
283
|
ret[:classification] = Classification.new(ret[:classification])
|
266
284
|
end
|
@@ -16,10 +16,8 @@ module RelatonBib
|
|
16
16
|
# @param language [String] language code Iso639
|
17
17
|
# @param script [String] script code Iso15924
|
18
18
|
def initialize(content, language = nil, script = nil)
|
19
|
-
@language = []
|
20
|
-
@
|
21
|
-
@script = []
|
22
|
-
@script << script if script
|
19
|
+
@language = language.is_a?(String) ? [language] : language
|
20
|
+
@script = script.is_a?(String) ? [script] : script
|
23
21
|
@content = content
|
24
22
|
end
|
25
23
|
|
@@ -37,9 +35,17 @@ module RelatonBib
|
|
37
35
|
def to_xml(builder)
|
38
36
|
return unless content
|
39
37
|
|
40
|
-
builder.parent["language"] = language.join(",") if language
|
41
|
-
builder.parent["script"] = script.join(",") if script
|
38
|
+
builder.parent["language"] = language.join(",") if language&.any?
|
39
|
+
builder.parent["script"] = script.join(",") if script&.any?
|
42
40
|
builder.text content
|
43
41
|
end
|
42
|
+
|
43
|
+
# @return [Hash]
|
44
|
+
def to_hash
|
45
|
+
hash = { content: content }
|
46
|
+
hash[:language] = language if language&.any?
|
47
|
+
hash[:script] = script if script&.any?
|
48
|
+
hash
|
49
|
+
end
|
44
50
|
end
|
45
51
|
end
|
data/lib/relaton_bib/medium.rb
CHANGED
@@ -34,6 +34,11 @@ module RelatonBib
|
|
34
34
|
def to_xml(builder)
|
35
35
|
builder.identifier(value, type: type)
|
36
36
|
end
|
37
|
+
|
38
|
+
# @return [Hash]
|
39
|
+
def to_hash
|
40
|
+
{ type: type, id: value }
|
41
|
+
end
|
37
42
|
end
|
38
43
|
|
39
44
|
# Organization.
|
@@ -41,10 +46,10 @@ module RelatonBib
|
|
41
46
|
# @return [Array<RelatonBib::LocalizedString>]
|
42
47
|
attr_reader :name
|
43
48
|
|
44
|
-
# @return [RelatonBib::LocalizedString]
|
49
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
45
50
|
attr_reader :abbreviation
|
46
51
|
|
47
|
-
# @return [RelatonBib::LocalizedString]
|
52
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
48
53
|
attr_reader :subdivision
|
49
54
|
|
50
55
|
# @return [Array<RelatonBib::OrgIdentifier>]
|
@@ -61,7 +66,7 @@ module RelatonBib
|
|
61
66
|
# @param subdivision [RelatoBib::LocalizedStrig, String]
|
62
67
|
# @param url [String]
|
63
68
|
# @param identifier [Array<RelatonBib::OrgIdentifier>]
|
64
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
69
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
65
70
|
def initialize(**args)
|
66
71
|
raise ArgumentError, "missing keyword: name" unless args[:name]
|
67
72
|
|
@@ -101,5 +106,14 @@ module RelatonBib
|
|
101
106
|
super
|
102
107
|
end
|
103
108
|
end
|
109
|
+
|
110
|
+
# @return [Hash]
|
111
|
+
def to_hash
|
112
|
+
hash = { name: name.map(&:to_hash) }
|
113
|
+
hash[:abbreviation] = abbreviation.to_hash if abbreviation
|
114
|
+
hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
|
115
|
+
hash[:subdivision] = subdivision.to_hash if subdivision
|
116
|
+
{ organization: hash.merge(super) }
|
117
|
+
end
|
104
118
|
end
|
105
119
|
end
|
data/lib/relaton_bib/person.rb
CHANGED
@@ -56,6 +56,27 @@ module RelatonBib
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
# @return [Hash]
|
61
|
+
def to_hash
|
62
|
+
hash = {}
|
63
|
+
hash[:forename] = forename.map(&:to_hash) if forename&.any?
|
64
|
+
hash[:initial] = initial.map(&:to_hash) if initial&.any?
|
65
|
+
hash[:surname] = surname.to_hash if surname
|
66
|
+
hash[:addition] = addition.map(&:to_hash) if addition&.any?
|
67
|
+
hash[:prefix] = prefix.map(&:to_hash) if prefix&.any?
|
68
|
+
hash[:completename] = completename.to_hash if completename
|
69
|
+
hash
|
70
|
+
# instance_variables.reduce({}) do |hash, var|
|
71
|
+
# val = instance_variable_get var
|
72
|
+
# if val || val.is_a?(Array) && val.any?
|
73
|
+
# key = var.to_s.sub("@", "").to_sym
|
74
|
+
# hash.merge key => val
|
75
|
+
# else
|
76
|
+
# hash
|
77
|
+
# end
|
78
|
+
# end
|
79
|
+
end
|
59
80
|
end
|
60
81
|
|
61
82
|
# Person identifier type.
|
@@ -94,6 +115,11 @@ module RelatonBib
|
|
94
115
|
def to_xml(builder)
|
95
116
|
builder.identifier value, type: type
|
96
117
|
end
|
118
|
+
|
119
|
+
# @return [Hash]
|
120
|
+
def to_hash
|
121
|
+
{ type: type, id: value }
|
122
|
+
end
|
97
123
|
end
|
98
124
|
|
99
125
|
# Person class.
|
@@ -109,7 +135,7 @@ module RelatonBib
|
|
109
135
|
|
110
136
|
# @param name [RelatonBib::FullName]
|
111
137
|
# @param affiliation [Array<RelatonBib::Affiliation>]
|
112
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
138
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
113
139
|
# @param identifier [Array<RelatonBib::PersonIdentifier>]
|
114
140
|
def initialize(name:, affiliation: [], contact: [], identifier: [])
|
115
141
|
super(contact: contact)
|
@@ -127,5 +153,13 @@ module RelatonBib
|
|
127
153
|
contact.each { |contact| contact.to_xml builder }
|
128
154
|
end
|
129
155
|
end
|
156
|
+
|
157
|
+
# @return [Hash]
|
158
|
+
def to_hash
|
159
|
+
hash = { name: name.to_hash }
|
160
|
+
hash[:affiliation] = affiliation.map(&:to_hash) if affiliation&.any?
|
161
|
+
hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
|
162
|
+
{ person: hash.merge(super) }
|
163
|
+
end
|
130
164
|
end
|
131
165
|
end
|
data/lib/relaton_bib/series.rb
CHANGED
@@ -93,5 +93,21 @@ module RelatonBib
|
|
93
93
|
end
|
94
94
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
95
95
|
# rubocop:enable Metrics/PerceivedComplexity
|
96
|
+
|
97
|
+
# @return [Hash]
|
98
|
+
def to_hash
|
99
|
+
hash = {}
|
100
|
+
hash[:type] = type if type
|
101
|
+
hash[:formattedref] = formattedref.to_hash if formattedref
|
102
|
+
hash[:title] = title.to_hash if title
|
103
|
+
hash[:place] = place if place
|
104
|
+
hash[:organization] = organization if organization
|
105
|
+
hash[:abbreviation] = abbreviation.to_hash if abbreviation
|
106
|
+
hash[:from] = from if from
|
107
|
+
hash[:to] = to if to
|
108
|
+
hash[:number] = number if number
|
109
|
+
hash[:partnumber] = partnumber if partnumber
|
110
|
+
hash
|
111
|
+
end
|
96
112
|
end
|
97
113
|
end
|
@@ -15,8 +15,14 @@ module RelatonBib
|
|
15
15
|
@content = Addressable::URI.parse content if content
|
16
16
|
end
|
17
17
|
|
18
|
+
# @param builder [Nokogiri::XML::Builder]
|
18
19
|
def to_xml(builder)
|
19
20
|
builder.uri(content.to_s, type: type)
|
20
21
|
end
|
22
|
+
|
23
|
+
# @return [Hash]
|
24
|
+
def to_hash
|
25
|
+
{ type: type, content: content.to_s }
|
26
|
+
end
|
21
27
|
end
|
22
28
|
end
|
data/lib/relaton_bib/validity.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module RelatonBib
|
2
2
|
class Validity
|
3
|
+
FORMAT = "%Y-%m-%d %H:%M"
|
4
|
+
|
3
5
|
# @return [Time, NilClass]
|
4
6
|
attr_reader :begins
|
5
7
|
|
@@ -20,12 +22,20 @@ module RelatonBib
|
|
20
22
|
|
21
23
|
# @param [Nokogiri::XML::Builder]
|
22
24
|
def to_xml(builder)
|
23
|
-
format = "%Y-%m-%d %H:%M"
|
24
25
|
builder.validity do
|
25
|
-
builder.validityBegins begins.strftime(
|
26
|
-
builder.validityEnds ends.strftime(
|
27
|
-
builder.validityRevision revision.strftime(
|
26
|
+
builder.validityBegins begins.strftime(FORMAT) if begins
|
27
|
+
builder.validityEnds ends.strftime(FORMAT) if ends
|
28
|
+
builder.validityRevision revision.strftime(FORMAT) if revision
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
32
|
+
# @return [Hash]
|
33
|
+
def to_hash
|
34
|
+
hash = {}
|
35
|
+
hash[:begins] = begins.strftime(FORMAT) if begins
|
36
|
+
hash[:ends] = ends.strftime(FORMAT) if ends
|
37
|
+
hash[:revision] = revision.strftime(FORMAT) if revision
|
38
|
+
hash
|
39
|
+
end
|
30
40
|
end
|
31
41
|
end
|
data/lib/relaton_bib/version.rb
CHANGED
@@ -178,7 +178,11 @@ module RelatonBib
|
|
178
178
|
def get_person(person)
|
179
179
|
affilations = person.xpath("./affiliation").map do |a|
|
180
180
|
org = a.at "./organization"
|
181
|
-
|
181
|
+
desc = a.xpath("./description").map do |e|
|
182
|
+
FormattedString.new(content: e.text, language: e[:language],
|
183
|
+
script: e[:script], format: e[:format])
|
184
|
+
end
|
185
|
+
Affilation.new organization: get_org(org), description: desc
|
182
186
|
end
|
183
187
|
|
184
188
|
contact = person.xpath("./address | ./phone | ./email | ./uri").map do |c|
|
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.
|
4
|
+
version: 0.3.4
|
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-08-
|
11
|
+
date: 2019-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
220
|
version: '0'
|
221
221
|
requirements: []
|
222
222
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.
|
223
|
+
rubygems_version: 2.6.12
|
224
224
|
signing_key:
|
225
225
|
specification_version: 4
|
226
226
|
summary: 'RelatonBib: Ruby XMLDOC impementation.'
|