fat_core 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d000b065f782f0546bf962200c5f116e967d80a6
4
- data.tar.gz: ac1d4d5be0a403a0fc9fc9ec6d824feb0020d8a2
3
+ metadata.gz: db29f2ee46cdaa3602d37b2a1f9af253f07e651e
4
+ data.tar.gz: 85dddc16c5d33ca582b081a138de6a3fb617522d
5
5
  SHA512:
6
- metadata.gz: 3ad43b96b23a701ec911e90d7d506b50ba75bc8c82049559e0bec3995bf8d8ef7874524851385a5825599d39d00c8ea1d9ce2784b2ba7e5d0c2c86acca473354
7
- data.tar.gz: b5e704fe49917fea1d1753a9e1874e330616b0d6cf698b70a4d1be7b30dbba864c560f6b278b549db889340e63be26776eb5b3a35531b0fe57b0fd87dfb4daf5
6
+ metadata.gz: 6badb8b5fc9cb201aa41a8244f8b53b95f180ce683d22b8b1e1be6fc352b0783b50f6149b402b54b354aa207079b33f31bb1b38a827c726aa10d2fc09501a320
7
+ data.tar.gz: 5fc8edbd029a4de5f7922c2ca3e7f4cb06f1bb125dd3a366aab98f4c85ec877beef09f557bfc069b098ffb047f6b388f54bfcaafcaa6d71aeb34e8ed94c7052e
@@ -65,7 +65,7 @@ class Date
65
65
  def self.parse_spec(spec, spec_type = :from)
66
66
  spec = spec.to_s.strip
67
67
  unless [:from, :to].include?(spec_type)
68
- raise ArgumentError "invalid date spec type: '#{spec_type}'"
68
+ raise ArgumentError, "invalid date spec type: '#{spec_type}'"
69
69
  end
70
70
 
71
71
  today = Date.current
@@ -491,7 +491,7 @@ class Date
491
491
  when :day
492
492
  self
493
493
  else
494
- raise LogicError, "unknown chunk sym: '#{sym}'"
494
+ raise ArgumentError, "unknown chunk sym: '#{sym}'"
495
495
  end
496
496
  end
497
497
 
@@ -205,6 +205,8 @@ class Period
205
205
  60
206
206
  when :quarter
207
207
  90
208
+ when :half
209
+ 180
208
210
  when :year
209
211
  365
210
212
  when :irregular
@@ -225,6 +227,8 @@ class Period
225
227
  62
226
228
  when :quarter
227
229
  92
230
+ when :half
231
+ 183
228
232
  when :year
229
233
  366
230
234
  when :irregular
@@ -245,6 +249,8 @@ class Period
245
249
  case days
246
250
  when 356..376
247
251
  :year
252
+ when 180..183
253
+ :half
248
254
  when 86..96
249
255
  :quarter
250
256
  when 59..62
@@ -444,51 +450,42 @@ class Period
444
450
  case size
445
451
  when :year
446
452
  unless partial_first
447
- until chunk_start.beginning_of_year?
448
- chunk_start += 1.day
449
- end
453
+ chunk_start += 1.day until chunk_start.beginning_of_year?
450
454
  end
451
455
  chunk_end = chunk_start.end_of_year
456
+ when :half
457
+ unless partial_first
458
+ chunk_start += 1.day until chunk_start.beginning_of_half?
459
+ end
460
+ chunk_end = chunk_start.end_of_half
452
461
  when :quarter
453
462
  unless partial_first
454
- until chunk_start.beginning_of_quarter?
455
- chunk_start += 1.day
456
- end
463
+ chunk_start += 1.day until chunk_start.beginning_of_quarter?
457
464
  end
458
465
  chunk_end = chunk_start.end_of_quarter
459
466
  when :bimonth
460
467
  unless partial_first
461
- until chunk_start.beginning_of_bimonth?
462
- chunk_start += 1.day
463
- end
468
+ chunk_start += 1.day until chunk_start.beginning_of_bimonth?
464
469
  end
465
470
  chunk_end = (chunk_start.end_of_month + 1.day).end_of_month
466
471
  when :month
467
472
  unless partial_first
468
- until chunk_start.beginning_of_month?
469
- chunk_start += 1.day
470
- end
473
+ chunk_start += 1.day until chunk_start.beginning_of_month?
471
474
  end
472
475
  chunk_end = chunk_start.end_of_month
473
476
  when :semimonth
474
477
  unless partial_first
475
- until chunk_start.beginning_of_semimonth?
476
- chunk_start += 1.day
477
- end
478
+ chunk_start += 1.day until chunk_start.beginning_of_semimonth?
478
479
  end
479
480
  chunk_end = chunk_start.end_of_semimonth
480
481
  when :biweek
481
482
  unless partial_first
482
- until chunk_start.beginning_of_biweek?
483
- chunk_start += 1.day
484
- end
483
+ chunk_start += 1.day until chunk_start.beginning_of_biweek?
485
484
  end
486
485
  chunk_end = chunk_start.end_of_biweek
487
486
  when :week
488
487
  unless partial_first
489
- until chunk_start.beginning_of_week?
490
- chunk_start += 1.day
491
- end
488
+ chunk_start += 1.day until chunk_start.beginning_of_week?
492
489
  end
493
490
  chunk_end = chunk_start.end_of_week
494
491
  when :day
@@ -1,7 +1,7 @@
1
1
  module FatCore
2
2
  MAJOR = 1
3
3
  MINOR = 0
4
- PATCH = 1
4
+ PATCH = 2
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].compact.join('.')
7
7
  end
@@ -5,13 +5,13 @@ describe Date do
5
5
  before :each do
6
6
  # Pretend it is this date. Not at beg or end of year, quarter,
7
7
  # month, or week. It is a Wednesday
8
- allow(Date).to receive_messages(:today => Date.parse('2012-07-18'))
9
- allow(Date).to receive_messages(:current => Date.parse('2012-07-18'))
8
+ allow(Date).to receive_messages(today: Date.parse('2012-07-18'))
9
+ allow(Date).to receive_messages(current: Date.parse('2012-07-18'))
10
10
  end
11
11
 
12
- describe "class methods" do
13
- describe "date arithmetic" do
14
- it "should know the number of days in a month" do
12
+ describe 'class methods' do
13
+ describe 'date arithmetic' do
14
+ it 'should know the number of days in a month' do
15
15
  expect(Date.days_in_month(2000, 1)).to eq 31
16
16
  expect(Date.days_in_month(1900, 2)).to eq 28
17
17
  expect(Date.days_in_month(2000, 2)).to eq 29
@@ -27,10 +27,10 @@ describe Date do
27
27
  expect(Date.days_in_month(2004, 10)).to eq 31
28
28
  expect(Date.days_in_month(2004, 11)).to eq 30
29
29
  expect(Date.days_in_month(2004, 12)).to eq 31
30
- expect { Date.days_in_month(2004, 13) }.to raise_error ArgumentError
30
+ expect { Date.days_in_month(2004, 13) }.to raise_error(ArgumentError)
31
31
  end
32
32
 
33
- it "should know the nth weekday in a year, month" do
33
+ it 'should know the nth weekday in a year, month' do
34
34
  # Sunday is 0, Saturday is 6
35
35
  # January 2014
36
36
  # Su Mo Tu We Th Fr Sa
@@ -65,18 +65,18 @@ describe Date do
65
65
  expect {
66
66
  # N is zero
67
67
  Date.nth_wday_in_year_month(0, 6, 2014, 1)
68
- }.to raise_error ArgumentError
68
+ }.to raise_error(ArgumentError)
69
69
  expect {
70
70
  # Wday too big
71
71
  Date.nth_wday_in_year_month(3, 7, 2014, 1)
72
- }.to raise_error ArgumentError
72
+ }.to raise_error(ArgumentError)
73
73
  expect {
74
74
  # Month too big
75
75
  Date.nth_wday_in_year_month(3, 1, 2014, 13)
76
- }.to raise_error ArgumentError
76
+ }.to raise_error(ArgumentError)
77
77
  end
78
78
 
79
- it "should know Easter for a given year" do
79
+ it 'should know Easter for a given year' do
80
80
  # Grabbed these dates of Easter from
81
81
  # http://tlarsen2.tripod.com/thomaslarsen/easterdates.html
82
82
  easters = {
@@ -179,7 +179,7 @@ describe Date do
179
179
  2096 => '2096-04-15',
180
180
  2097 => '2097-03-31',
181
181
  2098 => '2098-04-20',
182
- 2099 => '2099-04-12',
182
+ 2099 => '2099-04-12'
183
183
  }
184
184
  easters.each_pair do |year, date|
185
185
  expect(Date.easter(year)).to eq Date.parse(date)
@@ -187,8 +187,8 @@ describe Date do
187
187
  end
188
188
  end
189
189
 
190
- describe "parsing" do
191
- it "should be able to parse an American-style date" do
190
+ describe 'parsing' do
191
+ it 'should be able to parse an American-style date' do
192
192
  expect(Date.parse_american('2/12/2011').iso).to eq('2011-02-12')
193
193
  expect(Date.parse_american('2 / 12/ 2011').iso).to eq('2011-02-12')
194
194
  expect(Date.parse_american('2 / 1 / 2011').iso).to eq('2011-02-01')
@@ -196,20 +196,20 @@ describe Date do
196
196
  expect(Date.parse_american(' 2 / 1 / 15 ').iso).to eq('2015-02-01')
197
197
  expect {
198
198
  Date.parse_american('xx/1/15')
199
- }.to raise_error ArgumentError
199
+ }.to raise_error(ArgumentError)
200
200
  end
201
201
  end
202
202
 
203
- describe "parse_spec" do
203
+ describe 'parse_spec' do
204
204
  # For these tests, today is 2012-07-18
205
205
 
206
- it "should choke if spec type is neither :from or :to" do
206
+ it 'should choke if spec type is neither :from or :to' do
207
207
  expect {
208
208
  Date.parse_spec('2011-07-15', :form)
209
- }.to raise_error
209
+ }.to raise_error(ArgumentError)
210
210
  end
211
211
 
212
- it "should parse plain iso dates correctly" do
212
+ it 'should parse plain iso dates correctly' do
213
213
  expect(Date.parse_spec('2011-07-15')).to eq Date.parse('2011-07-15')
214
214
  expect(Date.parse_spec('2011-08-05')).to eq Date.parse('2011-08-05')
215
215
  end
@@ -222,10 +222,10 @@ describe Date do
222
222
  expect(Date.parse_spec('23W', :to)).to eq Date.parse('2012-06-10')
223
223
  expect {
224
224
  Date.parse_spec('W83', :to)
225
- }.to raise_error
225
+ }.to raise_error(ArgumentError)
226
226
  end
227
227
 
228
- it "should parse year-week numbers such as 'YYYY-W23' or 'YYYY-23W' correctly" do
228
+ it 'should parse year-week numbers \'YYYY-W23\' correctly' do
229
229
  expect(Date.parse_spec('2003-W1')).to eq Date.parse('2002-12-30')
230
230
  expect(Date.parse_spec('2003-W1', :to)).to eq Date.parse('2003-01-05')
231
231
  expect(Date.parse_spec('2003-W23')).to eq Date.parse('2003-06-02')
@@ -234,137 +234,152 @@ describe Date do
234
234
  expect(Date.parse_spec('2003-23W', :to)).to eq Date.parse('2003-06-08')
235
235
  expect {
236
236
  Date.parse_spec('2003-W83', :to)
237
- }.to raise_error
237
+ }.to raise_error(ArgumentError)
238
238
  end
239
239
 
240
- it "should parse year-half specs such as YYYY-NH or YYYY-HN" do
240
+ it 'should parse year-half specs such as YYYY-NH or YYYY-HN' do
241
241
  expect(Date.parse_spec('2011-2H', :from)).to eq Date.parse('2011-07-01')
242
242
  expect(Date.parse_spec('2011-2H', :to)).to eq Date.parse('2011-12-31')
243
243
  expect(Date.parse_spec('2011-H1', :from)).to eq Date.parse('2011-01-01')
244
244
  expect(Date.parse_spec('2011-H1', :to)).to eq Date.parse('2011-06-30')
245
- expect { Date.parse_spec('2011-3H') }.to raise_error
245
+ expect { Date.parse_spec('2011-3H') }.to raise_error(ArgumentError)
246
246
  end
247
247
 
248
- it "should parse half-only specs such as NQ or QN" do
248
+ it 'should parse half-only specs such as NH or HN' do
249
249
  expect(Date.parse_spec('2H', :from)).to eq Date.parse('2012-07-01')
250
250
  expect(Date.parse_spec('H2', :to)).to eq Date.parse('2012-12-31')
251
251
  expect(Date.parse_spec('1H', :from)).to eq Date.parse('2012-01-01')
252
252
  expect(Date.parse_spec('H1', :to)).to eq Date.parse('2012-06-30')
253
- expect { Date.parse_spec('8H') }.to raise_error
253
+ expect { Date.parse_spec('8H') }.to raise_error(ArgumentError)
254
254
  end
255
255
 
256
- it "should parse year-quarter specs such as YYYY-NQ or YYYY-QN" do
256
+ it 'should parse year-quarter specs such as YYYY-NQ or YYYY-QN' do
257
257
  expect(Date.parse_spec('2011-4Q', :from)).to eq Date.parse('2011-10-01')
258
258
  expect(Date.parse_spec('2011-4Q', :to)).to eq Date.parse('2011-12-31')
259
259
  expect(Date.parse_spec('2011-Q4', :from)).to eq Date.parse('2011-10-01')
260
260
  expect(Date.parse_spec('2011-Q4', :to)).to eq Date.parse('2011-12-31')
261
- expect { Date.parse_spec('2011-5Q') }.to raise_error
261
+ expect { Date.parse_spec('2011-5Q') }.to raise_error(ArgumentError)
262
262
  end
263
263
 
264
- it "should parse quarter-only specs such as NQ or QN" do
264
+ it 'should parse quarter-only specs such as NQ or QN' do
265
265
  expect(Date.parse_spec('4Q', :from)).to eq Date.parse('2012-10-01')
266
266
  expect(Date.parse_spec('4Q', :to)).to eq Date.parse('2012-12-31')
267
267
  expect(Date.parse_spec('Q4', :from)).to eq Date.parse('2012-10-01')
268
268
  expect(Date.parse_spec('Q4', :to)).to eq Date.parse('2012-12-31')
269
- expect { Date.parse_spec('5Q') }.to raise_error
269
+ expect { Date.parse_spec('5Q') }.to raise_error(ArgumentError)
270
270
  end
271
271
 
272
- it "should parse year-month specs such as YYYY-MM" do
272
+ it 'should parse year-month specs such as YYYY-MM' do
273
273
  expect(Date.parse_spec('2010-5', :from)).to eq Date.parse('2010-05-01')
274
274
  expect(Date.parse_spec('2010-5', :to)).to eq Date.parse('2010-05-31')
275
- expect { Date.parse_spec('2010-13') }.to raise_error
275
+ expect { Date.parse_spec('2010-13') }.to raise_error(ArgumentError)
276
276
  end
277
277
 
278
- it "should parse month-only specs such as MM" do
278
+ it 'should parse month-only specs such as MM' do
279
279
  expect(Date.parse_spec('10', :from)).to eq Date.parse('2012-10-01')
280
280
  expect(Date.parse_spec('10', :to)).to eq Date.parse('2012-10-31')
281
- expect { Date.parse_spec('99') }.to raise_error
282
- expect { Date.parse_spec('011') }.to raise_error
281
+ expect { Date.parse_spec('99') }.to raise_error(ArgumentError)
282
+ expect { Date.parse_spec('011') }.to raise_error(ArgumentError)
283
283
  end
284
284
 
285
- it "should parse year-only specs such as YYYY" do
285
+ it 'should parse year-only specs such as YYYY' do
286
286
  expect(Date.parse_spec('2010', :from)).to eq Date.parse('2010-01-01')
287
287
  expect(Date.parse_spec('2010', :to)).to eq Date.parse('2010-12-31')
288
- expect { Date.parse_spec('99999') }.to raise_error
288
+ expect { Date.parse_spec('99999') }.to raise_error(ArgumentError)
289
289
  end
290
290
 
291
- it "should parse relative day names: today, yesterday" do
291
+ it 'should parse relative day names: today, yesterday' do
292
292
  expect(Date.parse_spec('today')).to eq Date.current
293
293
  expect(Date.parse_spec('this_day')).to eq Date.current
294
294
  expect(Date.parse_spec('yesterday')).to eq Date.current - 1.day
295
295
  expect(Date.parse_spec('last_day')).to eq Date.current - 1.day
296
296
  end
297
297
 
298
- it "should parse relative weeks: this_week, last_week" do
298
+ it 'should parse relative weeks: this_week, last_week' do
299
299
  expect(Date.parse_spec('this_week')).to eq Date.parse('2012-07-16')
300
300
  expect(Date.parse_spec('this_week', :to)).to eq Date.parse('2012-07-22')
301
301
  expect(Date.parse_spec('last_week')).to eq Date.parse('2012-07-09')
302
302
  expect(Date.parse_spec('last_week', :to)).to eq Date.parse('2012-07-15')
303
303
  end
304
304
 
305
- it "should parse relative biweeks: this_biweek, last_biweek" do
305
+ it 'should parse relative biweeks: this_biweek, last_biweek' do
306
306
  expect(Date.parse_spec('this_biweek')).to eq Date.parse('2012-07-16')
307
- expect(Date.parse_spec('this_biweek', :to)).to eq Date.parse('2012-07-29')
307
+ expect(Date.parse_spec('this_biweek', :to))
308
+ .to eq Date.parse('2012-07-29')
308
309
  expect(Date.parse_spec('last_biweek')).to eq Date.parse('2012-07-02')
309
- expect(Date.parse_spec('last_biweek', :to)).to eq Date.parse('2012-07-15')
310
+ expect(Date.parse_spec('last_biweek', :to))
311
+ .to eq Date.parse('2012-07-15')
310
312
  end
311
313
 
312
- it "should parse relative months: this_semimonth, last_semimonth" do
314
+ it 'should parse relative months: this_semimonth, last_semimonth' do
313
315
  expect(Date.parse_spec('this_semimonth')).to eq Date.parse('2012-07-16')
314
- expect(Date.parse_spec('this_semimonth', :to)).to eq Date.parse('2012-07-31')
315
- expect(Date.parse_spec('last_semimonth')).to eq Date.parse('2012-07-01')
316
- expect(Date.parse_spec('last_semimonth', :to)).to eq Date.parse('2012-07-15')
316
+ expect(Date.parse_spec('this_semimonth', :to))
317
+ .to eq Date.parse('2012-07-31')
318
+ expect(Date.parse_spec('last_semimonth'))
319
+ .to eq Date.parse('2012-07-01')
320
+ expect(Date.parse_spec('last_semimonth', :to))
321
+ .to eq Date.parse('2012-07-15')
317
322
  end
318
323
 
319
- it "should parse relative months: this_month, last_month" do
324
+ it 'should parse relative months: this_month, last_month' do
320
325
  expect(Date.parse_spec('this_month')).to eq Date.parse('2012-07-01')
321
- expect(Date.parse_spec('this_month', :to)).to eq Date.parse('2012-07-31')
326
+ expect(Date.parse_spec('this_month', :to))
327
+ .to eq Date.parse('2012-07-31')
322
328
  expect(Date.parse_spec('last_month')).to eq Date.parse('2012-06-01')
323
- expect(Date.parse_spec('last_month', :to)).to eq Date.parse('2012-06-30')
329
+ expect(Date.parse_spec('last_month', :to))
330
+ .to eq Date.parse('2012-06-30')
324
331
  end
325
332
 
326
- it "should parse relative bimonths: this_bimonth, last_bimonth" do
333
+ it 'should parse relative bimonths: this_bimonth, last_bimonth' do
327
334
  expect(Date.parse_spec('this_bimonth')).to eq Date.parse('2012-07-01')
328
- expect(Date.parse_spec('this_bimonth', :to)).to eq Date.parse('2012-08-31')
329
- expect(Date.parse_spec('last_bimonth')).to eq Date.parse('2012-05-01')
330
- expect(Date.parse_spec('last_bimonth', :to)).to eq Date.parse('2012-06-30')
335
+ expect(Date.parse_spec('this_bimonth', :to))
336
+ .to eq Date.parse('2012-08-31')
337
+ expect(Date.parse_spec('last_bimonth'))
338
+ .to eq Date.parse('2012-05-01')
339
+ expect(Date.parse_spec('last_bimonth', :to))
340
+ .to eq Date.parse('2012-06-30')
331
341
 
332
342
  # Set today to 2014-12-12: Found that last_bimonth was reporting
333
343
  # current bimonth when today was in the second month of the current
334
344
  # bimonth, i.e., an even month
335
- allow(Date).to receive_messages(:today => Date.parse('2014-12-12'))
336
- allow(Date).to receive_messages(:current => Date.parse('2014-12-12'))
345
+ allow(Date).to receive_messages(today: Date.parse('2014-12-12'))
346
+ allow(Date).to receive_messages(current: Date.parse('2014-12-12'))
337
347
 
338
- expect(Date.parse_spec('last_bimonth')).to eq Date.parse('2014-09-01')
339
- expect(Date.parse_spec('last_bimonth', :to)).to eq Date.parse('2014-10-31')
348
+ expect(Date.parse_spec('last_bimonth'))
349
+ .to eq Date.parse('2014-09-01')
350
+ expect(Date.parse_spec('last_bimonth', :to))
351
+ .to eq Date.parse('2014-10-31')
340
352
 
341
- allow(Date).to receive_messages(:today => Date.parse('2012-07-18'))
342
- allow(Date).to receive_messages(:current => Date.parse('2012-07-18'))
353
+ allow(Date).to receive_messages(today: Date.parse('2012-07-18'))
354
+ allow(Date).to receive_messages(current: Date.parse('2012-07-18'))
343
355
  end
344
356
 
345
- it "should parse relative quarters: this_quarter, last_quarter" do
357
+ it 'should parse relative quarters: this_quarter, last_quarter' do
346
358
  expect(Date.parse_spec('this_quarter')).to eq Date.parse('2012-07-01')
347
- expect(Date.parse_spec('this_quarter', :to)).to eq Date.parse('2012-09-30')
348
- expect(Date.parse_spec('last_quarter')).to eq Date.parse('2012-04-01')
349
- expect(Date.parse_spec('last_quarter', :to)).to eq Date.parse('2012-06-30')
359
+ expect(Date.parse_spec('this_quarter', :to))
360
+ .to eq Date.parse('2012-09-30')
361
+ expect(Date.parse_spec('last_quarter'))
362
+ .to eq Date.parse('2012-04-01')
363
+ expect(Date.parse_spec('last_quarter', :to))
364
+ .to eq Date.parse('2012-06-30')
350
365
  end
351
366
 
352
367
  # Today is set to '2012-07-18'
353
- it "should parse relative halves: this_half, last_half" do
368
+ it 'should parse relative halves: this_half, last_half' do
354
369
  expect(Date.parse_spec('this_half')).to eq Date.parse('2012-07-01')
355
370
  expect(Date.parse_spec('this_half', :to)).to eq Date.parse('2012-12-31')
356
371
  expect(Date.parse_spec('last_half')).to eq Date.parse('2012-01-01')
357
372
  expect(Date.parse_spec('last_half', :to)).to eq Date.parse('2012-06-30')
358
373
  end
359
374
 
360
- it "should parse relative years: this_year, last_year" do
375
+ it 'should parse relative years: this_year, last_year' do
361
376
  expect(Date.parse_spec('this_year')).to eq Date.parse('2012-01-01')
362
377
  expect(Date.parse_spec('this_year', :to)).to eq Date.parse('2012-12-31')
363
378
  expect(Date.parse_spec('last_year')).to eq Date.parse('2011-01-01')
364
379
  expect(Date.parse_spec('last_year', :to)).to eq Date.parse('2011-12-31')
365
380
  end
366
381
 
367
- it "should parse forever and never" do
382
+ it 'should parse forever and never' do
368
383
  expect(Date.parse_spec('forever')).to eq Date::BOT
369
384
  expect(Date.parse_spec('forever', :to)).to eq Date::EOT
370
385
  expect(Date.parse_spec('never')).to be_nil
@@ -372,47 +387,47 @@ describe Date do
372
387
  end
373
388
  end
374
389
 
375
- describe "instance methods" do
376
- describe "print as string" do
377
- it "should be able to print itself as an American-style date" do
390
+ describe 'instance methods' do
391
+ describe 'print as string' do
392
+ it 'should be able to print itself as an American-style date' do
378
393
  expect(Date.parse('2011-02-12').american).to eq('2/12/2011')
379
394
  end
380
395
 
381
- it "should be able to print itself in iso form" do
396
+ it 'should be able to print itself in iso form' do
382
397
  expect(Date.today.iso).to eq '2012-07-18'
383
398
  end
384
399
 
385
- it "should be able to print itself in tex_quote form" do
400
+ it 'should be able to print itself in tex_quote form' do
386
401
  expect(Date.today.tex_quote).to eq '2012-07-18'
387
402
  end
388
403
 
389
- it "should be able to print itself in org form" do
404
+ it 'should be able to print itself in org form' do
390
405
  expect(Date.today.org).to eq('[2012-07-18 Wed]')
391
406
  expect((Date.today + 1.day).org).to eq('[2012-07-19 Thu]')
392
407
  end
393
408
 
394
- it "should be able to print itself in eng form" do
409
+ it 'should be able to print itself in eng form' do
395
410
  expect(Date.today.eng).to eq('July 18, 2012')
396
411
  expect((Date.today + 1.day).eng).to eq('July 19, 2012')
397
412
  end
398
413
 
399
- it "should be able to print itself in numeric form" do
414
+ it 'should be able to print itself in numeric form' do
400
415
  expect(Date.today.num).to eq('20120718')
401
416
  expect((Date.today + 1.day).num).to eq('20120719')
402
417
  end
403
418
  end
404
419
 
405
- describe "date arithmetic" do
406
- it "should know if its the nth weekday in a given month" do
407
- expect(Date.parse('2014-11-13').nth_wday_in_month?(2, 4, 11)).
408
- to be true
409
- expect(Date.parse('2014-11-13').nth_wday_in_month?(-3, 4, 11)).
410
- to be true
411
- expect(Date.parse('2014-11-13').nth_wday_in_month?(2, 4, 10)).
412
- to be false
420
+ describe 'date arithmetic' do
421
+ it 'should know if its the nth weekday in a given month' do
422
+ expect(Date.parse('2014-11-13').nth_wday_in_month?(2, 4, 11))
423
+ .to be true
424
+ expect(Date.parse('2014-11-13').nth_wday_in_month?(-3, 4, 11))
425
+ .to be true
426
+ expect(Date.parse('2014-11-13').nth_wday_in_month?(2, 4, 10))
427
+ .to be false
413
428
  end
414
429
 
415
- it "should know if its a weekend or a weekday" do
430
+ it 'should know if its a weekend or a weekday' do
416
431
  expect(Date.parse('2014-05-17')).to be_weekend
417
432
  expect(Date.parse('2014-05-17')).to_not be_weekday
418
433
  expect(Date.parse('2014-05-18')).to be_weekend
@@ -422,12 +437,12 @@ describe Date do
422
437
  expect(Date.parse('2014-05-22')).to_not be_weekend
423
438
  end
424
439
 
425
- it "should know its pred and succ (for Range)" do
426
- expect(Date.today.pred).to eq (Date.today - 1)
427
- expect(Date.today.succ).to eq (Date.today + 1)
440
+ it 'should know its pred and succ (for Range)' do
441
+ expect(Date.today.pred).to eq(Date.today - 1)
442
+ expect(Date.today.succ).to eq(Date.today + 1)
428
443
  end
429
444
 
430
- it "should be able to state its quarter" do
445
+ it 'should be able to state its quarter' do
431
446
  expect(Date.today.quarter).to eq(3)
432
447
  expect(Date.parse('2012-02-29').quarter).to eq(1)
433
448
  expect(Date.parse('2012-01-01').quarter).to eq(1)
@@ -443,14 +458,14 @@ describe Date do
443
458
  expect(Date.parse('2012-12-31').quarter).to eq(4)
444
459
  end
445
460
 
446
- it "should know about years" do
461
+ it 'should know about years' do
447
462
  expect(Date.parse('2013-01-01')).to be_beginning_of_year
448
463
  expect(Date.parse('2013-12-31')).to be_end_of_year
449
464
  expect(Date.parse('2013-04-01')).to_not be_beginning_of_year
450
465
  expect(Date.parse('2013-12-30')).to_not be_end_of_year
451
466
  end
452
467
 
453
- it "should know about halves" do
468
+ it 'should know about halves' do
454
469
  expect(Date.parse('2013-01-01')).to be_beginning_of_half
455
470
  expect(Date.parse('2013-12-31')).to be_end_of_half
456
471
  expect(Date.parse('2013-07-01')).to be_beginning_of_half
@@ -460,7 +475,7 @@ describe Date do
460
475
  expect(Date.parse('2013-07-31').half).to eq(2)
461
476
  end
462
477
 
463
- it "should know about quarters" do
478
+ it 'should know about quarters' do
464
479
  expect(Date.parse('2013-01-01')).to be_beginning_of_quarter
465
480
  expect(Date.parse('2013-12-31')).to be_end_of_quarter
466
481
  expect(Date.parse('2013-04-01')).to be_beginning_of_quarter
@@ -469,9 +484,11 @@ describe Date do
469
484
  expect(Date.parse('2013-07-31')).to_not be_end_of_quarter
470
485
  end
471
486
 
472
- it "should know about bimonths" do
473
- expect(Date.parse('2013-11-04').beginning_of_bimonth).to eq Date.parse('2013-11-01')
474
- expect(Date.parse('2013-11-04').end_of_bimonth).to eq Date.parse('2013-12-31')
487
+ it 'should know about bimonths' do
488
+ expect(Date.parse('2013-11-04').beginning_of_bimonth)
489
+ .to eq Date.parse('2013-11-01')
490
+ expect(Date.parse('2013-11-04').end_of_bimonth)
491
+ .to eq Date.parse('2013-12-31')
475
492
  expect(Date.parse('2013-03-01')).to be_beginning_of_bimonth
476
493
  expect(Date.parse('2013-04-30')).to be_end_of_bimonth
477
494
  expect(Date.parse('2013-01-01')).to be_beginning_of_bimonth
@@ -482,7 +499,7 @@ describe Date do
482
499
  expect(Date.parse('2013-07-31')).to_not be_end_of_bimonth
483
500
  end
484
501
 
485
- it "should know about months" do
502
+ it 'should know about months' do
486
503
  expect(Date.parse('2013-01-01')).to be_beginning_of_month
487
504
  expect(Date.parse('2013-12-31')).to be_end_of_month
488
505
  expect(Date.parse('2013-05-01')).to be_beginning_of_month
@@ -491,25 +508,35 @@ describe Date do
491
508
  expect(Date.parse('2013-07-30')).to_not be_end_of_month
492
509
  end
493
510
 
494
- it "should know about semimonths" do
495
- expect(Date.parse('2013-11-24').beginning_of_semimonth).to eq Date.parse('2013-11-16')
496
- expect(Date.parse('2013-11-04').beginning_of_semimonth).to eq Date.parse('2013-11-01')
497
- expect(Date.parse('2013-11-04').end_of_semimonth).to eq Date.parse('2013-11-15')
498
- expect(Date.parse('2013-11-24').end_of_semimonth).to eq Date.parse('2013-11-30')
499
- expect(Date.parse('2013-03-01')).to be_beginning_of_semimonth
500
- expect(Date.parse('2013-03-16')).to be_beginning_of_semimonth
501
- expect(Date.parse('2013-04-15')).to be_end_of_semimonth
502
- expect(Date.parse('2013-04-30')).to be_end_of_semimonth
503
- end
504
-
505
- it "should know about biweeks" do
506
- expect(Date.parse('2013-11-07').beginning_of_biweek).to eq Date.parse('2013-11-04')
507
- expect(Date.parse('2013-11-07').end_of_biweek).to eq Date.parse('2013-11-17')
511
+ it 'should know about semimonths' do
512
+ expect(Date.parse('2013-11-24').beginning_of_semimonth)
513
+ .to eq Date.parse('2013-11-16')
514
+ expect(Date.parse('2013-11-04').beginning_of_semimonth)
515
+ .to eq Date.parse('2013-11-01')
516
+ expect(Date.parse('2013-11-04').end_of_semimonth)
517
+ .to eq Date.parse('2013-11-15')
518
+ expect(Date.parse('2013-11-24').end_of_semimonth)
519
+ .to eq Date.parse('2013-11-30')
520
+ expect(Date.parse('2013-03-01'))
521
+ .to be_beginning_of_semimonth
522
+ expect(Date.parse('2013-03-16'))
523
+ .to be_beginning_of_semimonth
524
+ expect(Date.parse('2013-04-15'))
525
+ .to be_end_of_semimonth
526
+ expect(Date.parse('2013-04-30'))
527
+ .to be_end_of_semimonth
528
+ end
529
+
530
+ it 'should know about biweeks' do
531
+ expect(Date.parse('2013-11-07').beginning_of_biweek)
532
+ .to eq Date.parse('2013-11-04')
533
+ expect(Date.parse('2013-11-07').end_of_biweek)
534
+ .to eq Date.parse('2013-11-17')
508
535
  expect(Date.parse('2013-03-11')).to be_beginning_of_biweek
509
536
  expect(Date.parse('2013-03-24')).to be_end_of_biweek
510
537
  end
511
538
 
512
- it "should know about weeks" do
539
+ it 'should know about weeks' do
513
540
  expect(Date.parse('2013-11-04')).to be_beginning_of_week
514
541
  expect(Date.parse('2013-11-10')).to be_end_of_week
515
542
  expect(Date.parse('2013-12-02')).to be_beginning_of_week
@@ -518,22 +545,31 @@ describe Date do
518
545
  expect(Date.parse('2013-10-19')).to_not be_end_of_week
519
546
  end
520
547
 
521
- it "should know the beginning of chunks" do
522
- expect(Date.parse('2013-11-04').beginning_of_chunk(:year)).to eq Date.parse('2013-01-01')
523
- expect(Date.parse('2013-11-04').beginning_of_chunk(:half)).to eq Date.parse('2013-07-01')
524
- expect(Date.parse('2013-11-04').beginning_of_chunk(:quarter)).to eq Date.parse('2013-10-01')
525
- expect(Date.parse('2013-12-04').beginning_of_chunk(:bimonth)).to eq Date.parse('2013-11-01')
526
- expect(Date.parse('2013-11-04').beginning_of_chunk(:month)).to eq Date.parse('2013-11-01')
527
- expect(Date.parse('2013-11-04').beginning_of_chunk(:semimonth)).to eq Date.parse('2013-11-01')
528
- expect(Date.parse('2013-11-24').beginning_of_chunk(:semimonth)).to eq Date.parse('2013-11-16')
529
- expect(Date.parse('2013-11-08').beginning_of_chunk(:biweek)).to eq Date.parse('2013-11-04')
530
- expect(Date.parse('2013-11-08').beginning_of_chunk(:week)).to eq Date.parse('2013-11-04')
548
+ it 'should know the beginning of chunks' do
549
+ expect(Date.parse('2013-11-04').beginning_of_chunk(:year))
550
+ .to eq Date.parse('2013-01-01')
551
+ expect(Date.parse('2013-11-04').beginning_of_chunk(:half))
552
+ .to eq Date.parse('2013-07-01')
553
+ expect(Date.parse('2013-11-04').beginning_of_chunk(:quarter))
554
+ .to eq Date.parse('2013-10-01')
555
+ expect(Date.parse('2013-12-04').beginning_of_chunk(:bimonth))
556
+ .to eq Date.parse('2013-11-01')
557
+ expect(Date.parse('2013-11-04').beginning_of_chunk(:month))
558
+ .to eq Date.parse('2013-11-01')
559
+ expect(Date.parse('2013-11-04').beginning_of_chunk(:semimonth))
560
+ .to eq Date.parse('2013-11-01')
561
+ expect(Date.parse('2013-11-24').beginning_of_chunk(:semimonth))
562
+ .to eq Date.parse('2013-11-16')
563
+ expect(Date.parse('2013-11-08').beginning_of_chunk(:biweek))
564
+ .to eq Date.parse('2013-11-04')
565
+ expect(Date.parse('2013-11-08').beginning_of_chunk(:week))
566
+ .to eq Date.parse('2013-11-04')
531
567
  expect {
532
568
  Date.parse('2013-11-04').beginning_of_chunk(:wek)
533
- }.to raise_error
569
+ }.to raise_error(ArgumentError)
534
570
  end
535
571
 
536
- it "should be able to add a chuck sym to itself" do
572
+ it 'should be able to add a chuck sym to itself' do
537
573
  # Date.today is '2012-07-18'
538
574
  expect(Date.today.add_chunk(:year)).to eq(Date.parse('2013-07-18'))
539
575
  expect(Date.today.add_chunk(:half)).to eq(Date.parse('2013-01-18'))
@@ -547,34 +583,52 @@ describe Date do
547
583
  to eq(Date.parse('2012-07-19'))
548
584
  expect {
549
585
  Date.today.add_chunk(:hour)
550
- }.to raise_error ArgumentError
551
- end
552
-
553
- it "should know the end of chunks" do
554
- expect(Date.parse('2013-07-04').end_of_chunk(:year)).to eq Date.parse('2013-12-31')
555
- expect(Date.parse('2013-05-04').end_of_chunk(:half)).to eq Date.parse('2013-06-30')
556
- expect(Date.parse('2013-07-04').end_of_chunk(:quarter)).to eq Date.parse('2013-09-30')
557
- expect(Date.parse('2013-12-04').end_of_chunk(:bimonth)).to eq Date.parse('2013-12-31')
558
- expect(Date.parse('2013-07-04').end_of_chunk(:month)).to eq Date.parse('2013-07-31')
559
- expect(Date.parse('2013-11-04').end_of_chunk(:semimonth)).to eq Date.parse('2013-11-15')
560
- expect(Date.parse('2013-11-24').end_of_chunk(:semimonth)).to eq Date.parse('2013-11-30')
561
- expect(Date.parse('2013-11-08').end_of_chunk(:biweek)).to eq Date.parse('2013-11-17')
562
- expect(Date.parse('2013-07-04').end_of_chunk(:week)).to eq Date.parse('2013-07-07')
586
+ }.to raise_error(ArgumentError)
587
+ end
588
+
589
+ it 'should know the end of chunks' do
590
+ expect(Date.parse('2013-07-04').end_of_chunk(:year))
591
+ .to eq Date.parse('2013-12-31')
592
+ expect(Date.parse('2013-05-04').end_of_chunk(:half))
593
+ .to eq Date.parse('2013-06-30')
594
+ expect(Date.parse('2013-07-04').end_of_chunk(:quarter))
595
+ .to eq Date.parse('2013-09-30')
596
+ expect(Date.parse('2013-12-04').end_of_chunk(:bimonth))
597
+ .to eq Date.parse('2013-12-31')
598
+ expect(Date.parse('2013-07-04').end_of_chunk(:month))
599
+ .to eq Date.parse('2013-07-31')
600
+ expect(Date.parse('2013-11-04').end_of_chunk(:semimonth))
601
+ .to eq Date.parse('2013-11-15')
602
+ expect(Date.parse('2013-11-24').end_of_chunk(:semimonth))
603
+ .to eq Date.parse('2013-11-30')
604
+ expect(Date.parse('2013-11-08').end_of_chunk(:biweek))
605
+ .to eq Date.parse('2013-11-17')
606
+ expect(Date.parse('2013-07-04').end_of_chunk(:week))
607
+ .to eq Date.parse('2013-07-07')
563
608
  expect {
564
609
  Date.parse('2013-11-04').end_of_chunk(:wek)
565
- }.to raise_error
566
- end
567
-
568
- it "should know how to expand to chunk periods" do
569
- expect(Date.parse('2013-07-04').expand_to_period(:year)).to eq Period.new('2013-01-01', '2013-12-31')
570
- expect(Date.parse('2013-07-04').expand_to_period(:half)).to eq Period.new('2013-07-01', '2013-12-31')
571
- expect(Date.parse('2013-07-04').expand_to_period(:quarter)).to eq Period.new('2013-07-01', '2013-09-30')
572
- expect(Date.parse('2013-07-04').expand_to_period(:bimonth)).to eq Period.new('2013-07-01', '2013-08-31')
573
- expect(Date.parse('2013-07-04').expand_to_period(:month)).to eq Period.new('2013-07-01', '2013-07-31')
574
- expect(Date.parse('2013-07-04').expand_to_period(:semimonth)).to eq Period.new('2013-07-01', '2013-07-15')
575
- expect(Date.parse('2013-07-04').expand_to_period(:biweek)).to eq Period.new('2013-07-01', '2013-07-14')
576
- expect(Date.parse('2013-07-04').expand_to_period(:week)).to eq Period.new('2013-07-01', '2013-07-07')
577
- expect(Date.parse('2013-07-04').expand_to_period(:day)).to eq Period.new('2013-07-04', '2013-07-04')
610
+ }.to raise_error(ArgumentError)
611
+ end
612
+
613
+ it 'should know how to expand to chunk periods' do
614
+ expect(Date.parse('2013-07-04').expand_to_period(:year))
615
+ .to eq Period.new('2013-01-01', '2013-12-31')
616
+ expect(Date.parse('2013-07-04').expand_to_period(:half))
617
+ .to eq Period.new('2013-07-01', '2013-12-31')
618
+ expect(Date.parse('2013-07-04').expand_to_period(:quarter))
619
+ .to eq Period.new('2013-07-01', '2013-09-30')
620
+ expect(Date.parse('2013-07-04').expand_to_period(:bimonth))
621
+ .to eq Period.new('2013-07-01', '2013-08-31')
622
+ expect(Date.parse('2013-07-04').expand_to_period(:month))
623
+ .to eq Period.new('2013-07-01', '2013-07-31')
624
+ expect(Date.parse('2013-07-04').expand_to_period(:semimonth))
625
+ .to eq Period.new('2013-07-01', '2013-07-15')
626
+ expect(Date.parse('2013-07-04').expand_to_period(:biweek))
627
+ .to eq Period.new('2013-07-01', '2013-07-14')
628
+ expect(Date.parse('2013-07-04').expand_to_period(:week))
629
+ .to eq Period.new('2013-07-01', '2013-07-07')
630
+ expect(Date.parse('2013-07-04').expand_to_period(:day))
631
+ .to eq Period.new('2013-07-04', '2013-07-04')
578
632
  end
579
633
 
580
634
  it "should know if it's within 6 months of another date" do
@@ -593,14 +647,14 @@ describe Date do
593
647
  end
594
648
  end
595
649
 
596
- describe "holidays" do
597
- it "should know Easter in its year" do
650
+ describe 'holidays' do
651
+ it 'should know Easter in its year' do
598
652
  expect(Date.today.easter_this_year).to eq(Date.parse('2012-04-08'))
599
653
  expect(Date.parse('2014-04-20').easter?).to be true
600
654
  expect(Date.parse('2014-03-20').easter?).to be false
601
655
  end
602
656
 
603
- it "should know if its a federal holiday" do
657
+ it 'should know if its a federal holiday' do
604
658
  # Got these from:
605
659
  # http://www.opm.gov/policy-data-oversight/snow-dismissal-procedures/federal-holidays/
606
660
 
@@ -702,11 +756,11 @@ describe Date do
702
756
  expect(Date.parse('2014-11-23')).to be_fed_holiday
703
757
  end
704
758
 
705
- it "should know if its an NYSE holiday" do
759
+ it 'should know if its an NYSE holiday' do
706
760
  ################# 2014 2015 2016
707
- # New Years Day January 1 January 1 January 1
761
+ # New Year's Day January 1 January 1 January 1
708
762
  # Martin Luther King, Jr. Day January 20 January 19 January 18
709
- # Washingtons Birthday February 17 February 16 February 15
763
+ # Washington's Birthday February 17 February 16 February 15
710
764
  # Good Friday April 18 April 3 March 25
711
765
  # Memorial Day May 26 May 25 May 30
712
766
  # Independence Day July 4 July 3 July 4
@@ -783,7 +837,7 @@ describe Date do
783
837
  expect(Date.parse('2007-01-02')).to be_nyse_holiday
784
838
  end
785
839
 
786
- it "should know if it is a Federal workday" do
840
+ it 'should know if it is a Federal workday' do
787
841
  # Some holidays
788
842
  expect(Date.parse('2017-02-20')).not_to be_fed_workday
789
843
  expect(Date.parse('2017-05-29')).not_to be_fed_workday
@@ -806,7 +860,7 @@ describe Date do
806
860
  expect(Date.parse('2014-11-23')).not_to be_fed_workday
807
861
  end
808
862
 
809
- it "should know if it is an NYSE workday" do
863
+ it 'should know if it is an NYSE workday' do
810
864
  # Some holidays
811
865
  expect(Date.parse('2016-01-01')).not_to be_nyse_workday
812
866
  expect(Date.parse('2016-01-18')).not_to be_nyse_workday
@@ -833,7 +887,7 @@ describe Date do
833
887
  expect(Date.parse('2014-11-23')).not_to be_trading_day
834
888
  end
835
889
 
836
- it "should know the next federal workday" do
890
+ it 'should know the next federal workday' do
837
891
  expect(Date.parse('2015-12-31').next_fed_workday)
838
892
  .to eq Date.parse('2016-01-04')
839
893
  expect(Date.parse('2016-04-20').next_fed_workday)
@@ -842,7 +896,7 @@ describe Date do
842
896
  .to eq Date.parse('2016-04-25')
843
897
  end
844
898
 
845
- it "should know the prior federal workday" do
899
+ it 'should know the prior federal workday' do
846
900
  expect(Date.parse('2016-01-04').prior_fed_workday)
847
901
  .to eq Date.parse('2015-12-31')
848
902
  expect(Date.parse('2016-04-21').prior_fed_workday)
@@ -851,7 +905,7 @@ describe Date do
851
905
  .to eq Date.parse('2016-04-22')
852
906
  end
853
907
 
854
- it "should know the next NYSE workday" do
908
+ it 'should know the next NYSE workday' do
855
909
  expect(Date.parse('2015-12-31').next_nyse_workday)
856
910
  .to eq Date.parse('2016-01-04')
857
911
  expect(Date.parse('2016-04-20').next_nyse_workday)
@@ -862,7 +916,7 @@ describe Date do
862
916
  .to eq Date.parse('2016-04-25')
863
917
  end
864
918
 
865
- it "should know the prior NYSE workday" do
919
+ it 'should know the prior NYSE workday' do
866
920
  # The Monday after Easter; go to prior Thur since Good Friday
867
921
  # is an NYSE holiday.
868
922
  expect(Date.parse('2014-04-21').prior_nyse_workday)
@@ -877,7 +931,7 @@ describe Date do
877
931
  .to eq Date.parse('2016-04-22')
878
932
  end
879
933
 
880
- it "should be able to skip until it hits a trading day" do
934
+ it 'should be able to skip until it hits a trading day' do
881
935
  # A Wednesday
882
936
  expect(Date.parse('2014-03-26').prior_until_trading_day)
883
937
  .to eq(Date.parse('2014-03-26'))
@@ -892,7 +946,7 @@ describe Date do
892
946
  .to eq(Date.parse('2014-03-31'))
893
947
  end
894
948
 
895
- it "should be able to add n trading days" do
949
+ it 'should be able to add n trading days' do
896
950
  # Add n trading days
897
951
  expect(Date.parse('2014-03-30').add_trading_days(10))
898
952
  .to eq(Date.parse('2014-04-11'))