relaton-bib 1.20.7 → 2.0.0.pre.alpha.1
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/.rubocop.yml +1 -1
- data/README.adoc +183 -154
- data/bin/console +1 -1
- data/grammars/basicdoc.rng +1516 -645
- data/grammars/biblio-standoc.rng +100 -20
- data/grammars/biblio.rng +959 -356
- data/grammars/versions.json +10 -10
- data/lib/relaton/bib/hash_parser_v1.rb +711 -0
- data/lib/relaton/bib/item_data.rb +168 -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 +24 -0
- data/lib/relaton/bib/model/bibitem.rb +23 -0
- data/lib/relaton/bib/model/contact.rb +18 -0
- data/lib/relaton/bib/model/contribution_info.rb +16 -0
- data/lib/relaton/bib/model/contributor.rb +71 -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 +14 -0
- data/lib/relaton/bib/model/docidentifier.rb +33 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/editorial_group.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +29 -0
- data/lib/relaton/bib/model/extent.rb +16 -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 +14 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +129 -0
- data/lib/relaton/bib/model/item_base.rb +19 -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 +57 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +12 -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 +13 -0
- data/lib/relaton/bib/model/organization_type.rb +42 -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 +43 -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 +14 -0
- data/lib/relaton/bib/model/technical_committee.rb +14 -0
- data/lib/relaton/bib/model/title.rb +18 -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 +14 -0
- data/lib/relaton/bib/model/workgroup.rb +20 -0
- data/lib/relaton/bib/parser/rfc_address.rb +60 -0
- data/lib/relaton/bib/parser/rfc_contacts.rb +35 -0
- data/lib/relaton/bib/parser/rfc_docidentifier.rb +70 -0
- data/lib/relaton/bib/parser/rfc_organization.rb +31 -0
- data/lib/relaton/bib/parser/rfc_person.rb +42 -0
- data/lib/relaton/bib/parser/rfc_reference.rb +143 -0
- data/lib/relaton/bib/parser/rfc_referencegroup.rb +45 -0
- data/lib/relaton/bib/parser/rfc_shared.rb +23 -0
- data/lib/relaton/bib/renderer/bibtex_builder.rb +348 -0
- data/lib/relaton/bib/renderer/rfc.rb +297 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/version.rb +5 -0
- data/lib/{relaton_bib.rb → relaton/bib.rb} +47 -36
- data/lib/{relaton_bib → relaton}/bibtex_parser.rb +24 -27
- data/lib/{relaton_bib → relaton}/bibxml_parser.rb +43 -46
- data/lib/{relaton_bib → relaton}/hit.rb +3 -3
- data/lib/{relaton_bib → relaton}/hit_collection.rb +2 -2
- data/lib/{relaton_bib → relaton}/workers_pool.rb +1 -1
- data/lib/{relaton_bib → relaton}/xml_parser.rb +49 -51
- data/relaton-bib.gemspec +8 -8
- metadata +95 -74
- data/lib/relaton_bib/bib_item_locality.rb +0 -175
- data/lib/relaton_bib/biblio_note.rb +0 -72
- data/lib/relaton_bib/biblio_version.rb +0 -46
- data/lib/relaton_bib/bibliographic_date.rb +0 -119
- data/lib/relaton_bib/bibliographic_item.rb +0 -668
- data/lib/relaton_bib/bibliographic_size.rb +0 -103
- data/lib/relaton_bib/classification.rb +0 -40
- data/lib/relaton_bib/config.rb +0 -16
- data/lib/relaton_bib/contribution_info.rb +0 -117
- data/lib/relaton_bib/contributor.rb +0 -277
- data/lib/relaton_bib/copyright_association.rb +0 -79
- data/lib/relaton_bib/document_identifier.rb +0 -118
- data/lib/relaton_bib/document_relation.rb +0 -95
- data/lib/relaton_bib/document_relation_collection.rb +0 -57
- data/lib/relaton_bib/document_status.rb +0 -92
- data/lib/relaton_bib/document_type.rb +0 -52
- data/lib/relaton_bib/edition.rb +0 -55
- data/lib/relaton_bib/editorial_group.rb +0 -41
- data/lib/relaton_bib/extent.rb +0 -39
- data/lib/relaton_bib/forename.rb +0 -65
- data/lib/relaton_bib/formatted_ref.rb +0 -17
- data/lib/relaton_bib/formatted_string.rb +0 -133
- data/lib/relaton_bib/full_name.rb +0 -108
- data/lib/relaton_bib/hash_converter.rb +0 -568
- data/lib/relaton_bib/ics.rb +0 -42
- data/lib/relaton_bib/image.rb +0 -95
- data/lib/relaton_bib/localized_string.rb +0 -149
- data/lib/relaton_bib/medium.rb +0 -76
- data/lib/relaton_bib/organization.rb +0 -165
- data/lib/relaton_bib/person.rb +0 -129
- data/lib/relaton_bib/place.rb +0 -203
- data/lib/relaton_bib/renderer/bibtex_builder.rb +0 -312
- data/lib/relaton_bib/renderer/bibxml.rb +0 -296
- data/lib/relaton_bib/series.rb +0 -119
- data/lib/relaton_bib/structured_identifier.rb +0 -173
- data/lib/relaton_bib/technical_committee.rb +0 -34
- data/lib/relaton_bib/typed_title_string.rb +0 -191
- data/lib/relaton_bib/typed_uri.rb +0 -57
- data/lib/relaton_bib/util.rb +0 -16
- data/lib/relaton_bib/validity.rb +0 -52
- data/lib/relaton_bib/version.rb +0 -3
- data/lib/relaton_bib/workgroup.rb +0 -58
- /data/lib/{relaton_bib → relaton}/deep_dup.rb +0 -0
@@ -1,175 +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, nil]
|
11
|
-
attr_reader :reference_to
|
12
|
-
|
13
|
-
# @param type [String]
|
14
|
-
# @param referenceFrom [String]
|
15
|
-
# @param referenceTo [String, nil]
|
16
|
-
def initialize(type, reference_from, reference_to = nil)
|
17
|
-
type_ptrn = %r{section|clause|part|paragraph|chapter|page|title|line|
|
18
|
-
whole|table|annex|figure|note|list|example|volume|issue|time|anchor|
|
19
|
-
locality:[a-zA-Z0-9_]+}x
|
20
|
-
unless type&.match? type_ptrn
|
21
|
-
Util.warn "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
|
-
|
55
|
-
#
|
56
|
-
# Render locality as BibTeX.
|
57
|
-
#
|
58
|
-
# @param [BibTeX::Entry] item BibTeX entry.
|
59
|
-
#
|
60
|
-
def to_bibtex(item)
|
61
|
-
case type
|
62
|
-
when "chapter" then item.chapter = reference_from
|
63
|
-
when "page"
|
64
|
-
value = reference_from
|
65
|
-
value += "--#{reference_to}" if reference_to
|
66
|
-
item.pages = value
|
67
|
-
when "volume" then item.volume = reference_from
|
68
|
-
when "issue" then item.number = reference_from
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class Locality < BibItemLocality
|
74
|
-
# @param builder [Nokogiri::XML::Builder]
|
75
|
-
def to_xml(builder)
|
76
|
-
builder.locality { |b| super(b) }
|
77
|
-
end
|
78
|
-
|
79
|
-
#
|
80
|
-
# Render locality as hash.
|
81
|
-
#
|
82
|
-
# @return [Hash] locality as hash.
|
83
|
-
#
|
84
|
-
def to_hash
|
85
|
-
{ "locality" => super }
|
86
|
-
end
|
87
|
-
|
88
|
-
#
|
89
|
-
# Render locality as AsciiBib.
|
90
|
-
#
|
91
|
-
# @param [String] prefix prefix of locality
|
92
|
-
# @param [Integer] count number of localities
|
93
|
-
#
|
94
|
-
# @return [String] AsciiBib.
|
95
|
-
#
|
96
|
-
def to_asciibib(prefix = "", count = 1)
|
97
|
-
pref = prefix.empty? ? "locality" : "#{prefix}.locality"
|
98
|
-
super(pref, count)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
class LocalityStack
|
103
|
-
include RelatonBib
|
104
|
-
|
105
|
-
# @return [Array<RelatonBib::Locality>]
|
106
|
-
attr_reader :locality
|
107
|
-
|
108
|
-
# @param locality [Array<RelatonBib::Locality>]
|
109
|
-
def initialize(locality)
|
110
|
-
@locality = locality
|
111
|
-
end
|
112
|
-
|
113
|
-
# @param builder [Nokogiri::XML::Builder]
|
114
|
-
def to_xml(builder)
|
115
|
-
builder.localityStack do |b|
|
116
|
-
locality.each { |l| l.to_xml(b) }
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
# @returnt [Hash]
|
121
|
-
def to_hash
|
122
|
-
hash = Hash.new { |h, k| h[k] = [] }
|
123
|
-
locality.each_with_object(hash) do |l, obj|
|
124
|
-
k, v = l.to_hash.first
|
125
|
-
obj[k] << v
|
126
|
-
end
|
127
|
-
{ "locality_stack" => hash }
|
128
|
-
end
|
129
|
-
|
130
|
-
#
|
131
|
-
# Render locality stack as AsciiBib.
|
132
|
-
#
|
133
|
-
# @param [String] prefix <description>
|
134
|
-
# @param [Integer] size size of locality stack
|
135
|
-
#
|
136
|
-
# @return [String] AsciiBib.
|
137
|
-
#
|
138
|
-
def to_asciibib(prefix = "", size = 1)
|
139
|
-
pref = prefix.empty? ? "locality_stack" : "#{prefix}.locality_stack"
|
140
|
-
out = ""
|
141
|
-
out << "#{pref}::\n" if size > 1
|
142
|
-
out << locality.map { |l| l.to_asciibib(pref, locality.size) }.join
|
143
|
-
end
|
144
|
-
|
145
|
-
#
|
146
|
-
# Render locality stack as BibTeX.
|
147
|
-
#
|
148
|
-
# @param [BibTeX::Entry] item BibTeX entry.
|
149
|
-
#
|
150
|
-
def to_bibtex(item)
|
151
|
-
locality.each { |l| l.to_bibtex(item) }
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
class SourceLocality < BibItemLocality
|
156
|
-
# @param builder [Nokogiri::XML::Builder]
|
157
|
-
def to_xml(builder)
|
158
|
-
builder.sourceLocality { |b| super(b) }
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
class SourceLocalityStack < LocalityStack
|
163
|
-
# @param builder [Nokogiri::XML::Builder]
|
164
|
-
def to_xml(builder)
|
165
|
-
builder.sourceLocalityStack do |b|
|
166
|
-
locality.each { |l| l.to_xml(b) }
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
# @returnt [Hash]
|
171
|
-
def to_hash
|
172
|
-
{ "source_locality_stack" => single_element_array(locality) }
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module RelatonBib
|
2
|
-
class BiblioNoteCollection
|
3
|
-
extend Forwardable
|
4
|
-
|
5
|
-
def_delegators :@array, :[], :first, :last, :empty?, :any?, :size,
|
6
|
-
:each, :map, :reduce, :detect, :length
|
7
|
-
|
8
|
-
def initialize(notes)
|
9
|
-
@array = notes
|
10
|
-
end
|
11
|
-
|
12
|
-
# @param bibnote [RelatonBib::BiblioNote]
|
13
|
-
# @return [self]
|
14
|
-
def <<(bibnote)
|
15
|
-
@array << bibnote
|
16
|
-
self
|
17
|
-
end
|
18
|
-
|
19
|
-
# @param opts [Hash]
|
20
|
-
# @option opts [Nokogiri::XML::Builder] XML builder
|
21
|
-
# @option opts [String] :lang language
|
22
|
-
def to_xml(**opts)
|
23
|
-
bnc = @array.select { |bn| bn.language&.include? opts[:lang] }
|
24
|
-
bnc = @array unless bnc.any?
|
25
|
-
bnc.each { |bn| bn.to_xml opts[:builder] }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class BiblioNote < FormattedString
|
30
|
-
# @return [String, nil]
|
31
|
-
attr_reader :type
|
32
|
-
|
33
|
-
# @param content [String]
|
34
|
-
# @param type [String, nil]
|
35
|
-
# @param language [String, nil] language code Iso639
|
36
|
-
# @param script [String, nil] script code Iso15924
|
37
|
-
# @param format [String, nil] the content format
|
38
|
-
def initialize(content:, type: nil, language: nil, script: nil, format: nil)
|
39
|
-
@type = type
|
40
|
-
super content: content, language: language, script: script, format: format
|
41
|
-
end
|
42
|
-
|
43
|
-
# @param builder [Nokogiri::XML::Builder]
|
44
|
-
def to_xml(builder)
|
45
|
-
xml = builder.note { super }
|
46
|
-
xml[:type] = type if type
|
47
|
-
xml
|
48
|
-
end
|
49
|
-
|
50
|
-
# @return [Hash]
|
51
|
-
def to_hash
|
52
|
-
hash = super
|
53
|
-
return hash unless type
|
54
|
-
|
55
|
-
hash = { "content" => hash } if hash.is_a? String
|
56
|
-
hash["type"] = type
|
57
|
-
hash
|
58
|
-
end
|
59
|
-
|
60
|
-
# @param prefix [String]
|
61
|
-
# @param count [Integer] number of notes
|
62
|
-
# @return [String]
|
63
|
-
def to_asciibib(prefix = "", count = 1)
|
64
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
65
|
-
has_attrs = !(type.nil? || type.empty?)
|
66
|
-
out = count > 1 && has_attrs ? "#{pref}biblionote::\n" : ""
|
67
|
-
out += "#{pref}biblionote.type:: #{type}\n" if type
|
68
|
-
out += super "#{pref}biblionote", 1, has_attrs
|
69
|
-
out
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module RelatonBib
|
2
|
-
# Version
|
3
|
-
class BibliographicItem
|
4
|
-
class Version
|
5
|
-
include RelatonBib
|
6
|
-
|
7
|
-
# @return [String, nil]
|
8
|
-
attr_reader :revision_date, :draft
|
9
|
-
|
10
|
-
# @param revision_date [String, nil]
|
11
|
-
# @param draft [String, nil]
|
12
|
-
def initialize(revision_date = nil, draft = nil)
|
13
|
-
@revision_date = revision_date
|
14
|
-
@draft = draft
|
15
|
-
end
|
16
|
-
|
17
|
-
# @param builder [Nokogiri::XML::Builder]
|
18
|
-
def to_xml(builder)
|
19
|
-
builder.version do
|
20
|
-
builder.send(:"revision-date", revision_date) if revision_date
|
21
|
-
builder.draft draft if draft
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# @return [Hash]
|
26
|
-
def to_hash
|
27
|
-
hash = {}
|
28
|
-
hash["revision_date"] = revision_date if revision_date
|
29
|
-
hash["draft"] = draft if draft
|
30
|
-
hash
|
31
|
-
end
|
32
|
-
|
33
|
-
# @param prefix [String]
|
34
|
-
# @return [String]
|
35
|
-
def to_asciibib(prefix = "", count = 1)
|
36
|
-
pref = prefix.empty? ? prefix : "#{prefix}."
|
37
|
-
out = count > 1 ? "#{prefix}version::\n" : ""
|
38
|
-
if revision_date
|
39
|
-
out += "#{pref}version.revision_date:: #{revision_date}\n"
|
40
|
-
end
|
41
|
-
out += "#{pref}version.draft:: #{draft}\n" if draft
|
42
|
-
out
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,119 +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 corrected issued transmitted copied unchanged circulated adapted
|
10
|
-
vote-started vote-ended announced stable-until].freeze
|
11
|
-
|
12
|
-
# @return [String]
|
13
|
-
attr_reader :type
|
14
|
-
|
15
|
-
# @param type [String] "published", "accessed", "created", "activated"
|
16
|
-
# @param on [String]
|
17
|
-
# @param from [String]
|
18
|
-
# @param to [String]
|
19
|
-
def initialize(type:, on: nil, from: nil, to: nil)
|
20
|
-
raise ArgumentError, "expected :on or :from argument" unless on || from
|
21
|
-
|
22
|
-
# raise ArgumentError, "invalid type: #{type}" unless TYPES.include? type
|
23
|
-
|
24
|
-
@type = type
|
25
|
-
@on = RelatonBib.parse_date on
|
26
|
-
@from = RelatonBib.parse_date from
|
27
|
-
@to = RelatonBib.parse_date to
|
28
|
-
end
|
29
|
-
|
30
|
-
# @param part [Symbol] :year, :month, :day, :date
|
31
|
-
# @return [String, Date, nil]
|
32
|
-
def from(part = nil) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
33
|
-
d = instance_variable_get "@#{__callee__}".to_sym
|
34
|
-
return d unless part && d
|
35
|
-
|
36
|
-
# date = parse_date(d)
|
37
|
-
# return date if part == :date
|
38
|
-
|
39
|
-
parts = d.split "-"
|
40
|
-
case part
|
41
|
-
when :year then parts[0]&.to_i
|
42
|
-
when :month then parts[1]&.to_i
|
43
|
-
when :day then parts[2]&.to_i
|
44
|
-
when :date then parse_date(d)
|
45
|
-
else d
|
46
|
-
end
|
47
|
-
|
48
|
-
# date.is_a?(Date) ? date.send(part) : date
|
49
|
-
end
|
50
|
-
|
51
|
-
alias_method :to, :from
|
52
|
-
alias_method :on, :from
|
53
|
-
|
54
|
-
# rubocop:disable Metrics/AbcSize
|
55
|
-
|
56
|
-
# @param builder [Nokogiri::XML::Builder]
|
57
|
-
# @return [Nokogiri::XML::Builder]
|
58
|
-
def to_xml(builder, **opts)
|
59
|
-
builder.date(type: type) do
|
60
|
-
if on
|
61
|
-
builder.on(opts[:no_year] ? "--" : date_format(on, opts[:date_format]))
|
62
|
-
elsif from
|
63
|
-
builder.from(opts[:no_year] ? "--" : date_format(from, opts[:date_format]))
|
64
|
-
builder.to date_format(to, opts[:date_format]) if to
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
# rubocop:enable Metrics/AbcSize
|
69
|
-
|
70
|
-
# @return [Hash]
|
71
|
-
def to_hash
|
72
|
-
hash = { "type" => type }
|
73
|
-
hash["value"] = on.to_s if on
|
74
|
-
hash["from"] = from.to_s if from
|
75
|
-
hash["to"] = to.to_s if to
|
76
|
-
hash
|
77
|
-
end
|
78
|
-
|
79
|
-
# @param prefix [String]
|
80
|
-
# @param count [Integer] number of dates
|
81
|
-
# @return [String]
|
82
|
-
def to_asciibib(prefix = "", count = 1)
|
83
|
-
pref = prefix.empty? ? prefix : "#{prefix}."
|
84
|
-
out = count > 1 ? "#{pref}date::\n" : ""
|
85
|
-
out += "#{pref}date.type:: #{type}\n"
|
86
|
-
out += "#{pref}date.on:: #{on}\n" if on
|
87
|
-
out += "#{pref}date.from:: #{from}\n" if from
|
88
|
-
out += "#{pref}date.to:: #{to}\n" if to
|
89
|
-
out
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
# Formats date
|
95
|
-
# @param date [String]
|
96
|
-
# @param format [Symbol, nil] :full (yyyy-mm-dd), :short (yyyy-mm) or nil
|
97
|
-
# @return [String]
|
98
|
-
def date_format(date, format = nil)
|
99
|
-
tmplt = case format
|
100
|
-
when :short then "%Y-%m"
|
101
|
-
when :full then "%Y-%m-%d"
|
102
|
-
else return date
|
103
|
-
end
|
104
|
-
d = parse_date(date)
|
105
|
-
d.is_a?(Date) ? d.strftime(tmplt) : d
|
106
|
-
end
|
107
|
-
|
108
|
-
# @param date [String]
|
109
|
-
# @return [Date]
|
110
|
-
def parse_date(date)
|
111
|
-
case date
|
112
|
-
when /^\d{4}-\d{1,2}-\d{1,2}/ then Date.parse(date) # 2012-02-11
|
113
|
-
when /^\d{4}-\d{1,2}/ then Date.strptime(date, "%Y-%m") # 2012-02
|
114
|
-
when /^\d{4}/ then Date.strptime(date, "%Y") # 2012
|
115
|
-
else date
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|