edtf 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,7 +34,8 @@ rule
34
34
 
35
35
 
36
36
  date_time : date T time {
37
- result = DateTime.new(val[0].year, val[0].month, val[0].day, *val[2])
37
+ result = DateTime.new(val[0].year, val[0].month, val[0].day, *val[2])
38
+ result.skip_timezone = (val[2].length == 3)
38
39
  }
39
40
 
40
41
  time : base_time
@@ -53,8 +54,8 @@ rule
53
54
  positive_zone_offset : zone_offset_hour
54
55
  | '0' '0' ':' '0' '0' { result = 0 }
55
56
  ;
56
-
57
-
57
+
58
+
58
59
  zone_offset_hour : d01_13 ':' minute { result = Rational(val[0] * 60 + val[2], 1440) }
59
60
  | '1' '4' ':' '0' '0' { result = Rational(840, 1440) }
60
61
  | '0' '0' ':' d01_59 { result = Rational(val[3], 1440) }
@@ -66,7 +67,7 @@ rule
66
67
 
67
68
  month : d01_12
68
69
  day : d01_31
69
-
70
+
70
71
  year_month : year '-' month { result = [val[0], val[2]] }
71
72
 
72
73
  # We raise an exception if there are two many days for the month, but
@@ -134,7 +135,7 @@ rule
134
135
  }
135
136
 
136
137
  level_1_start : date | partial_uncertain_or_approximate | unspecified | partial_unspecified | UNKNOWN
137
-
138
+
138
139
  level_1_end : level_1_start | OPEN
139
140
 
140
141
 
@@ -150,7 +151,7 @@ rule
150
151
  result.precision = :year
151
152
  }
152
153
  ;
153
-
154
+
154
155
  long_year :
155
156
  positive_digit digit digit digit digit {
156
157
  result = val.zip([10000,1000,100,10,1]).reduce(0) { |s,(a,b)| s += a * b }
@@ -233,11 +234,11 @@ rule
233
234
  | list_elements { result = EDTF::Set.new(*val[0]) }
234
235
  | later { result = EDTF::Set.new(val[0]).later! }
235
236
  ;
236
-
237
+
237
238
  list_elements : list_element { result = [val[0]].flatten }
238
239
  | list_elements ',' list_element { result = val[0] + [val[2]].flatten }
239
240
  ;
240
-
241
+
241
242
  list_element : atomic
242
243
  | consecutives
243
244
  ;
@@ -289,18 +290,18 @@ rule
289
290
  result.unspecified!(:month)
290
291
  }
291
292
  ;
292
-
293
+
293
294
 
294
295
  partial_uncertain_or_approximate : pua_base
295
296
  | '(' pua_base ')' UA { result = uoa(val[1], val[3]) }
296
-
297
+
297
298
  pua_base :
298
299
  pua_year { result = val[0].year_precision! }
299
300
  | pua_year_month { result = val[0][0].month_precision! }
300
301
  | pua_year_month_day { result = val[0].day_precision! }
301
-
302
+
302
303
  pua_year : year UA { result = uoa(Date.new(val[0]), val[1], :year) }
303
-
304
+
304
305
  pua_year_month :
305
306
  pua_year '-' month ua {
306
307
  result = [uoa(val[0].change(:month => val[2]), val[3], [:month, :year])]
@@ -315,7 +316,7 @@ rule
315
316
  result = [uoa(val[0].change(:month => val[2]), val[4], [:month]), true]
316
317
  }
317
318
  ;
318
-
319
+
319
320
  pua_year_month_day :
320
321
  pua_year_month '-' day ua {
321
322
  result = uoa(val[0][0].change(:day => val[2]), val[3], val[0][1] ? [:day] : nil)
@@ -355,7 +356,7 @@ rule
355
356
  # result = [uoa(result, val[7], [:year]), true]
356
357
  # }
357
358
  ;
358
-
359
+
359
360
  ua : { result = [] } | UA
360
361
 
361
362
  # ---- Auxiliary Rules ----
@@ -363,7 +364,7 @@ rule
363
364
  digit : '0' { result = 0 }
364
365
  | positive_digit
365
366
  ;
366
-
367
+
367
368
  positive_digit : '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
368
369
 
369
370
  d01_12 : '0' positive_digit { result = val[1] }
@@ -375,7 +376,7 @@ rule
375
376
  d01_13 : d01_12
376
377
  | '1' '3' { result = 13 }
377
378
  ;
378
-
379
+
379
380
  d01_23 : '0' positive_digit { result = val[1] }
380
381
  | '1' digit { result = 10 + val[1] }
381
382
  | '2' '0' { result = 20 }
@@ -410,7 +411,7 @@ rule
410
411
  | '4' digit { result = 40 + val[1] }
411
412
  | '5' digit { result = 50 + val[1] }
412
413
  ;
413
-
414
+
414
415
  d00_59 : '0' '0'
415
416
  | d01_59
416
417
  ;
@@ -442,32 +443,32 @@ require 'strscan'
442
443
  :level => 2,
443
444
  :debug => false
444
445
  }.freeze
445
-
446
+
446
447
  class << self; attr_reader :defaults; end
447
-
448
+
448
449
  attr_reader :options
449
-
450
+
450
451
  def initialize(options = {})
451
452
  @options = Parser.defaults.merge(options)
452
453
  end
453
-
454
+
454
455
  def debug?
455
456
  !!(options[:debug] || ENV['DEBUG'])
456
457
  end
457
-
458
+
458
459
  def parse(input)
459
460
  parse!(input)
460
461
  rescue => e
461
462
  warn e.message if debug?
462
463
  nil
463
464
  end
464
-
465
+
465
466
  def parse!(input)
466
467
  @yydebug = debug?
467
468
  @src = StringScanner.new(input)
468
469
  do_parse
469
470
  end
470
-
471
+
471
472
  def on_error(tid, value, stack)
472
473
  raise ArgumentError,
473
474
  "failed to parse date: unexpected '#{value}' at #{stack.inspect}"
@@ -479,9 +480,9 @@ require 'strscan'
479
480
  end
480
481
  date
481
482
  end
482
-
483
+
483
484
  alias uoa apply_uncertainty
484
-
485
+
485
486
  def next_token
486
487
  case
487
488
  when @src.eos?
@@ -489,7 +490,7 @@ require 'strscan'
489
490
  # when @src.scan(/\s+/)
490
491
  # ignore whitespace
491
492
  when @src.scan(/\(/)
492
- ['(', @src.matched]
493
+ ['(', @src.matched]
493
494
  # when @src.scan(/\)\?~-/)
494
495
  # [:PUA, [:uncertain!, :approximate!]]
495
496
  # when @src.scan(/\)\?-/)
@@ -552,4 +553,4 @@ require 'strscan'
552
553
  end
553
554
 
554
555
 
555
- # -*- racc -*-
556
+ # -*- racc -*-
@@ -44,7 +44,9 @@ module EDTF
44
44
  end
45
45
 
46
46
  def edtf
47
- parenthesize(dates.map { |d| d.respond_to?(:edtf) ? d.edtf : d.to_s }.sort.join(', '))
47
+ parenthesize(dates.map { |d|
48
+ d.respond_to?(:edtf) ? d.edtf : d.to_s
49
+ }.sort.join(','))
48
50
  end
49
51
 
50
52
  def to_a
@@ -1,3 +1,3 @@
1
1
  module EDTF
2
- VERSION = '2.1.0'.freeze
2
+ VERSION = '2.2.0'.freeze
3
3
  end
@@ -2,14 +2,14 @@ describe 'Date/DateTime' do
2
2
 
3
3
  describe 'class methods' do
4
4
  it 'responds to edtf' do
5
- Date.should respond_to(:edtf)
5
+ expect(Date).to respond_to(:edtf)
6
6
  end
7
7
  end
8
8
 
9
9
  describe 'instance methods' do
10
10
  [:uncertain?, :approximate?, :unspecified?, :uncertain, :approximate, :unspecified].each do |method|
11
11
  it "responds to #{method}" do
12
- Date.new.respond_to?(method).should == true
12
+ expect(Date.new.respond_to?(method)).to eq(true)
13
13
  end
14
14
  end
15
15
  end
@@ -22,19 +22,19 @@ describe 'Date/DateTime' do
22
22
  end
23
23
 
24
24
  it 'copies uncertainty' do
25
- date.dup.should be_uncertain
25
+ expect(date.dup).to be_uncertain
26
26
  end
27
27
 
28
28
  it 'copies approximate' do
29
- date.dup.should be_approximate
29
+ expect(date.dup).to be_approximate
30
30
  end
31
31
 
32
32
  it 'copies precision' do
33
- date.dup.precision.should == :month
33
+ expect(date.dup.precision).to eq(:month)
34
34
  end
35
35
 
36
36
  it 'copies uncertainty by value' do
37
- lambda { date.dup.certain! }.should_not change { date.uncertain? }
37
+ expect { date.dup.certain! }.not_to change { date.uncertain? }
38
38
  end
39
39
 
40
40
  end
@@ -43,12 +43,12 @@ describe 'Date/DateTime' do
43
43
  let(:date) { Date.today }
44
44
 
45
45
  it 'has day precision by default' do
46
- date.should be_day_precision
46
+ expect(date).to be_day_precision
47
47
  end
48
48
 
49
49
  it '#day_precison returns a new date object' do
50
- date.day_precision.should_not equal(date)
51
- date.day_precision.should == date
50
+ expect(date.day_precision).not_to equal(date)
51
+ expect(date.day_precision).to eq(date)
52
52
  end
53
53
 
54
54
  end
@@ -58,38 +58,38 @@ describe 'Date/DateTime' do
58
58
  let(:date) { Date.edtf('2004?') }
59
59
 
60
60
  it 'returns a new date with the negated year' do
61
- date.negate.year.should == (date.year * -1)
61
+ expect(date.negate.year).to eq(date.year * -1)
62
62
  end
63
63
 
64
64
  it 'returns a new date with the same month' do
65
- date.negate.month.should == date.month
65
+ expect(date.negate.month).to eq(date.month)
66
66
  end
67
67
 
68
68
  it 'returns a new date with the same day' do
69
- date.negate.day.should == date.day
69
+ expect(date.negate.day).to eq(date.day)
70
70
  end
71
71
 
72
72
  it 'returns a new date with the same precision' do
73
- date.negate.precision.should == date.precision
73
+ expect(date.negate.precision).to eq(date.precision)
74
74
  end
75
75
  end
76
76
 
77
77
  describe '#succ' do
78
78
 
79
79
  it 'the successor of 2004 is 2005' do
80
- Date.edtf('2004').succ.year.should == 2005
80
+ expect(Date.edtf('2004').succ.year).to eq(2005)
81
81
  end
82
82
 
83
83
  it 'the successor of 2004-03 is 2004-04' do
84
- Date.edtf('2004-03').succ.strftime('%Y-%m').should == '2004-04'
84
+ expect(Date.edtf('2004-03').succ.strftime('%Y-%m')).to eq('2004-04')
85
85
  end
86
86
 
87
87
  it 'the successor of 2004-03-01 is 2004-03-02' do
88
- Date.edtf('2004-03-01').succ.strftime('%Y-%m-%d').should == '2004-03-02'
88
+ expect(Date.edtf('2004-03-01').succ.strftime('%Y-%m-%d')).to eq('2004-03-02')
89
89
  end
90
90
 
91
91
  it "the successor of 1999 has year precision" do
92
- Date.edtf('1999').succ.should be_year_precision
92
+ expect(Date.edtf('1999').succ).to be_year_precision
93
93
  end
94
94
 
95
95
  end
@@ -97,7 +97,7 @@ describe 'Date/DateTime' do
97
97
  describe '#next' do
98
98
 
99
99
  it 'returns the successor when given no argument' do
100
- Date.edtf('1999').next[0].year.should == 2000
100
+ expect(Date.edtf('1999').next[0].year).to eq(2000)
101
101
  end
102
102
 
103
103
  it 'returns an array of the next 3 elements when passed 3 as an argument' do
@@ -111,18 +111,18 @@ describe 'Date/DateTime' do
111
111
  let(:date) { Date.edtf('2004-09?~') }
112
112
 
113
113
  it 'returns a copy of the date if given empty option hash' do
114
- date.change({}).should == date
114
+ expect(date.change({})).to eq(date)
115
115
  end
116
116
 
117
117
  it 'the returned copy is not identical at object level' do
118
- date.change({}).should_not equal(date)
118
+ expect(date.change({})).not_to equal(date)
119
119
  end
120
120
 
121
121
  describe 'when given a new year' do
122
122
  let(:changeset) { { :year => 1999 } }
123
123
 
124
124
  it 'returns a new date instance with the changed year' do
125
- date.change(changeset).year.should == 1999
125
+ expect(date.change(changeset).year).to eq(1999)
126
126
  end
127
127
 
128
128
  end
@@ -131,13 +131,13 @@ describe 'Date/DateTime' do
131
131
  let(:changeset) { { :precision => :year } }
132
132
 
133
133
  it 'returns a new date instance with the changed precision' do
134
- date.change(changeset).precision.should == :year
134
+ expect(date.change(changeset).precision).to eq(:year)
135
135
  end
136
136
 
137
137
  end
138
138
 
139
139
  it 'copies extended values by value' do
140
- lambda { date.change({}).approximate! }.should_not change { date.approximate? }
140
+ expect { date.change({}).approximate! }.not_to change { date.approximate? }
141
141
  end
142
142
 
143
143
  end
@@ -146,22 +146,22 @@ describe 'Date/DateTime' do
146
146
 
147
147
  let(:date) { Date.new }
148
148
 
149
- it { Date.new.should_not be_uncertain }
149
+ it { expect(Date.new).not_to be_uncertain }
150
150
 
151
151
  [:year, :month, :day].each do |part|
152
152
  it "should not be uncertain by default (#{part})" do
153
- Date.new.uncertain?(part).should == false
153
+ expect(Date.new.uncertain?(part)).to eq(false)
154
154
  end
155
155
 
156
156
  it "should be uncertain if set to uncertain (#{part})" do
157
157
  date.uncertain.send("#{part}=", true)
158
- date.uncertain?(part).should == true
158
+ expect(date.uncertain?(part)).to eq(true)
159
159
  end
160
160
 
161
161
  ([:year, :month, :day] - [part]).each do |other|
162
162
  it "#{other} should not be uncertain if #{part} is uncertain" do
163
163
  date.uncertain.send("#{part}=", true)
164
- date.uncertain?(other).should == false
164
+ expect(date.uncertain?(other)).to eq(false)
165
165
  end
166
166
  end
167
167
 
@@ -172,11 +172,11 @@ describe 'Date/DateTime' do
172
172
  describe 'uncertain/approximate hash' do
173
173
 
174
174
  it 'is 0 by default' do
175
- Date.new().send(:ua_hash).should == 0
175
+ expect(Date.new().send(:ua_hash)).to eq(0)
176
176
  end
177
177
 
178
178
  it 'is 8 for approximate year' do
179
- Date.new.approximate!(:year).send(:ua_hash).should == 8
179
+ expect(Date.new.approximate!(:year).send(:ua_hash)).to eq(8)
180
180
  end
181
181
 
182
182
  end
@@ -188,15 +188,15 @@ describe 'Date/DateTime' do
188
188
  describe '#values' do
189
189
 
190
190
  it 'returns [2011,12,24] for christmas' do
191
- xmas.values.should == [2011,12,24]
191
+ expect(xmas.values).to eq([2011,12,24])
192
192
  end
193
193
 
194
194
  it 'returns [2011,12] for christmas with month precision' do
195
- xmas.month_precision!.values.should == [2011,12]
195
+ expect(xmas.month_precision!.values).to eq([2011,12])
196
196
  end
197
197
 
198
198
  it 'returns [2011] for christmas with year precision' do
199
- xmas.year_precision!.values.should == [2011]
199
+ expect(xmas.year_precision!.values).to eq([2011])
200
200
  end
201
201
 
202
202
  end
@@ -204,15 +204,15 @@ describe 'Date/DateTime' do
204
204
  describe '#<=>' do
205
205
 
206
206
  it '2009-12-24 should be less than 2011-12-31' do
207
- Date.new(2009,12,24).should < Date.new(2011,12,31)
207
+ expect(Date.new(2009,12,24)).to be < Date.new(2011,12,31)
208
208
  end
209
209
 
210
210
  it '2009-12-24 should be less than 2011-12' do
211
- Date.new(2009,12,24).should < Date.edtf('2011-12')
211
+ expect(Date.new(2009,12,24)).to be < Date.edtf('2011-12')
212
212
  end
213
213
 
214
214
  it '2009-12-24 should be less than 2011' do
215
- Date.new(2009,12,24).should < Date.edtf('2011')
215
+ expect(Date.new(2009,12,24)).to be < Date.edtf('2011')
216
216
  end
217
217
 
218
218
 
@@ -221,20 +221,20 @@ describe 'Date/DateTime' do
221
221
  describe '#==' do
222
222
 
223
223
  it "xmas and new year's eve are not equal" do
224
- xmas.should_not == new_years_eve
224
+ expect(xmas).not_to eq(new_years_eve)
225
225
  end
226
226
 
227
227
  it "xmas and new year's eve are equal using month percision" do
228
- xmas.month_precision!.should == new_years_eve.month_precision!
228
+ expect(xmas.month_precision!).to eq(new_years_eve.month_precision!)
229
229
  end
230
230
 
231
231
  it "xmas and january 24 are not equal using month percision" do
232
- xmas.month_precision!.should_not == xmas.month_precision!.next
232
+ expect(xmas.month_precision!).not_to eq(xmas.month_precision!.next)
233
233
  end
234
234
 
235
235
 
236
236
  it "xmas and new year's eve are equal using year percision" do
237
- xmas.year_precision!.should == new_years_eve.year_precision!
237
+ expect(xmas.year_precision!).to eq(new_years_eve.year_precision!)
238
238
  end
239
239
 
240
240
  end