fat_core 5.3.0 → 5.4.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.
- checksums.yaml +4 -4
- data/lib/fat_core/date.rb +49 -2
- data/lib/fat_core/version.rb +1 -1
- data/spec/lib/date_spec.rb +13 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6915be154abea741bce220665d425858a13c22aacdcff27952fda89627d0349c
|
4
|
+
data.tar.gz: 82fbae6f418d862154ba909c1f6097d2b82f020eddb740fa207285ee9bb8db3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71698e9642833bd200638b30b879b86eaf21f44ee690048299597982ee0abfb4ddbd2302f3b87d649dcd4963f35de8e04f79cda705fda72cb0bcfb8efb3ae158
|
7
|
+
data.tar.gz: 03407fbd6b3340c9742df04dff407ddd695ebd2ecb7f47ff7304e095be8b27aac933a48573d35279e20b6f3df922908f2d4d3f9043fcac29296dbc3d9ca84228
|
data/lib/fat_core/date.rb
CHANGED
@@ -57,6 +57,9 @@ module FatCore
|
|
57
57
|
# to find in commercial situations.
|
58
58
|
EOT = ::Date.parse('3000-12-31')
|
59
59
|
|
60
|
+
# Symbols for each of the days of the week, e.g., :sunday, :monday, etc.
|
61
|
+
DAYSYMS = ::Date::DAYNAMES.map(&:downcase).map(&:to_sym)
|
62
|
+
|
60
63
|
# :category: Formatting
|
61
64
|
# @group Formatting
|
62
65
|
|
@@ -515,12 +518,56 @@ module FatCore
|
|
515
518
|
|
516
519
|
# :category: Relative ::Dates
|
517
520
|
|
521
|
+
# In order to accomodate biweeks, we adopt the convention that weeks are
|
522
|
+
# numbered so that whatever week contains the year's first
|
523
|
+
# Date.beginning_of_week (usually Sunday or Monday) is week number 1.
|
524
|
+
# Biweeks are then pairs of weeks: an odd numbered week first, followed by
|
525
|
+
# an even numbered week last.
|
526
|
+
def week_number
|
527
|
+
start_of_weeks = ::Date.new(year, 1, 1)
|
528
|
+
bow_wday = DAYSYMS.index(::Date.beginning_of_week)
|
529
|
+
start_of_weeks += 1 until start_of_weeks.wday == bow_wday
|
530
|
+
if yday >= start_of_weeks.yday
|
531
|
+
((yday - start_of_weeks.yday) / 7) + 1
|
532
|
+
else
|
533
|
+
# One of the days before the start of the year's first week, so it
|
534
|
+
# belongs to the last week of the prior year.
|
535
|
+
Date.new(year - 1, 12, 31).week_number
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
539
|
+
# Return the date that is the first day of the biweek in which self
|
540
|
+
# falls, or the first day of the year, whichever is later.
|
541
|
+
# @return [::Date]
|
542
|
+
def beginning_of_biweek
|
543
|
+
if week_number.odd?
|
544
|
+
beginning_of_week
|
545
|
+
else
|
546
|
+
(self - 1.week).beginning_of_week
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# :category: Relative ::Dates
|
551
|
+
|
552
|
+
# Return the date that is the last day of the biweek in which
|
553
|
+
# self falls, or the last day of the year, whichever if earlier.
|
554
|
+
# @return [::Date]
|
555
|
+
def end_of_biweek
|
556
|
+
if week_number.even?
|
557
|
+
end_of_week
|
558
|
+
else
|
559
|
+
(self + 1.week).end_of_week
|
560
|
+
end
|
561
|
+
end
|
562
|
+
|
563
|
+
# NOTE: Date#end_of_week and Date#beginning_of_week is defined in ActiveSupport
|
564
|
+
|
518
565
|
# Return the date that is the first day of the commercial biweek in which
|
519
566
|
# self falls. A biweek is a period of two commercial weeks starting with an
|
520
567
|
# odd-numbered week and with each week starting in Monday and ending on
|
521
568
|
# Sunday.
|
522
569
|
# @return [::Date]
|
523
|
-
def
|
570
|
+
def beginning_of_bicweek
|
524
571
|
if cweek.odd?
|
525
572
|
beginning_of_week(::Date.beginning_of_week)
|
526
573
|
else
|
@@ -537,7 +584,7 @@ module FatCore
|
|
537
584
|
# In the last week of the year (if it is not part of next year's first
|
538
585
|
# week) the end of the biweek will not extend beyond self's week, so that
|
539
586
|
# week 1 of the following year will start a new biweek. @return [::Date]
|
540
|
-
def
|
587
|
+
def end_of_bicweek
|
541
588
|
if cweek >= 52 && end_of_week(::Date.beginning_of_week).year > year
|
542
589
|
end_of_week(::Date.beginning_of_week)
|
543
590
|
elsif cweek.odd?
|
data/lib/fat_core/version.rb
CHANGED
data/spec/lib/date_spec.rb
CHANGED
@@ -379,7 +379,7 @@ describe Date do
|
|
379
379
|
expect(described_class.parse_spec('10', :to)).to eq described_class.parse('2012-10-31')
|
380
380
|
expect { described_class.parse_spec('99') }.to raise_error(ArgumentError)
|
381
381
|
# This is a valid day-of-year spec
|
382
|
-
expect { described_class.parse_spec('011') }.not_to raise_error
|
382
|
+
expect { described_class.parse_spec('011') }.not_to raise_error
|
383
383
|
end
|
384
384
|
|
385
385
|
it 'parses month-day specs such as MM-DD' do
|
@@ -408,6 +408,8 @@ describe Date do
|
|
408
408
|
expect(described_class.parse_spec('2010-09-I', :to)).to eq described_class.parse('2010-09-15')
|
409
409
|
expect(described_class.parse_spec('2010-09-II', :from)).to eq described_class.parse('2010-09-16')
|
410
410
|
expect(described_class.parse_spec('2010-09-II', :to)).to eq described_class.parse('2010-09-30')
|
411
|
+
expect(described_class.parse_spec('2010-05-I', :from)).to eq described_class.parse('2010-05-01')
|
412
|
+
expect(described_class.parse_spec('2010-05-I', :to)).to eq described_class.parse('2010-05-15')
|
411
413
|
end
|
412
414
|
|
413
415
|
it 'parses intra-month week specs such as YYYY-MM-i and YYYY-MM-v begin Sunday' do
|
@@ -753,15 +755,17 @@ describe Date do
|
|
753
755
|
|
754
756
|
it 'knows about biweeks' do
|
755
757
|
expect(described_class.parse('2013-11-07').beginning_of_biweek)
|
756
|
-
.to eq described_class.parse('2013-
|
758
|
+
.to eq described_class.parse('2013-10-28')
|
757
759
|
expect(described_class.parse('2013-11-07').end_of_biweek)
|
758
|
-
.to eq described_class.parse('2013-11-
|
759
|
-
expect(described_class.parse('2013-03-
|
760
|
-
expect(described_class.parse('2013-03-
|
760
|
+
.to eq described_class.parse('2013-11-10')
|
761
|
+
expect(described_class.parse('2013-03-04')).to be_beginning_of_biweek
|
762
|
+
expect(described_class.parse('2013-03-17')).to be_end_of_biweek
|
761
763
|
expect(described_class.parse('2013-12-30').end_of_biweek)
|
762
|
-
.to eq described_class.parse('2014-01-
|
764
|
+
.to eq described_class.parse('2014-01-05')
|
763
765
|
expect(described_class.parse('2009-12-30').end_of_biweek)
|
764
766
|
.to eq described_class.parse('2010-01-03')
|
767
|
+
expect(described_class.parse('2010-01-03').biweek)
|
768
|
+
.to eq described_class.parse('2009-12-31').biweek
|
765
769
|
end
|
766
770
|
|
767
771
|
it 'knows that a Monday is the beginning of the week' do
|
@@ -800,10 +804,10 @@ describe Date do
|
|
800
804
|
it 'knows the beginning and end of bi-week-based chunks' do
|
801
805
|
# First Friday to prior Monday
|
802
806
|
expect(described_class.parse('2013-11-08').beginning_of_chunk(:biweek))
|
803
|
-
.to eq described_class.parse('2013-
|
807
|
+
.to eq described_class.parse('2013-10-28')
|
804
808
|
# Second Wednesday to 2 prior Monday
|
805
809
|
expect(described_class.parse('2013-11-13').beginning_of_chunk(:biweek))
|
806
|
-
.to eq described_class.parse('2013-11-
|
810
|
+
.to eq described_class.parse('2013-11-11')
|
807
811
|
end
|
808
812
|
|
809
813
|
it 'knows the beginning and end of week-based chunks' do
|
@@ -980,7 +984,7 @@ describe Date do
|
|
980
984
|
expect(described_class.parse('2013-11-24').end_of_chunk(:semimonth))
|
981
985
|
.to eq described_class.parse('2013-11-30')
|
982
986
|
expect(described_class.parse('2013-11-08').end_of_chunk(:biweek))
|
983
|
-
.to eq described_class.parse('2013-11-
|
987
|
+
.to eq described_class.parse('2013-11-10')
|
984
988
|
expect(described_class.parse('2013-07-04').end_of_chunk(:week))
|
985
989
|
.to eq described_class.parse('2013-07-07')
|
986
990
|
expect {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fat_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel E. Doherty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '0'
|
116
116
|
requirements: []
|
117
|
-
rubygems_version: 3.5.
|
117
|
+
rubygems_version: 3.5.22
|
118
118
|
signing_key:
|
119
119
|
specification_version: 4
|
120
120
|
summary: some useful core extensions
|