is_business_day 0.1.2 → 0.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.
- data/MIT-LICENSE +20 -0
- data/README.md +5 -3
- data/lib/is_business_day.rb +19 -4
- data/lib/is_business_day/business_days.rb +11 -0
- data/lib/is_business_day/business_days/calculations.rb +29 -0
- data/lib/is_business_day/business_days/tests.rb +17 -0
- data/lib/is_business_day/christmas.rb +15 -0
- data/lib/is_business_day/christmas/day/calculations.rb +23 -0
- data/lib/is_business_day/christmas/day/tests.rb +21 -0
- data/lib/is_business_day/christmas/eve/calculations.rb +23 -0
- data/lib/is_business_day/christmas/eve/tests.rb +21 -0
- data/lib/is_business_day/fourth_of_july.rb +11 -0
- data/lib/is_business_day/fourth_of_july/calculations.rb +19 -0
- data/lib/is_business_day/fourth_of_july/tests.rb +17 -0
- data/lib/is_business_day/helpers.rb +53 -0
- data/lib/is_business_day/holidays.rb +31 -0
- data/lib/is_business_day/labor_day.rb +11 -0
- data/lib/is_business_day/labor_day/calculations.rb +22 -0
- data/lib/is_business_day/labor_day/tests.rb +18 -0
- data/lib/is_business_day/memorial_day.rb +11 -0
- data/lib/is_business_day/memorial_day/calculations.rb +24 -0
- data/lib/is_business_day/memorial_day/tests.rb +22 -0
- data/lib/is_business_day/new_years_day.rb +11 -0
- data/lib/is_business_day/new_years_day/calculations.rb +19 -0
- data/lib/is_business_day/new_years_day/tests.rb +17 -0
- data/lib/is_business_day/thanksgiving.rb +12 -0
- data/lib/is_business_day/thanksgiving/calculations.rb +24 -0
- data/lib/is_business_day/thanksgiving/tests.rb +22 -0
- data/lib/is_business_day/version.rb +1 -1
- data/spec/is_business_day/christmas_spec.rb +147 -0
- data/spec/is_business_day/fourth_of_july_spec.rb +70 -0
- data/spec/is_business_day/is_business_day_spec.rb +50 -0
- data/spec/is_business_day/labor_day_spec.rb +78 -0
- data/spec/is_business_day/memorial_day_spec.rb +73 -0
- data/spec/is_business_day/new_years_day_spec.rb +65 -0
- data/spec/is_business_day/thanksgiving_spec.rb +73 -0
- data/spec/spec_helper.rb +14 -0
- metadata +95 -36
- data/.gitignore +0 -4
- data/.travis.yml +0 -5
- data/Gemfile +0 -4
- data/Guardfile +0 -4
- data/is_business_day.gemspec +0 -26
- data/lib/is_business_day/active_support/core_ext/date/calculations.rb +0 -6
- data/lib/is_business_day/active_support/core_ext/time/calculations.rb +0 -6
- data/lib/is_business_day/digitalopera/business_day_calculations.rb +0 -55
- data/lib/is_business_day/digitalopera/holiday_calculations.rb +0 -130
- data/lib/rails/generators/is_business_day/install/install_generator.rb +0 -16
- data/lib/rails/generators/is_business_day/install/templates/is_business_day.rb +0 -1
- data/spec/active_support/core_ext/date/calculations_spec.rb +0 -165
- data/spec/active_support/core_ext/time/calculations_spec.rb +0 -165
@@ -0,0 +1,24 @@
|
|
1
|
+
module IsBusinessDay
|
2
|
+
module MemorialDay
|
3
|
+
module Calculations
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def memorial_day(date=Date.today)
|
8
|
+
memorial_day = Date
|
9
|
+
.parse("05/01/#{ date.year }")
|
10
|
+
.get_all_specific_days_in_month(:monday)
|
11
|
+
.last
|
12
|
+
|
13
|
+
return_business_day memorial_day
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
included do
|
18
|
+
def memorial_day
|
19
|
+
self.class.memorial_day(self)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module IsBusinessDay
|
2
|
+
module MemorialDay
|
3
|
+
module Tests
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
def is_memorial_day?
|
8
|
+
memorial_day = self.class
|
9
|
+
.parse("05/01/#{ self.year }")
|
10
|
+
.get_all_specific_days_in_month(:monday)
|
11
|
+
.last
|
12
|
+
|
13
|
+
self.month == 5 && self.day == memorial_day.day
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_not_memorial_day?
|
17
|
+
!is_memorial_day?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module IsBusinessDay
|
2
|
+
module NewYearsDay
|
3
|
+
module Calculations
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def new_years_day(date=Date.today)
|
8
|
+
return_business_day Date.parse("01/01/#{ date.year }")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
included do
|
13
|
+
def new_years_day
|
14
|
+
self.class.new_years_day(self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module IsBusinessDay
|
2
|
+
module Thanksgiving
|
3
|
+
module Calculations
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def thanksgiving_day(date = Date.today)
|
8
|
+
turkey_day = Date
|
9
|
+
.parse("11/01/#{ date.year }")
|
10
|
+
.get_all_specific_days_in_month(:thursday)
|
11
|
+
.last
|
12
|
+
|
13
|
+
return_business_day turkey_day
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
included do
|
18
|
+
def thanksgiving_day
|
19
|
+
self.class.thanksgiving_day(self)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module IsBusinessDay
|
2
|
+
module Thanksgiving
|
3
|
+
module Tests
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
def is_thanksgiving_day?
|
8
|
+
turkey_day = self.class
|
9
|
+
.parse("11/01/#{ self.year }")
|
10
|
+
.get_all_specific_days_in_month(:thursday)
|
11
|
+
.last
|
12
|
+
|
13
|
+
self.month == 11 && self.day == turkey_day.day
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_not_thanksgiving_day?
|
17
|
+
!is_thanksgiving_day?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'christmas' do
|
4
|
+
let(:some_date){ Date.parse("06/06/1979") }
|
5
|
+
let(:some_time){ Time.parse("06/06/1979 6:45pm") }
|
6
|
+
|
7
|
+
it 'should not return true when testing the some_date' do
|
8
|
+
expect(some_date.is_xmas_eve?).to be_false
|
9
|
+
expect(some_date.is_xmas_day?).to be_false
|
10
|
+
expect(some_time.is_xmas_eve?).to be_false
|
11
|
+
expect(some_time.is_xmas_day?).to be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'christmas eve' do
|
15
|
+
context 'Date Class' do
|
16
|
+
subject{ Date.christmas_eve }
|
17
|
+
|
18
|
+
its(:day){ should be 24 }
|
19
|
+
its(:month){ should be 12 }
|
20
|
+
its(:year){ should be Date.today.year }
|
21
|
+
its(:is_a_holiday?){ should be_true }
|
22
|
+
its(:is_christmas_eve?){ should be_true }
|
23
|
+
its(:is_xmas_eve?){ should be_true }
|
24
|
+
|
25
|
+
it 'should be a Date object' do
|
26
|
+
expect(subject).to be_a Date
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'Time Class' do
|
31
|
+
subject{ Time.christmas_eve }
|
32
|
+
|
33
|
+
its(:day){ should be 24 }
|
34
|
+
its(:month){ should be 12 }
|
35
|
+
its(:year){ should be Date.today.year }
|
36
|
+
its(:is_a_holiday?){ should be_true }
|
37
|
+
its(:is_christmas_eve?){ should be_true }
|
38
|
+
its(:is_xmas_eve?){ should be_true }
|
39
|
+
|
40
|
+
it 'should be a Date object' do
|
41
|
+
expect(subject).to be_a Time
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'Date instance' do
|
46
|
+
subject{ some_date.christmas_eve }
|
47
|
+
|
48
|
+
its(:day){ should be 24 }
|
49
|
+
its(:month){ should be 12 }
|
50
|
+
its(:year){ should be some_date.year }
|
51
|
+
its(:is_a_holiday?){ should be_true }
|
52
|
+
its(:is_christmas_eve?){ should be_true }
|
53
|
+
its(:is_xmas_eve?){ should be_true }
|
54
|
+
its(:is_not_christmas_eve?){ should be_false }
|
55
|
+
its(:is_not_xmas_eve?){ should be_false }
|
56
|
+
|
57
|
+
it 'should be a Date object' do
|
58
|
+
expect(subject).to be_a Date
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'Time instance' do
|
63
|
+
subject{ some_time.christmas_eve }
|
64
|
+
|
65
|
+
its(:day){ should be 24 }
|
66
|
+
its(:month){ should be 12 }
|
67
|
+
its(:year){ should be some_date.year }
|
68
|
+
its(:is_a_holiday?){ should be_true }
|
69
|
+
its(:is_christmas_eve?){ should be_true }
|
70
|
+
its(:is_xmas_eve?){ should be_true }
|
71
|
+
its(:is_not_christmas_eve?){ should be_false }
|
72
|
+
its(:is_not_xmas_eve?){ should be_false }
|
73
|
+
|
74
|
+
it 'should be a Date object' do
|
75
|
+
expect(subject).to be_a Time
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'christmas day' do
|
81
|
+
context 'Date Class' do
|
82
|
+
subject{ Date.christmas_day }
|
83
|
+
|
84
|
+
its(:day){ should be 25 }
|
85
|
+
its(:month){ should be 12 }
|
86
|
+
its(:year){ should be Date.today.year }
|
87
|
+
its(:is_a_holiday?){ should be_true }
|
88
|
+
its(:is_christmas_day?){ should be_true }
|
89
|
+
its(:is_xmas_day?){ should be_true }
|
90
|
+
its(:is_not_christmas_day?){ should be_false }
|
91
|
+
|
92
|
+
it 'should be a Date object' do
|
93
|
+
expect(subject).to be_a Date
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'Time Class' do
|
98
|
+
subject{ Time.christmas_day }
|
99
|
+
|
100
|
+
its(:day){ should be 25 }
|
101
|
+
its(:month){ should be 12 }
|
102
|
+
its(:year){ should be Date.today.year }
|
103
|
+
its(:is_a_holiday?){ should be_true }
|
104
|
+
its(:is_christmas_day?){ should be_true }
|
105
|
+
its(:is_xmas_day?){ should be_true }
|
106
|
+
its(:is_not_christmas_day?){ should be_false }
|
107
|
+
|
108
|
+
it 'should be a Date object' do
|
109
|
+
expect(subject).to be_a Time
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'a date instance' do
|
114
|
+
subject{ some_date.christmas_day }
|
115
|
+
|
116
|
+
its(:day){ should be 25 }
|
117
|
+
its(:month){ should be 12 }
|
118
|
+
its(:year){ should be some_date.year }
|
119
|
+
its(:is_a_holiday?){ should be_true }
|
120
|
+
its(:is_christmas_day?){ should be_true }
|
121
|
+
its(:is_xmas_day?){ should be_true }
|
122
|
+
its(:is_not_christmas_day?){ should be_false }
|
123
|
+
its(:is_not_xmas_day?){ should be_false }
|
124
|
+
|
125
|
+
it 'should be a Date object' do
|
126
|
+
expect(subject).to be_a Date
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'a time instance' do
|
131
|
+
subject{ some_time.christmas_day }
|
132
|
+
|
133
|
+
its(:day){ should be 25 }
|
134
|
+
its(:month){ should be 12 }
|
135
|
+
its(:year){ should be some_date.year }
|
136
|
+
its(:is_a_holiday?){ should be_true }
|
137
|
+
its(:is_christmas_day?){ should be_true }
|
138
|
+
its(:is_xmas_day?){ should be_true }
|
139
|
+
its(:is_not_christmas_day?){ should be_false }
|
140
|
+
its(:is_not_xmas_day?){ should be_false }
|
141
|
+
|
142
|
+
it 'should be a Date object' do
|
143
|
+
expect(subject).to be_a Time
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'fourth_of_july' do
|
4
|
+
let(:some_date){ Date.parse("06/06/1979") }
|
5
|
+
let(:some_time){ Time.parse("06/06/1979 6:45pm") }
|
6
|
+
let(:date){ Date.fourth_of_july }
|
7
|
+
let(:time){ Time.fourth_of_july }
|
8
|
+
|
9
|
+
it 'should not be the fourth of july' do
|
10
|
+
expect(some_date.is_fourth_of_july?).to be_false
|
11
|
+
expect(some_time.is_fourth_of_july?).to be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should return the proper objects' do
|
15
|
+
expect(date).to be_a Date
|
16
|
+
expect(time).to be_a Time
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Date do
|
20
|
+
context 'Class' do
|
21
|
+
subject{ date }
|
22
|
+
|
23
|
+
its(:day){ should be 4 }
|
24
|
+
its(:month){ should be 7 }
|
25
|
+
its(:year){ should be Date.today.year }
|
26
|
+
its(:is_a_holiday?){ should be_true }
|
27
|
+
its(:is_fourth_of_july?){ should be_true }
|
28
|
+
its(:is_not_fourth_of_july?){ should be_false }
|
29
|
+
its(:is_a_business_day?){ should be_false }
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'instance' do
|
33
|
+
subject{ some_date.fourth_of_july }
|
34
|
+
|
35
|
+
its(:day){ should be 4 }
|
36
|
+
its(:month){ should be 7 }
|
37
|
+
its(:year){ should be some_date.year }
|
38
|
+
its(:is_a_holiday?){ should be_true }
|
39
|
+
its(:is_fourth_of_july?){ should be_true }
|
40
|
+
its(:is_not_fourth_of_july?){ should be_false }
|
41
|
+
its(:is_a_business_day?){ should be_false }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe Time do
|
46
|
+
context 'Class' do
|
47
|
+
subject{ time }
|
48
|
+
|
49
|
+
its(:day){ should be 4 }
|
50
|
+
its(:month){ should be 7 }
|
51
|
+
its(:year){ should be Date.today.year }
|
52
|
+
its(:is_a_holiday?){ should be_true }
|
53
|
+
its(:is_fourth_of_july?){ should be_true }
|
54
|
+
its(:is_not_fourth_of_july?){ should be_false }
|
55
|
+
its(:is_a_business_day?){ should be_false }
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'instance' do
|
59
|
+
subject{ some_time.fourth_of_july }
|
60
|
+
|
61
|
+
its(:day){ should be 4 }
|
62
|
+
its(:month){ should be 7 }
|
63
|
+
its(:year){ should be some_date.year }
|
64
|
+
its(:is_a_holiday?){ should be_true }
|
65
|
+
its(:is_fourth_of_july?){ should be_true }
|
66
|
+
its(:is_not_fourth_of_july?){ should be_false }
|
67
|
+
its(:is_a_business_day?){ should be_false }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'IsBusinessday' do
|
4
|
+
let(:business_day){ Date.parse("11/12/13") }
|
5
|
+
let(:saturday){ Date.parse("11/16/13") }
|
6
|
+
let(:fourth_of_july){ Date.parse("07/04/13") }
|
7
|
+
let(:friday){ Date.parse("11/15/13") }
|
8
|
+
let(:monday){ Date.parse("11/11/13") }
|
9
|
+
|
10
|
+
describe 'business day tests' do
|
11
|
+
context 'valid business day' do
|
12
|
+
subject{ business_day }
|
13
|
+
its(:tuesday?){ should be_true }
|
14
|
+
its(:is_a_business_day?){ should be_true }
|
15
|
+
its(:is_not_a_business_day?){ should be_false }
|
16
|
+
its(:next_business_day){ should == Date.parse("11/13/13") }
|
17
|
+
its(:previous_business_day){ should == Date.parse("11/11/13") }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'weekend' do
|
21
|
+
subject{ saturday }
|
22
|
+
its(:saturday?){ should be_true }
|
23
|
+
its(:is_a_business_day?){ should be_false }
|
24
|
+
its(:is_not_a_business_day?){ should be_true }
|
25
|
+
its(:next_business_day){ should == Date.parse("11/18/13") }
|
26
|
+
its(:previous_business_day){ should == friday }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'friday' do
|
30
|
+
subject{ friday }
|
31
|
+
its(:friday?){ should be_true }
|
32
|
+
its(:next_business_day){ should == Date.parse("11/18/13") }
|
33
|
+
its(:previous_business_day){ should == Date.parse("11/14/13") }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'holiday tests' do
|
38
|
+
context 'business day' do
|
39
|
+
subject{ business_day }
|
40
|
+
its(:is_a_holiday?){ should be_false }
|
41
|
+
its(:is_not_a_holiday?){ should be_true }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'holiday' do
|
45
|
+
subject{ fourth_of_july }
|
46
|
+
its(:is_a_holiday?){ should be_true }
|
47
|
+
its(:is_not_a_holiday?){ should be_false }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'labor_day' do
|
4
|
+
let(:some_date){ Date.parse("06/06/1979") }
|
5
|
+
let(:some_time){ Time.parse("06/06/1979 6:45pm") }
|
6
|
+
let(:date){ Date.labor_day }
|
7
|
+
let(:time){ Time.labor_day }
|
8
|
+
|
9
|
+
it 'should not be labor day' do
|
10
|
+
expect(some_date.is_labor_day?).to be_false
|
11
|
+
expect(some_time.is_labor_day?).to be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should be proper objects' do
|
15
|
+
expect(date).to be_a Date
|
16
|
+
expect(time).to be_a Time
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Date do
|
20
|
+
context 'Class' do
|
21
|
+
let(:september){ Date.parse("09/01/#{ date.year }") }
|
22
|
+
let(:first_monday){ september.get_all_specific_days_in_month(:monday).first }
|
23
|
+
subject{ date }
|
24
|
+
|
25
|
+
its(:month){ should be 9 }
|
26
|
+
its(:day){ should be first_monday.day }
|
27
|
+
its(:year){ should be Date.today.year }
|
28
|
+
its(:is_a_holiday?){ should be_true }
|
29
|
+
its(:is_labor_day?){ should be_true }
|
30
|
+
its(:is_not_labor_day?){ should be_false }
|
31
|
+
its(:is_a_business_day?){ should be_false }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'instance' do
|
35
|
+
let(:september){ Date.parse("09/01/#{ some_date.year }")}
|
36
|
+
let(:first_monday){ september.get_all_specific_days_in_month(:monday).first }
|
37
|
+
subject{ some_date.labor_day }
|
38
|
+
|
39
|
+
its(:month){ should be 9 }
|
40
|
+
its(:day){ should be first_monday.day }
|
41
|
+
its(:year){ should be some_date.year }
|
42
|
+
its(:is_a_holiday?){ should be_true }
|
43
|
+
its(:is_labor_day?){ should be_true }
|
44
|
+
its(:is_not_labor_day?){ should be_false }
|
45
|
+
its(:is_a_business_day?){ should be_false }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe Time do
|
50
|
+
context 'Class' do
|
51
|
+
let(:september){ Date.parse("09/01/#{ time.year }")}
|
52
|
+
let(:first_monday){ september.get_all_specific_days_in_month(:monday).first }
|
53
|
+
subject{ time }
|
54
|
+
|
55
|
+
its(:month){ should be 9 }
|
56
|
+
its(:day){ should be first_monday.day }
|
57
|
+
its(:year){ should be Date.today.year }
|
58
|
+
its(:is_a_holiday?){ should be_true }
|
59
|
+
its(:is_labor_day?){ should be_true }
|
60
|
+
its(:is_not_labor_day?){ should be_false }
|
61
|
+
its(:is_a_business_day?){ should be_false }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'instance' do
|
65
|
+
let(:september){ Date.parse("09/01/#{ some_time.year }")}
|
66
|
+
let(:first_monday){ september.get_all_specific_days_in_month(:monday).first }
|
67
|
+
subject{ some_time.labor_day }
|
68
|
+
|
69
|
+
its(:month){ should be 9 }
|
70
|
+
its(:day){ should be first_monday.day }
|
71
|
+
its(:year){ should be some_time.year }
|
72
|
+
its(:is_a_holiday?){ should be_true }
|
73
|
+
its(:is_labor_day?){ should be_true }
|
74
|
+
its(:is_not_labor_day?){ should be_false }
|
75
|
+
its(:is_a_business_day?){ should be_false }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|