edtf 3.0.8 → 3.1.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/.github/workflows/ci.yml +41 -0
- data/.simplecov +15 -0
- data/Gemfile +5 -19
- data/LICENSE +1 -1
- data/README.md +12 -7
- data/Rakefile +0 -4
- data/cucumber.yml +1 -1
- data/edtf.gemspec +1 -2
- data/features/parser/unspecified.feature +17 -6
- data/features/print/level_1_edtf.feature +47 -16
- data/features/print/level_2_edtf.feature +11 -3
- data/features/support/env.rb +1 -10
- data/lib/edtf/date.rb +2 -2
- data/lib/edtf/interval.rb +4 -4
- data/lib/edtf/parser.rb +98 -94
- data/lib/edtf/parser.y +7 -5
- data/lib/edtf/season.rb +2 -2
- data/lib/edtf/uncertainty.rb +13 -13
- data/lib/edtf/version.rb +1 -1
- data/spec/edtf/interval_spec.rb +3 -3
- data/spec/edtf/parser_spec.rb +135 -70
- data/spec/edtf/uncertainty_spec.rb +73 -79
- data/spec/spec_helper.rb +1 -10
- metadata +5 -6
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -17
data/lib/edtf/parser.y
CHANGED
@@ -135,7 +135,6 @@ rule
|
|
135
135
|
result = Date.new(val[0]).unspecified!([:day,:month])
|
136
136
|
}
|
137
137
|
|
138
|
-
|
139
138
|
level_1_interval : level_1_start '/' level_1_end {
|
140
139
|
result = Interval.new(val[0], val[2])
|
141
140
|
}
|
@@ -303,7 +302,6 @@ rule
|
|
303
302
|
}
|
304
303
|
;
|
305
304
|
|
306
|
-
|
307
305
|
partial_uncertain_or_approximate : pua_base
|
308
306
|
| '(' pua_base ')' UA { result = uoa(val[1], val[3]) }
|
309
307
|
|
@@ -525,6 +523,8 @@ require 'strscan'
|
|
525
523
|
[:Z, @src.matched]
|
526
524
|
when @src.scan(/\?~/)
|
527
525
|
[:UA, [:uncertain!, :approximate!]]
|
526
|
+
when @src.scan(/%/)
|
527
|
+
[:UA, [:uncertain!, :approximate!]]
|
528
528
|
when @src.scan(/\?/)
|
529
529
|
[:UA, [:uncertain!]]
|
530
530
|
when @src.scan(/~/)
|
@@ -535,11 +535,13 @@ require 'strscan'
|
|
535
535
|
[:UNKNOWN, :unknown]
|
536
536
|
when @src.scan(/u/)
|
537
537
|
[:U, @src.matched]
|
538
|
-
when @src.scan(/
|
538
|
+
when @src.scan(/X/)
|
539
|
+
[:U, @src.matched]
|
540
|
+
when @src.scan(/x/)
|
539
541
|
[:X, @src.matched]
|
540
|
-
when @src.scan(/y/)
|
542
|
+
when @src.scan(/y/i)
|
541
543
|
[:LONGYEAR, @src.matched]
|
542
|
-
when @src.scan(/e/)
|
544
|
+
when @src.scan(/e/i)
|
543
545
|
[:E, @src.matched]
|
544
546
|
when @src.scan(/\+/)
|
545
547
|
['+', @src.matched]
|
data/lib/edtf/season.rb
CHANGED
data/lib/edtf/uncertainty.rb
CHANGED
@@ -5,17 +5,17 @@ module EDTF
|
|
5
5
|
class Uncertainty < Struct.new(:year, :month, :day)
|
6
6
|
|
7
7
|
attr_reader :hash_base
|
8
|
-
|
8
|
+
|
9
9
|
def initialize(year = nil, month = nil, day = nil, hash_base = 1)
|
10
10
|
@hash_base = hash_base
|
11
11
|
super(year, month, day)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def hash_base=(base)
|
15
15
|
@hash_map = false
|
16
16
|
@hash_base = base
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def uncertain?(parts = members)
|
20
20
|
[*parts].any? { |p| !!send(p) }
|
21
21
|
end
|
@@ -31,27 +31,27 @@ module EDTF
|
|
31
31
|
[*parts].each { |p| send("#{p}=", false) }
|
32
32
|
self
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def eql?(other)
|
36
36
|
hash == other.hash
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def hash
|
40
40
|
values.zip(hash_map).reduce(0) { |s, (v, h)| s + (v ? h : 0) }
|
41
41
|
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
45
|
def hash_map
|
46
46
|
@hash_map ||= (0...length).map { |i| hash_base << i }
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
end
|
50
50
|
|
51
51
|
|
52
52
|
class Unspecified < Struct.new(:year, :month, :day)
|
53
53
|
|
54
|
-
|
54
|
+
X = 'X'.freeze
|
55
55
|
|
56
56
|
def initialize
|
57
57
|
super Array.new(4),Array.new(2), Array.new(2)
|
@@ -87,15 +87,15 @@ module EDTF
|
|
87
87
|
|
88
88
|
def mask(values)
|
89
89
|
if values[0] && values[0][0] == "-"
|
90
|
-
values[0].delete!("-")
|
90
|
+
values[0].delete!("-")
|
91
91
|
negative_year = true
|
92
92
|
end
|
93
93
|
results = values.zip(members.take(values.length)).map do |value, mask|
|
94
|
-
value.split(//).zip(send(mask)).map { |v,m| m ?
|
94
|
+
value.split(//).zip(send(mask)).map { |v,m| m ? X : v }.join
|
95
95
|
end
|
96
96
|
results[0] = "-#{results[0]}" if negative_year
|
97
97
|
results
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
-
end
|
101
|
+
end
|
data/lib/edtf/version.rb
CHANGED
data/spec/edtf/interval_spec.rb
CHANGED
@@ -153,9 +153,9 @@ module EDTF
|
|
153
153
|
end
|
154
154
|
|
155
155
|
it 'may not have an open start' do
|
156
|
-
expect
|
157
|
-
|
158
|
-
|
156
|
+
expect {
|
157
|
+
Interval.new(:open, Date.today)
|
158
|
+
}.to raise_error(ArgumentError)
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
data/spec/edtf/parser_spec.rb
CHANGED
@@ -1,38 +1,38 @@
|
|
1
1
|
module EDTF
|
2
2
|
describe Parser do
|
3
3
|
describe '#parse' do
|
4
|
-
|
4
|
+
|
5
5
|
it 'parses simple dates "2001-02-03"' do
|
6
6
|
expect(Parser.new.parse('2001-02-03').to_s).to eq('2001-02-03')
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
it 'parses negative years' do
|
10
10
|
expect(Parser.new.parse('-2323').to_s).to eq('-2323-01-01')
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it 'parses the negative year -2101 and sets the precision to :year' do
|
14
14
|
expect(Parser.new.parse('-2101')).to be_year_precision
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it 'parses year zero' do
|
18
18
|
expect(Parser.new.parse('0000').to_s).to eq('0000-01-01')
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
it 'parses date/time with time zones' do
|
22
22
|
expect(Parser.new.parse('2011-08-15T11:19:00+01:00').to_s).to eq('2011-08-15T11:19:00+01:00')
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it 'parses simple intervals like "2007/2008"' do
|
26
26
|
expect(Parser.new.parse('2007/2008')).to be_a(Interval)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
it 'parses uncertain dates' do
|
30
|
-
expect(Parser.new.parse('1984?')).to be_uncertain
|
30
|
+
expect(Parser.new.parse('1984?')).to be_uncertain
|
31
31
|
expect(Parser.new.parse('1984')).to be_certain
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'parses uncertain dates (day precision)' do
|
35
|
-
expect(Parser.new.parse('1984-11-23?')).to be_uncertain
|
35
|
+
expect(Parser.new.parse('1984-11-23?')).to be_uncertain
|
36
36
|
expect(Parser.new.parse('1984-11-23')).to be_certain
|
37
37
|
end
|
38
38
|
|
@@ -41,22 +41,38 @@ module EDTF
|
|
41
41
|
expect(Parser.new.parse('1984-01')).to be_precise
|
42
42
|
end
|
43
43
|
|
44
|
-
it 'parses uncertain approximate dates' do
|
44
|
+
it 'parses draft spec uncertain approximate dates' do
|
45
45
|
expect(Parser.new.parse('1984?~')).to be_uncertain
|
46
46
|
expect(Parser.new.parse('1984?~')).to be_approximate
|
47
47
|
end
|
48
48
|
|
49
|
-
it 'parses
|
49
|
+
it 'parses final spec uncertain approximate dates' do
|
50
|
+
expect(Parser.new.parse('1984%')).to be_uncertain
|
51
|
+
expect(Parser.new.parse('1984%')).to be_approximate
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'parses draft spec unspecified dates' do
|
50
55
|
expect(Parser.new.parse('199u')).to be_unspecified
|
51
56
|
expect(Parser.new.parse('1999-uu-uu')).to be_unspecified
|
52
57
|
expect(Parser.new.parse('199u-01')).to be_unspecified
|
53
58
|
end
|
54
59
|
|
55
|
-
it 'parses
|
60
|
+
it 'parses final spec unspecified dates' do
|
61
|
+
expect(Parser.new.parse('199X')).to be_unspecified
|
62
|
+
expect(Parser.new.parse('1999-XX-XX')).to be_unspecified
|
63
|
+
expect(Parser.new.parse('199X-01')).to be_unspecified
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'parses draft spec negative unspecified dates' do
|
56
67
|
expect(Parser.new.parse('-199u')).to be_unspecified
|
57
68
|
expect(Parser.new.parse('-1999-uu-uu')).to be_unspecified
|
58
69
|
end
|
59
70
|
|
71
|
+
it 'parses final spec negative unspecified dates' do
|
72
|
+
expect(Parser.new.parse('-199X')).to be_unspecified
|
73
|
+
expect(Parser.new.parse('-1999-XX-XX')).to be_unspecified
|
74
|
+
end
|
75
|
+
|
60
76
|
it 'parses open intervals' do
|
61
77
|
expect(Parser.new.parse('2004-01-01/open')).to be_open
|
62
78
|
end
|
@@ -65,20 +81,20 @@ module EDTF
|
|
65
81
|
expect(Parser.new.parse('2004-01-01/unknown')).to be_unknown_end
|
66
82
|
expect(Parser.new.parse('unknown/2004-01-01')).to be_unknown_start
|
67
83
|
end
|
68
|
-
|
84
|
+
|
69
85
|
it 'parses intervals with uncertain or approximate dates' do
|
70
86
|
expect(Parser.new.parse('1984-06-02?/2004-08-08~').from).to be_uncertain
|
71
87
|
expect(Parser.new.parse('1984-06-02?/2004-08-08~').to).to be_approximate
|
72
88
|
end
|
73
|
-
|
89
|
+
|
74
90
|
it 'parses positive long years' do
|
75
91
|
expect(Parser.new.parse('y170000002').year).to eq(170000002)
|
76
92
|
end
|
77
|
-
|
93
|
+
|
78
94
|
it 'parses negative long years' do
|
79
95
|
expect(Parser.new.parse('y-170000002').year).to eq(-170000002)
|
80
96
|
end
|
81
|
-
|
97
|
+
|
82
98
|
it 'parses season codes' do
|
83
99
|
expect(Parser.new.parse('2003-23')).to be_autumn
|
84
100
|
end
|
@@ -86,14 +102,14 @@ module EDTF
|
|
86
102
|
it 'parses calendar names' do
|
87
103
|
expect(Parser.new.parse('2001-02-03^xyz').calendar).to eq('xyz')
|
88
104
|
end
|
89
|
-
|
105
|
+
|
90
106
|
it 'parses season qualifiers' do
|
91
107
|
d = Parser.new.parse('2003-23^european')
|
92
108
|
expect(d).to be_autumn
|
93
109
|
expect(d).to be_qualified
|
94
110
|
expect(d.qualifier).to eq('european')
|
95
111
|
end
|
96
|
-
|
112
|
+
|
97
113
|
it 'parses uncertain seasons' do
|
98
114
|
expect(Parser.new.parse!('2003-23?')).to be_uncertain
|
99
115
|
end
|
@@ -102,20 +118,26 @@ module EDTF
|
|
102
118
|
expect(Parser.new.parse!('2003-23~')).to be_approximate
|
103
119
|
end
|
104
120
|
|
105
|
-
it 'parses uncertain and approximate seasons' do
|
121
|
+
it 'parses draft spec uncertain and approximate seasons' do
|
106
122
|
expect(Parser.new.parse!('2003-23?~')).to be_uncertain
|
107
123
|
expect(Parser.new.parse!('2003-23?~')).to be_approximate
|
108
124
|
end
|
109
|
-
|
110
|
-
|
125
|
+
|
126
|
+
it 'parses final spec uncertain and approximate seasons' do
|
127
|
+
expect(Parser.new.parse!('2003-23%')).to be_uncertain
|
128
|
+
expect(Parser.new.parse!('2003-23%')).to be_approximate
|
129
|
+
end
|
130
|
+
|
111
131
|
it 'parses positive scientific long years' do
|
112
132
|
expect(Parser.new.parse('y17e7').year).to eq(170000000)
|
133
|
+
expect(Parser.new.parse('Y17E7').year).to eq(170000000)
|
113
134
|
end
|
114
|
-
|
135
|
+
|
115
136
|
it 'parses negative scientific long years' do
|
116
|
-
expect(Parser.new.parse('y-17e7').year).to eq(-170000000)
|
137
|
+
expect(Parser.new.parse('y-17e7').year).to eq(-170000000)
|
138
|
+
expect(Parser.new.parse('Y-17E7').year).to eq(-170000000)
|
117
139
|
end
|
118
|
-
|
140
|
+
|
119
141
|
it 'parses masked precision date strings (decades)' do
|
120
142
|
d = Parser.new.parse!('198x')
|
121
143
|
expect(d).to be_cover(Date.new(1983,3,12))
|
@@ -127,17 +149,17 @@ module EDTF
|
|
127
149
|
expect(d).to be_cover(Date.new(1848,1,14))
|
128
150
|
expect(d).not_to be_cover(Date.new(1799,12,31))
|
129
151
|
end
|
130
|
-
|
152
|
+
|
131
153
|
it 'parses multiple dates (years)' do
|
132
154
|
d = Parser.new.parse!('{1667,1668, 1670..1672}')
|
133
155
|
expect(d.map(&:year)).to eq([1667,1668,1670,1671,1672])
|
134
156
|
end
|
135
|
-
|
157
|
+
|
136
158
|
it 'parses multiple dates (mixed years and months)' do
|
137
159
|
d = Parser.new.parse!('{1960, 1961-12}')
|
138
160
|
expect(d.map { |x| [x.year,x.month] }).to eq([[1960,1],[1961,12]])
|
139
161
|
end
|
140
|
-
|
162
|
+
|
141
163
|
it 'parses choice lists (One of the years 1667, 1668, 1670, 1671, 1672)' do
|
142
164
|
d = Parser.new.parse!('[1667,1668, 1670..1672]')
|
143
165
|
expect(d.map(&:year)).to eq([1667,1668,1670,1671,1672])
|
@@ -157,52 +179,95 @@ module EDTF
|
|
157
179
|
d = Parser.new.parse!('[1760-01, 1760-02, 1760-12..]')
|
158
180
|
expect(d.length).to eq(3)
|
159
181
|
end
|
160
|
-
|
182
|
+
|
161
183
|
it 'parses intern unspecified "199u-01-01"' do
|
162
|
-
expect(Parser.new.parse!('199u-01-01').unspecified.to_s).to eq('
|
184
|
+
expect(Parser.new.parse!('199u-01-01').unspecified.to_s).to eq('sssX-ss-ss')
|
163
185
|
end
|
164
|
-
|
186
|
+
|
165
187
|
it 'parses intern unspecified "19uu-01-01"' do
|
166
|
-
expect(Parser.new.parse!('19uu-01-01').unspecified.to_s).to eq('
|
188
|
+
expect(Parser.new.parse!('19uu-01-01').unspecified.to_s).to eq('ssXX-ss-ss')
|
167
189
|
end
|
168
190
|
|
169
191
|
it 'parses intern unspecified "199u-uu-01"' do
|
170
|
-
expect(Parser.new.parse!('199u-uu-01').unspecified.to_s).to eq('
|
192
|
+
expect(Parser.new.parse!('199u-uu-01').unspecified.to_s).to eq('sssX-XX-ss')
|
171
193
|
end
|
172
|
-
|
194
|
+
|
173
195
|
it 'parses intern unspecified "19uu-uu-01"' do
|
174
|
-
expect(Parser.new.parse!('19uu-uu-01').unspecified.to_s).to eq('
|
196
|
+
expect(Parser.new.parse!('19uu-uu-01').unspecified.to_s).to eq('ssXX-XX-ss')
|
175
197
|
end
|
176
198
|
|
177
199
|
it 'parses intern unspecified "199u-uu-uu"' do
|
178
|
-
expect(Parser.new.parse!('199u-uu-uu').unspecified.to_s).to eq('
|
200
|
+
expect(Parser.new.parse!('199u-uu-uu').unspecified.to_s).to eq('sssX-XX-XX')
|
179
201
|
end
|
180
|
-
|
202
|
+
|
181
203
|
it 'parses intern unspecified "19uu-uu-uu"' do
|
182
|
-
expect(Parser.new.parse!('19uu-uu-uu').unspecified.to_s).to eq('
|
204
|
+
expect(Parser.new.parse!('19uu-uu-uu').unspecified.to_s).to eq('ssXX-XX-XX')
|
183
205
|
end
|
184
206
|
|
185
207
|
it 'parses intern unspecified "199u-01-uu"' do
|
186
|
-
expect(Parser.new.parse!('199u-01-uu').unspecified.to_s).to eq('
|
208
|
+
expect(Parser.new.parse!('199u-01-uu').unspecified.to_s).to eq('sssX-ss-XX')
|
187
209
|
end
|
188
|
-
|
210
|
+
|
189
211
|
it 'parses intern unspecified "19uu-01-uu"' do
|
190
|
-
expect(Parser.new.parse!('19uu-01-uu').unspecified.to_s).to eq('
|
212
|
+
expect(Parser.new.parse!('19uu-01-uu').unspecified.to_s).to eq('ssXX-ss-XX')
|
191
213
|
end
|
192
214
|
|
193
215
|
it 'parses intern unspecified "1999-uu-01"' do
|
194
|
-
expect(Parser.new.parse!('1999-uu-01').unspecified.to_s).to eq('ssss-
|
216
|
+
expect(Parser.new.parse!('1999-uu-01').unspecified.to_s).to eq('ssss-XX-ss')
|
195
217
|
end
|
196
218
|
|
197
219
|
it 'parses intern unspecified "2004-06-uu"' do
|
198
|
-
expect(Parser.new.parse!('2004-06-uu').unspecified.to_s).to eq('ssss-ss-
|
220
|
+
expect(Parser.new.parse!('2004-06-uu').unspecified.to_s).to eq('ssss-ss-XX')
|
199
221
|
end
|
200
222
|
|
201
|
-
|
202
223
|
it 'parses internal unspecified interval "2004-06-uu/2004-07-03"' do
|
203
224
|
expect(Parser.new.parse!('2004-06-uu/2004-07-03').from).to eq(Date.new(2004,6,1))
|
204
225
|
end
|
205
|
-
|
226
|
+
|
227
|
+
it 'parses intern unspecified "199X-01-01"' do
|
228
|
+
expect(Parser.new.parse!('199X-01-01').unspecified.to_s).to eq('sssX-ss-ss')
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'parses intern unspecified "19XX-01-01"' do
|
232
|
+
expect(Parser.new.parse!('19XX-01-01').unspecified.to_s).to eq('ssXX-ss-ss')
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'parses intern unspecified "199X-XX-01"' do
|
236
|
+
expect(Parser.new.parse!('199X-XX-01').unspecified.to_s).to eq('sssX-XX-ss')
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'parses intern unspecified "19XX-XX-01"' do
|
240
|
+
expect(Parser.new.parse!('19XX-XX-01').unspecified.to_s).to eq('ssXX-XX-ss')
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'parses intern unspecified "199X-XX-XX"' do
|
244
|
+
expect(Parser.new.parse!('199X-XX-XX').unspecified.to_s).to eq('sssX-XX-XX')
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'parses intern unspecified "19XX-XX-XX"' do
|
248
|
+
expect(Parser.new.parse!('19XX-XX-XX').unspecified.to_s).to eq('ssXX-XX-XX')
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'parses intern unspecified "199X-01-XX"' do
|
252
|
+
expect(Parser.new.parse!('199X-01-XX').unspecified.to_s).to eq('sssX-ss-XX')
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'parses intern unspecified "19XX-01-XX"' do
|
256
|
+
expect(Parser.new.parse!('19XX-01-XX').unspecified.to_s).to eq('ssXX-ss-XX')
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'parses intern unspecified "1999-XX-01"' do
|
260
|
+
expect(Parser.new.parse!('1999-XX-01').unspecified.to_s).to eq('ssss-XX-ss')
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'parses intern unspecified "2004-06-XX"' do
|
264
|
+
expect(Parser.new.parse!('2004-06-XX').unspecified.to_s).to eq('ssss-ss-XX')
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'parses internal unspecified interval "2004-06-XX/2004-07-03"' do
|
268
|
+
expect(Parser.new.parse!('2004-06-XX/2004-07-03').from).to eq(Date.new(2004,6,1))
|
269
|
+
end
|
270
|
+
|
206
271
|
it 'parses "2004?-06-11": uncertain year; month, day known' do
|
207
272
|
d = Parser.new.parse!('2004?-06-11')
|
208
273
|
expect(d.uncertain?(:year)).to be true
|
@@ -215,7 +280,7 @@ module EDTF
|
|
215
280
|
expect(d.approximate?(:month)).to be true
|
216
281
|
expect(d.approximate?(:day)).to be false
|
217
282
|
end
|
218
|
-
|
283
|
+
|
219
284
|
it 'parses "2004-(06)?-11": uncertain month, year and day known' do
|
220
285
|
d = Parser.new.parse!('2004-(06)?-11')
|
221
286
|
|
@@ -238,65 +303,65 @@ module EDTF
|
|
238
303
|
|
239
304
|
it 'parses "2004-(06)?~": year known, month within year is approximate and uncertain' do
|
240
305
|
d = Parser.new.parse!('2004-(06)?~')
|
241
|
-
|
306
|
+
|
242
307
|
expect(d.approximate?(:year)).to be false
|
243
308
|
expect(d.uncertain?(:year)).to be false
|
244
|
-
|
309
|
+
|
245
310
|
expect(d.approximate?(:month)).to be true
|
246
311
|
expect(d.uncertain?(:month)).to be true
|
247
|
-
|
312
|
+
|
248
313
|
expect(d.approximate?(:day)).to be false
|
249
314
|
expect(d.uncertain?(:day)).to be false
|
250
315
|
end
|
251
316
|
|
252
317
|
it 'parses "2004-(06-11)?": year known, month and day uncertain' do
|
253
318
|
d = Parser.new.parse!('2004-(06-11)?')
|
254
|
-
|
319
|
+
|
255
320
|
expect(d.approximate?(:year)).to be false
|
256
321
|
expect(d.uncertain?(:year)).to be false
|
257
|
-
|
322
|
+
|
258
323
|
expect(d.approximate?(:month)).to be false
|
259
324
|
expect(d.uncertain?(:month)).to be true
|
260
|
-
|
325
|
+
|
261
326
|
expect(d.approximate?(:day)).to be false
|
262
327
|
expect(d.uncertain?(:day)).to be true
|
263
328
|
end
|
264
329
|
|
265
330
|
it 'parses "2004?-06-(11)~": year uncertain, month known, day approximate' do
|
266
331
|
d = Parser.new.parse('2004?-06-(11)~')
|
267
|
-
|
332
|
+
|
268
333
|
expect(d.approximate?(:year)).to be false
|
269
334
|
expect(d.uncertain?(:year)).to be true
|
270
|
-
|
335
|
+
|
271
336
|
expect(d.approximate?(:month)).to be false
|
272
337
|
expect(d.uncertain?(:month)).to be false
|
273
|
-
|
338
|
+
|
274
339
|
expect(d.approximate?(:day)).to be true
|
275
340
|
expect(d.uncertain?(:day)).to be false
|
276
341
|
end
|
277
|
-
|
342
|
+
|
278
343
|
it 'parses "(2004-(06)~)?": year uncertain and month is both uncertain and approximate' do
|
279
344
|
d = Parser.new.parse!('(2004-(06)~)?')
|
280
|
-
|
345
|
+
|
281
346
|
expect(d.approximate?(:year)).to be false
|
282
347
|
expect(d.uncertain?(:year)).to be true
|
283
|
-
|
348
|
+
|
284
349
|
expect(d.approximate?(:month)).to be true
|
285
350
|
expect(d.uncertain?(:month)).to be true
|
286
|
-
|
351
|
+
|
287
352
|
expect(d.approximate?(:day)).to be false
|
288
353
|
expect(d.uncertain?(:day)).to be false
|
289
354
|
end
|
290
355
|
|
291
356
|
it 'parses "2004~-(06)?-01~": year and day approximate, month uncertain' do
|
292
357
|
d = Parser.new.parse!("2004~-(06)?-01~")
|
293
|
-
|
358
|
+
|
294
359
|
expect(d.approximate?(:year)).to be true
|
295
360
|
expect(d.uncertain?(:year)).to be false
|
296
|
-
|
361
|
+
|
297
362
|
expect(d.approximate?(:month)).to be false
|
298
363
|
expect(d.uncertain?(:month)).to be true
|
299
|
-
|
364
|
+
|
300
365
|
expect(d.approximate?(:day)).to be true
|
301
366
|
expect(d.uncertain?(:day)).to be false
|
302
367
|
end
|
@@ -306,10 +371,10 @@ module EDTF
|
|
306
371
|
|
307
372
|
expect(d.approximate?(:year)).to be true
|
308
373
|
expect(d.uncertain?(:year)).to be false
|
309
|
-
|
374
|
+
|
310
375
|
expect(d.approximate?(:month)).to be false
|
311
376
|
expect(d.uncertain?(:month)).to be true
|
312
|
-
|
377
|
+
|
313
378
|
expect(d.approximate?(:day)).to be true
|
314
379
|
expect(d.uncertain?(:day)).to be true
|
315
380
|
end
|
@@ -319,10 +384,10 @@ module EDTF
|
|
319
384
|
|
320
385
|
expect(d.approximate?(:year)).to be true
|
321
386
|
expect(d.uncertain?(:year)).to be false
|
322
|
-
|
387
|
+
|
323
388
|
expect(d.approximate?(:month)).to be false
|
324
389
|
expect(d.uncertain?(:month)).to be true
|
325
|
-
|
390
|
+
|
326
391
|
expect(d.approximate?(:day)).to be true
|
327
392
|
expect(d.uncertain?(:day)).to be true
|
328
393
|
end
|
@@ -332,10 +397,10 @@ module EDTF
|
|
332
397
|
|
333
398
|
expect(d.approximate?(:year)).to be true
|
334
399
|
expect(d.uncertain?(:year)).to be false
|
335
|
-
|
400
|
+
|
336
401
|
expect(d.approximate?(:month)).to be false
|
337
402
|
expect(d.uncertain?(:month)).to be true
|
338
|
-
|
403
|
+
|
339
404
|
expect(d.approximate?(:day)).to be false
|
340
405
|
expect(d.uncertain?(:day)).to be false
|
341
406
|
end
|
@@ -346,16 +411,16 @@ module EDTF
|
|
346
411
|
|
347
412
|
expect(d.approximate?(:year)).to be true
|
348
413
|
expect(d.uncertain?(:year)).to be true
|
349
|
-
|
414
|
+
|
350
415
|
expect(d.approximate?(:month)).to be false
|
351
416
|
expect(d.uncertain?(:month)).to be true
|
352
|
-
|
417
|
+
|
353
418
|
expect(d.approximate?(:day)).to be false
|
354
419
|
expect(d.uncertain?(:day)).to be false
|
355
420
|
|
356
421
|
end
|
357
422
|
|
358
|
-
|
423
|
+
|
359
424
|
|
360
425
|
end
|
361
426
|
end
|