us_bank_holidays 0.0.2 → 0.0.3
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/README.md +1 -0
- data/lib/us_bank_holidays/month.rb +18 -22
- data/lib/us_bank_holidays/version.rb +1 -1
- data/spec/functional/month_spec.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55df8b485e62ef28d7d1872ff78e21a807e241e0
|
4
|
+
data.tar.gz: 0c36413d6b45bb274e3c70a1929c6a517ab3af0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2153d108279fd2296d312274210153bf10ee38c50d1239baf4dc9e5ae3c1303d01fed80801ea77268419bcd6ee0f8ab3e5eb2703f5fab3b8bf9c22e15039ec40
|
7
|
+
data.tar.gz: 8ab9877ee8d665d75ba9385fde4aaa05ed186db5bdaa900cb5f24ba5c8258722d884dcd9e815515b9a1d6fd6698682bf614a189d147c029def5a3f632b9c2956
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
https://github.com/albertosaurus/us_bank_holidays
|
4
4
|
|
5
5
|
[](https://travis-ci.org/albertosaurus/us_bank_holidays)
|
6
|
+
[](https://codeclimate.com/github/albertosaurus/us_bank_holidays)
|
6
7
|
|
7
8
|
Patches `Date` to make working with US bank holidays easier
|
8
9
|
|
@@ -1,16 +1,20 @@
|
|
1
1
|
module UsBankHolidays
|
2
2
|
|
3
|
-
# Utility class to make it easier to work with a particular month
|
3
|
+
# Utility class to make it easier to work with a particular month. It represents
|
4
|
+
# a month of a specific year.
|
4
5
|
class Month
|
5
6
|
|
6
7
|
attr_reader :year, :month
|
7
8
|
|
9
|
+
# Initializes an instance from a year and a month. Raises an error if the
|
10
|
+
# month is not in the allowed range, i.e. it must be between 1 and 12 inclusive.
|
8
11
|
def initialize(year, month)
|
9
12
|
if month < 1 || month > 12
|
10
13
|
raise ArgumentError, "Month is out of range, must be between 1 and 12, got #{month}"
|
11
14
|
end
|
12
15
|
@month = month
|
13
|
-
@year
|
16
|
+
@year = year
|
17
|
+
@weeks = []
|
14
18
|
init_month
|
15
19
|
end
|
16
20
|
|
@@ -41,6 +45,9 @@ module UsBankHolidays
|
|
41
45
|
:saturdays => 6
|
42
46
|
}.each do |day, index|
|
43
47
|
|
48
|
+
# For each day of the week, define a method that will return the set of
|
49
|
+
# all the matching dates in the month. For example, this lets me determine
|
50
|
+
# all the Mondays of the month, or all the Fridays.
|
44
51
|
define_method(day) do
|
45
52
|
@weeks.map { |w|
|
46
53
|
w[index]
|
@@ -49,10 +56,14 @@ module UsBankHolidays
|
|
49
56
|
|
50
57
|
end
|
51
58
|
|
59
|
+
# Returns true if the given month contains the given date, false otherwise.
|
60
|
+
def contains?(date)
|
61
|
+
year == date.year && month == date.month
|
62
|
+
end
|
63
|
+
|
52
64
|
private
|
53
65
|
|
54
66
|
def init_month
|
55
|
-
@weeks = []
|
56
67
|
current_date = Date.new(year, month, 1)
|
57
68
|
week = init_first_week(current_date)
|
58
69
|
while current_date.month == month
|
@@ -60,31 +71,16 @@ module UsBankHolidays
|
|
60
71
|
current_date += 1
|
61
72
|
if week.size == 7 || current_date.month != month
|
62
73
|
@weeks << week.freeze
|
63
|
-
|
64
|
-
week = []
|
65
|
-
end
|
74
|
+
week = [] if contains?(current_date)
|
66
75
|
end
|
67
76
|
end
|
68
77
|
@weeks.freeze
|
69
78
|
end
|
70
79
|
|
71
80
|
def init_first_week(start_date)
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
when 1
|
76
|
-
[nil]
|
77
|
-
when 2
|
78
|
-
[nil, nil]
|
79
|
-
when 3
|
80
|
-
[nil, nil, nil]
|
81
|
-
when 4
|
82
|
-
[nil, nil, nil, nil]
|
83
|
-
when 5
|
84
|
-
[nil, nil, nil, nil, nil]
|
85
|
-
when 6
|
86
|
-
[nil, nil, nil, nil, nil, nil]
|
87
|
-
end
|
81
|
+
offset = []
|
82
|
+
start_date.wday.times { offset << nil }
|
83
|
+
offset
|
88
84
|
end
|
89
85
|
|
90
86
|
end
|
@@ -19,6 +19,27 @@ describe UsBankHolidays::Month do
|
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
22
|
+
describe '.contains?' do
|
23
|
+
|
24
|
+
it 'should return true if the month contains the given date' do
|
25
|
+
(1..31).each do |mday|
|
26
|
+
january.contains?(Date.new(january.year, january.month, mday)).should be_true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should return false if the month is not the same' do
|
31
|
+
(1..31).each do |mday|
|
32
|
+
january.contains?(Date.new(2014, 8, mday)).should be_false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should return false if the year is not the same' do
|
37
|
+
(1..31).each do |mday|
|
38
|
+
january.contains?(Date.new(2015, 1, mday)).should be_false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
22
43
|
describe '.to_s' do
|
23
44
|
|
24
45
|
let(:january_str) {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: us_bank_holidays
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arthur Shagall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|