relaton-bib 1.4.0 → 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/integration-tests.yml +54 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +3 -1
- data/CLAUDE.md +108 -0
- data/Gemfile +11 -0
- data/README.adoc +229 -314
- data/bin/console +1 -1
- data/docs/hash.adoc +132 -83
- data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
- data/lib/relaton/bib/converter/asciibib.rb +13 -0
- data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
- data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
- data/lib/relaton/bib/converter/bibtex.rb +23 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
- data/lib/relaton/bib/converter/bibxml.rb +51 -0
- data/lib/relaton/bib/hash_parser_v1.rb +767 -0
- data/lib/relaton/bib/item_data.rb +229 -0
- data/lib/relaton/bib/model/abstract.rb +16 -0
- data/lib/relaton/bib/model/address.rb +22 -0
- data/lib/relaton/bib/model/affiliation.rb +16 -0
- data/lib/relaton/bib/model/bibdata.rb +9 -0
- data/lib/relaton/bib/model/bibdata_shared.rb +10 -0
- data/lib/relaton/bib/model/bibitem.rb +9 -0
- data/lib/relaton/bib/model/bibitem_shared.rb +10 -0
- data/lib/relaton/bib/model/contact.rb +14 -0
- data/lib/relaton/bib/model/contribution_info.rb +16 -0
- data/lib/relaton/bib/model/contributor.rb +29 -0
- data/lib/relaton/bib/model/copyright.rb +27 -0
- data/lib/relaton/bib/model/date.rb +29 -0
- data/lib/relaton/bib/model/depiction.rb +16 -0
- data/lib/relaton/bib/model/docidentifier.rb +34 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +35 -0
- data/lib/relaton/bib/model/extent.rb +16 -0
- data/lib/relaton/bib/model/formattedref.rb +43 -0
- data/lib/relaton/bib/model/full_name_type.rb +64 -0
- data/lib/relaton/bib/model/fullname.rb +11 -0
- data/lib/relaton/bib/model/ics.rb +49 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +44 -0
- data/lib/relaton/bib/model/item_base.rb +20 -0
- data/lib/relaton/bib/model/item_shared.rb +88 -0
- data/lib/relaton/bib/model/keyword.rb +30 -0
- data/lib/relaton/bib/model/locality.rb +18 -0
- data/lib/relaton/bib/model/locality_stack.rb +14 -0
- data/lib/relaton/bib/model/localized_string.rb +48 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +14 -0
- data/lib/relaton/bib/model/medium.rb +22 -0
- data/lib/relaton/bib/model/note.rb +16 -0
- data/lib/relaton/bib/model/organization.rb +11 -0
- data/lib/relaton/bib/model/organization_type.rb +40 -0
- data/lib/relaton/bib/model/person.rb +36 -0
- data/lib/relaton/bib/model/phone.rb +14 -0
- data/lib/relaton/bib/model/place.rb +33 -0
- data/lib/relaton/bib/model/price.rb +14 -0
- data/lib/relaton/bib/model/relation.rb +41 -0
- data/lib/relaton/bib/model/series.rb +32 -0
- data/lib/relaton/bib/model/size.rb +23 -0
- data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
- data/lib/relaton/bib/model/status.rb +27 -0
- data/lib/relaton/bib/model/structured_identifier.rb +48 -0
- data/lib/relaton/bib/model/subdivision.rb +16 -0
- data/lib/relaton/bib/model/title.rb +56 -0
- data/lib/relaton/bib/model/type/plain_date.rb +16 -0
- data/lib/relaton/bib/model/type/string_date.rb +48 -0
- data/lib/relaton/bib/model/uri.rb +18 -0
- data/lib/relaton/bib/model/validity.rb +16 -0
- data/lib/relaton/bib/model/version.rb +43 -0
- data/lib/relaton/bib/model_autoload.rb +85 -0
- data/lib/relaton/bib/namespace_helper.rb +21 -0
- data/lib/relaton/bib/sanitizer.rb +74 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/version.rb +5 -0
- data/lib/relaton/bib/versions.json +35 -0
- data/lib/relaton/bib.rb +41 -0
- data/relaton-bib.gemspec +12 -16
- metadata +118 -129
- data/.github/workflows/macos.yml +0 -38
- data/.github/workflows/ubuntu.yml +0 -39
- data/.github/workflows/windows.yml +0 -41
- data/grammars/basicdoc.rng +0 -986
- data/grammars/biblio.rng +0 -1237
- data/grammars/isodoc.rng +0 -1613
- data/grammars/reqt.rng +0 -165
- data/lib/relaton_bib/bib_item_locality.rb +0 -107
- data/lib/relaton_bib/biblio_note.rb +0 -44
- data/lib/relaton_bib/biblio_version.rb +0 -49
- data/lib/relaton_bib/bibliographic_date.rb +0 -90
- data/lib/relaton_bib/bibliographic_item.rb +0 -726
- data/lib/relaton_bib/bibtex_parser.rb +0 -245
- data/lib/relaton_bib/classification.rb +0 -40
- data/lib/relaton_bib/contribution_info.rb +0 -109
- data/lib/relaton_bib/contributor.rb +0 -215
- data/lib/relaton_bib/copyright_association.rb +0 -77
- data/lib/relaton_bib/deep_dup.rb +0 -30
- data/lib/relaton_bib/document_identifier.rb +0 -95
- data/lib/relaton_bib/document_relation.rb +0 -94
- data/lib/relaton_bib/document_relation_collection.rb +0 -46
- data/lib/relaton_bib/document_status.rb +0 -93
- data/lib/relaton_bib/editorial_group.rb +0 -41
- data/lib/relaton_bib/formatted_ref.rb +0 -17
- data/lib/relaton_bib/formatted_string.rb +0 -55
- data/lib/relaton_bib/hash_converter.rb +0 -497
- data/lib/relaton_bib/hit.rb +0 -46
- data/lib/relaton_bib/hit_collection.rb +0 -73
- data/lib/relaton_bib/ics.rb +0 -37
- data/lib/relaton_bib/localized_string.rb +0 -93
- data/lib/relaton_bib/medium.rb +0 -44
- data/lib/relaton_bib/organization.rb +0 -135
- data/lib/relaton_bib/person.rb +0 -206
- data/lib/relaton_bib/place.rb +0 -49
- data/lib/relaton_bib/series.rb +0 -134
- data/lib/relaton_bib/structured_identifier.rb +0 -171
- data/lib/relaton_bib/technical_committee.rb +0 -36
- data/lib/relaton_bib/typed_title_string.rb +0 -96
- data/lib/relaton_bib/typed_uri.rb +0 -47
- data/lib/relaton_bib/validity.rb +0 -52
- data/lib/relaton_bib/version.rb +0 -3
- data/lib/relaton_bib/workers_pool.rb +0 -43
- data/lib/relaton_bib/workgroup.rb +0 -46
- data/lib/relaton_bib/xml_parser.rb +0 -463
- data/lib/relaton_bib.rb +0 -44
data/grammars/reqt.rng
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
3
|
-
<!--
|
|
4
|
-
Presupposes isodoc.rnc, is included in it
|
|
5
|
-
include "isodoc.rnc" { }
|
|
6
|
-
-->
|
|
7
|
-
<define name="requirement">
|
|
8
|
-
<element name="requirement">
|
|
9
|
-
<ref name="RequirementType"/>
|
|
10
|
-
</element>
|
|
11
|
-
</define>
|
|
12
|
-
<define name="recommendation">
|
|
13
|
-
<element name="recommendation">
|
|
14
|
-
<ref name="RequirementType"/>
|
|
15
|
-
</element>
|
|
16
|
-
</define>
|
|
17
|
-
<define name="permission">
|
|
18
|
-
<element name="permission">
|
|
19
|
-
<ref name="RequirementType"/>
|
|
20
|
-
</element>
|
|
21
|
-
</define>
|
|
22
|
-
<define name="RequirementType">
|
|
23
|
-
<optional>
|
|
24
|
-
<attribute name="obligation">
|
|
25
|
-
<ref name="ObligationType"/>
|
|
26
|
-
</attribute>
|
|
27
|
-
</optional>
|
|
28
|
-
<optional>
|
|
29
|
-
<attribute name="unnumbered">
|
|
30
|
-
<data type="boolean"/>
|
|
31
|
-
</attribute>
|
|
32
|
-
</optional>
|
|
33
|
-
<optional>
|
|
34
|
-
<attribute name="subsequence"/>
|
|
35
|
-
</optional>
|
|
36
|
-
<attribute name="id">
|
|
37
|
-
<data type="ID"/>
|
|
38
|
-
</attribute>
|
|
39
|
-
<optional>
|
|
40
|
-
<attribute name="filename"/>
|
|
41
|
-
</optional>
|
|
42
|
-
<optional>
|
|
43
|
-
<ref name="reqtitle"/>
|
|
44
|
-
</optional>
|
|
45
|
-
<optional>
|
|
46
|
-
<ref name="label"/>
|
|
47
|
-
</optional>
|
|
48
|
-
<optional>
|
|
49
|
-
<ref name="subject"/>
|
|
50
|
-
</optional>
|
|
51
|
-
<optional>
|
|
52
|
-
<ref name="reqinherit"/>
|
|
53
|
-
</optional>
|
|
54
|
-
<zeroOrMore>
|
|
55
|
-
<ref name="classification"/>
|
|
56
|
-
</zeroOrMore>
|
|
57
|
-
<zeroOrMore>
|
|
58
|
-
<choice>
|
|
59
|
-
<ref name="measurementtarget"/>
|
|
60
|
-
<ref name="specification"/>
|
|
61
|
-
<ref name="verification"/>
|
|
62
|
-
<ref name="import"/>
|
|
63
|
-
<ref name="description"/>
|
|
64
|
-
</choice>
|
|
65
|
-
</zeroOrMore>
|
|
66
|
-
<optional>
|
|
67
|
-
<ref name="reqt_references"/>
|
|
68
|
-
</optional>
|
|
69
|
-
<zeroOrMore>
|
|
70
|
-
<choice>
|
|
71
|
-
<ref name="requirement"/>
|
|
72
|
-
<ref name="recommendation"/>
|
|
73
|
-
<ref name="permission"/>
|
|
74
|
-
</choice>
|
|
75
|
-
</zeroOrMore>
|
|
76
|
-
</define>
|
|
77
|
-
<define name="reqtitle">
|
|
78
|
-
<element name="title">
|
|
79
|
-
<ref name="FormattedString"/>
|
|
80
|
-
</element>
|
|
81
|
-
</define>
|
|
82
|
-
<define name="label">
|
|
83
|
-
<element name="label">
|
|
84
|
-
<text/>
|
|
85
|
-
</element>
|
|
86
|
-
</define>
|
|
87
|
-
<define name="subject">
|
|
88
|
-
<element name="subject">
|
|
89
|
-
<text/>
|
|
90
|
-
</element>
|
|
91
|
-
</define>
|
|
92
|
-
<define name="reqinherit">
|
|
93
|
-
<element name="inherit">
|
|
94
|
-
<text/>
|
|
95
|
-
</element>
|
|
96
|
-
</define>
|
|
97
|
-
<define name="measurementtarget">
|
|
98
|
-
<element name="measurement-target">
|
|
99
|
-
<ref name="RequirementSubpart"/>
|
|
100
|
-
</element>
|
|
101
|
-
</define>
|
|
102
|
-
<define name="specification">
|
|
103
|
-
<element name="specification">
|
|
104
|
-
<ref name="RequirementSubpart"/>
|
|
105
|
-
</element>
|
|
106
|
-
</define>
|
|
107
|
-
<define name="verification">
|
|
108
|
-
<element name="verification">
|
|
109
|
-
<ref name="RequirementSubpart"/>
|
|
110
|
-
</element>
|
|
111
|
-
</define>
|
|
112
|
-
<define name="import">
|
|
113
|
-
<element name="import">
|
|
114
|
-
<ref name="RequirementSubpart"/>
|
|
115
|
-
</element>
|
|
116
|
-
</define>
|
|
117
|
-
<define name="description">
|
|
118
|
-
<element name="description">
|
|
119
|
-
<ref name="RequirementSubpart"/>
|
|
120
|
-
</element>
|
|
121
|
-
</define>
|
|
122
|
-
<define name="reqt_references">
|
|
123
|
-
<element name="references">
|
|
124
|
-
<oneOrMore>
|
|
125
|
-
<ref name="bibitem"/>
|
|
126
|
-
</oneOrMore>
|
|
127
|
-
</element>
|
|
128
|
-
</define>
|
|
129
|
-
<define name="RequirementSubpart">
|
|
130
|
-
<optional>
|
|
131
|
-
<attribute name="type"/>
|
|
132
|
-
</optional>
|
|
133
|
-
<optional>
|
|
134
|
-
<attribute name="exclude">
|
|
135
|
-
<data type="boolean"/>
|
|
136
|
-
</attribute>
|
|
137
|
-
</optional>
|
|
138
|
-
<oneOrMore>
|
|
139
|
-
<ref name="BasicBlock"/>
|
|
140
|
-
</oneOrMore>
|
|
141
|
-
</define>
|
|
142
|
-
<define name="ObligationType">
|
|
143
|
-
<choice>
|
|
144
|
-
<value>requirement</value>
|
|
145
|
-
<value>recommendation</value>
|
|
146
|
-
<value>permission</value>
|
|
147
|
-
</choice>
|
|
148
|
-
</define>
|
|
149
|
-
<define name="classification">
|
|
150
|
-
<element name="classification">
|
|
151
|
-
<ref name="classification_tag"/>
|
|
152
|
-
<ref name="classification_value"/>
|
|
153
|
-
</element>
|
|
154
|
-
</define>
|
|
155
|
-
<define name="classification_tag">
|
|
156
|
-
<element name="tag">
|
|
157
|
-
<text/>
|
|
158
|
-
</element>
|
|
159
|
-
</define>
|
|
160
|
-
<define name="classification_value">
|
|
161
|
-
<element name="value">
|
|
162
|
-
<text/>
|
|
163
|
-
</element>
|
|
164
|
-
</define>
|
|
165
|
-
</grammar>
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
# Bibliographic item locality.
|
|
3
|
-
class BibItemLocality
|
|
4
|
-
# @return [String]
|
|
5
|
-
attr_reader :type
|
|
6
|
-
|
|
7
|
-
# @return [String]
|
|
8
|
-
attr_reader :reference_from
|
|
9
|
-
|
|
10
|
-
# @return [String, NilClass]
|
|
11
|
-
attr_reader :reference_to
|
|
12
|
-
|
|
13
|
-
# @param type [String]
|
|
14
|
-
# @param referenceFrom [String]
|
|
15
|
-
# @param referenceTo [String, NilClass]
|
|
16
|
-
def initialize(type, reference_from, reference_to = nil)
|
|
17
|
-
type_ptrn = %r{section|clause|part|paragraph|chapter|page|whole|table|
|
|
18
|
-
annex|figure|note|list|example|volume|issue|time|
|
|
19
|
-
locality:[a-zA-Z0-9_]+}x
|
|
20
|
-
unless type.match? type_ptrn
|
|
21
|
-
warn "[relaton-bib] WARNING: invalid locality type: #{type}"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
@type = type
|
|
25
|
-
@reference_from = reference_from
|
|
26
|
-
@reference_to = reference_to
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
30
|
-
def to_xml(builder)
|
|
31
|
-
builder.parent[:type] = type
|
|
32
|
-
builder.referenceFrom reference_from # { reference_from.to_xml(builder) }
|
|
33
|
-
builder.referenceTo reference_to if reference_to
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @return [Hash]
|
|
37
|
-
def to_hash
|
|
38
|
-
hash = { "type" => type, "reference_from" => reference_from }
|
|
39
|
-
hash["reference_to"] = reference_to if reference_to
|
|
40
|
-
hash
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @param prefix [String]
|
|
44
|
-
# @param count [Integeg] number of localities
|
|
45
|
-
# @return [String]
|
|
46
|
-
def to_asciibib(prefix = "", count = 1)
|
|
47
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
48
|
-
out = count > 1 ? "#{prefix}::\n" : ""
|
|
49
|
-
out += "#{pref}type:: #{type}\n"
|
|
50
|
-
out += "#{pref}reference_from:: #{reference_from}\n"
|
|
51
|
-
out += "#{pref}reference_to:: #{reference_to}\n" if reference_to
|
|
52
|
-
out
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
class Locality < BibItemLocality
|
|
57
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
58
|
-
def to_xml(builder)
|
|
59
|
-
builder.locality { |b| super(b) }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
class LocalityStack
|
|
64
|
-
include RelatonBib
|
|
65
|
-
|
|
66
|
-
# @return [Array<RelatonBib::Locality>]
|
|
67
|
-
attr_reader :locality
|
|
68
|
-
|
|
69
|
-
# @param locality [Array<RelatonBib::Locality>]
|
|
70
|
-
def initialize(locality)
|
|
71
|
-
@locality = locality
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
75
|
-
def to_xml(builder)
|
|
76
|
-
builder.localityStack do |b|
|
|
77
|
-
locality.each { |l| l.to_xml(b) }
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# @returnt [Hash]
|
|
82
|
-
def to_hash
|
|
83
|
-
{ "locality_stack" => single_element_array(locality) }
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
class SourceLocality < BibItemLocality
|
|
88
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
89
|
-
def to_xml(builder)
|
|
90
|
-
builder.sourceLocality { |b| super(b) }
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
class SourceLocalityStack < LocalityStack
|
|
95
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
96
|
-
def to_xml(builder)
|
|
97
|
-
builder.sourceLocalityStack do |b|
|
|
98
|
-
locality.each { |l| l.to_xml(b) }
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# @returnt [Hash]
|
|
103
|
-
def to_hash
|
|
104
|
-
{ "source_locality_stack" => single_element_array(locality) }
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
class BiblioNote < FormattedString
|
|
3
|
-
# @return [String, NilClass]
|
|
4
|
-
attr_reader :type
|
|
5
|
-
|
|
6
|
-
# @param content [String]
|
|
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
|
-
def initialize(content:, type: nil, language: nil, script: nil, format: nil)
|
|
12
|
-
@type = type
|
|
13
|
-
super content: content, language: language, script: script, format: format
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
17
|
-
def to_xml(builder)
|
|
18
|
-
xml = builder.note { super }
|
|
19
|
-
xml[:type] = type if type
|
|
20
|
-
xml
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @return [Hash]
|
|
24
|
-
def to_hash
|
|
25
|
-
hash = super
|
|
26
|
-
return hash unless type
|
|
27
|
-
|
|
28
|
-
hash = { "content" => hash } if hash.is_a? String
|
|
29
|
-
hash["type"] = type
|
|
30
|
-
hash
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# @param prefix [String]
|
|
34
|
-
# @param count [Integer] number of notes
|
|
35
|
-
# @return [String]
|
|
36
|
-
def to_asciibib(prefix = "", count = 1)
|
|
37
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
38
|
-
out = count > 1 ? "#{pref}biblionote::\n" : ""
|
|
39
|
-
out + "#{pref}biblionote.type:: #{type}\n" if type
|
|
40
|
-
out += super "#{pref}biblionote"
|
|
41
|
-
out
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
# Version
|
|
3
|
-
class BibliographicItem
|
|
4
|
-
class Version
|
|
5
|
-
include RelatonBib
|
|
6
|
-
|
|
7
|
-
# @return [String, NilClass]
|
|
8
|
-
attr_reader :revision_date
|
|
9
|
-
|
|
10
|
-
# @return [Array<String>]
|
|
11
|
-
attr_reader :draft
|
|
12
|
-
|
|
13
|
-
# @param revision_date [String, NilClass]
|
|
14
|
-
# @param draft [Array<String>]
|
|
15
|
-
def initialize(revision_date = nil, draft = [])
|
|
16
|
-
@revision_date = revision_date
|
|
17
|
-
@draft = draft
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
21
|
-
def to_xml(builder)
|
|
22
|
-
builder.version do
|
|
23
|
-
builder.send("revision-date", revision_date) if revision_date
|
|
24
|
-
draft.each { |d| builder.draft d }
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# @return [Hash]
|
|
29
|
-
def to_hash
|
|
30
|
-
hash = {}
|
|
31
|
-
hash["revision_date"] = revision_date if revision_date
|
|
32
|
-
hash["draft"] = single_element_array(draft) if draft&.any?
|
|
33
|
-
hash
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @param prefix [String]
|
|
37
|
-
# @return [String]
|
|
38
|
-
def to_asciibib(prefix = "")
|
|
39
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
40
|
-
out = ""
|
|
41
|
-
if revision_date
|
|
42
|
-
out += "#{pref}version.revision_date:: #{revision_date}\n"
|
|
43
|
-
end
|
|
44
|
-
draft&.each { |d| out += "#{pref}version.draft:: #{d}\n" }
|
|
45
|
-
out
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "time"
|
|
4
|
-
|
|
5
|
-
module RelatonBib
|
|
6
|
-
# Bibliographic date.
|
|
7
|
-
class BibliographicDate
|
|
8
|
-
TYPES = %w[published accessed created implemented obsoleted confirmed
|
|
9
|
-
updated issued transmitted copied unchanged circulated adapted].freeze
|
|
10
|
-
|
|
11
|
-
# @return [String]
|
|
12
|
-
attr_reader :type
|
|
13
|
-
|
|
14
|
-
# @return [Date]
|
|
15
|
-
attr_reader :from
|
|
16
|
-
|
|
17
|
-
# @return [Date]
|
|
18
|
-
attr_reader :to
|
|
19
|
-
|
|
20
|
-
# @return [Date]
|
|
21
|
-
attr_reader :on
|
|
22
|
-
|
|
23
|
-
# @param type [String] "published", "accessed", "created", "activated"
|
|
24
|
-
# @param on [String]
|
|
25
|
-
# @param from [String]
|
|
26
|
-
# @param to [String]
|
|
27
|
-
def initialize(type:, on: nil, from: nil, to: nil)
|
|
28
|
-
raise ArgumentError, "expected :on or :from argument" unless on || from
|
|
29
|
-
|
|
30
|
-
# raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
|
|
31
|
-
|
|
32
|
-
@type = type
|
|
33
|
-
@on = RelatonBib.parse_date on
|
|
34
|
-
@from = RelatonBib.parse_date from
|
|
35
|
-
@to = RelatonBib.parse_date to
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# rubocop:disable Metrics/AbcSize
|
|
39
|
-
|
|
40
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
41
|
-
# @return [Nokogiri::XML::Builder]
|
|
42
|
-
def to_xml(builder, **opts)
|
|
43
|
-
builder.date(type: type) do
|
|
44
|
-
if on
|
|
45
|
-
builder.on(opts[:no_year] ? "--" : date_format(on, opts[:date_format]))
|
|
46
|
-
elsif from
|
|
47
|
-
builder.from(opts[:no_year] ? "--" : date_format(from, opts[:date_format]))
|
|
48
|
-
builder.to date_format(to, opts[:date_format]) if to
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
# rubocop:enable Metrics/AbcSize
|
|
53
|
-
|
|
54
|
-
# @return [Hash]
|
|
55
|
-
def to_hash
|
|
56
|
-
hash = { "type" => type }
|
|
57
|
-
hash["value"] = on.to_s if on
|
|
58
|
-
hash["from"] = from.to_s if from
|
|
59
|
-
hash["to"] = to.to_s if to
|
|
60
|
-
hash
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# @param prefix [String]
|
|
64
|
-
# @param count [Integer] number of dates
|
|
65
|
-
# @return [String]
|
|
66
|
-
def to_asciibib(prefix = "", count = 1)
|
|
67
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
68
|
-
out = count > 1 ? "#{pref}date::\n" : ""
|
|
69
|
-
out += "#{pref}date.type:: #{type}\n"
|
|
70
|
-
out += "#{pref}date.on:: #{on}\n" if on
|
|
71
|
-
out += "#{pref}date.from:: #{from}\n" if from
|
|
72
|
-
out += "#{pref}date.to:: #{to}\n" if to
|
|
73
|
-
out
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
private
|
|
77
|
-
|
|
78
|
-
# Formats date
|
|
79
|
-
# @param date [Time]
|
|
80
|
-
# @param format [Symbol, nil] :full (yyyy-mm-dd), :short (yyyy-mm) or nil (yyyy)
|
|
81
|
-
# @return [String]
|
|
82
|
-
def date_format(date, format = nil)
|
|
83
|
-
case format
|
|
84
|
-
when :short then date.strftime "%Y-%m"
|
|
85
|
-
when :full then date.strftime "%Y-%m-%d"
|
|
86
|
-
else date.year
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|