us_bank_holidays 0.0.1 → 0.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: 2c3a4c8155f725d440890a1d187c38596f34b326
4
- data.tar.gz: 239f7ae539a79fce66e8eb97fd8d78e110bea7d2
3
+ metadata.gz: 421d85478436ebcc1574e2ccc9639b887029e46e
4
+ data.tar.gz: 3a0cd71dd007bfddc392a016739eabcae93af9c4
5
5
  SHA512:
6
- metadata.gz: e5631bf04812d8a388c88a0a5e834f7dfb8d9eadbd44baa9308ceb5aac6c74030545f2ce276f45c63a27e3c2daeb5afabdf510562f27d7796dd0ea4c81a7b0f1
7
- data.tar.gz: 7f2af15f67b235524fb4a818c33aa5fdadc85b964495a56602e973190ed91ae35012560ffeb5c45572ba9f8c027ab1ef0d7e74349ab3449340e3091e9fa1f6bf
6
+ metadata.gz: c1a919b687012cc56dea4f7afa1259715b83e037ac275e236dda25f1ebfd9fd9de6e642d3f8ad89f03e5cfc46846b46a84f95c16e84f96d78489daf0cd4a48cd
7
+ data.tar.gz: 18552331c1658fdc6a1eda5db1bdfe61485c6736a5ae318064fadeb48a45fc6304ca625c6c5c810ec2e612cb46b21a6043160d5b0012fa72e72ffce041748e82
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ script: 'bundle exec rake spec'
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
7
+ - jruby
8
+ - rbx
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: rbx
data/README.md CHANGED
@@ -1,7 +1,19 @@
1
1
  # UsBankHolidays
2
2
 
3
+ https://github.com/albertosaurus/us_bank_holidays
4
+
5
+ [![Build Status](https://travis-ci.org/albertosaurus/us_bank_holidays.png?branch=master)](https://travis-ci.org/albertosaurus/us_bank_holidays)
6
+
3
7
  Patches `Date` to make working with US bank holidays easier
4
8
 
9
+ ## Requirements
10
+
11
+ Tested against the following Ruby runtimes:
12
+
13
+ * MRI 1.9.3, 2.0.0, 2.1.0
14
+ * JRuby 1.7+
15
+ * Rubinius (latest)
16
+
5
17
  ## Installation
6
18
 
7
19
  Add this line to your application's Gemfile:
@@ -10,7 +22,7 @@ Add this line to your application's Gemfile:
10
22
 
11
23
  And then execute:
12
24
 
13
- $ bundle
25
+ $ bundle install
14
26
 
15
27
  Or install it yourself as:
16
28
 
@@ -31,8 +43,10 @@ date = Date.new(2014, 1, 3) # Friday, January 3, 2014
31
43
  date.bank_holiday? # Returns false
32
44
  date.weekend? # Returns false
33
45
  date.next_banking_day # Returns Monday, January 6, 2014
46
+ date.banking_day? # Returns true
34
47
 
35
48
  Date.new(2014, 1, 16).add_banking_days(2) # Returns Tuesday, January 21, 2014
49
+ Date.new(2014, 1, 5).previous_banking_day # Returns Friday, January 3, 2014
36
50
  ```
37
51
 
38
52
  ## Contributing
@@ -1,5 +1,7 @@
1
1
  module UsBankHolidays
2
2
 
3
+ # Utility class to calculate where the federal holidays will actually fall
4
+ # for any given year.
3
5
  class HolidayYear
4
6
 
5
7
  attr_reader :year,
@@ -49,6 +51,9 @@ module UsBankHolidays
49
51
 
50
52
  end
51
53
 
54
+ # Returns the federal holidays for the given year on the dates they will actually
55
+ # be observed. In the event that New Year's Day for the following year falls on a
56
+ # Saturday December 31 will also be included.
52
57
  def bank_holidays
53
58
  @bank_holidays ||= begin
54
59
  holidays = [ new_years_day,
@@ -69,17 +74,19 @@ module UsBankHolidays
69
74
  end
70
75
  end
71
76
 
72
- private
73
-
74
- def roll_nominal(nominal)
75
- if nominal.saturday?
76
- nominal - 1
77
- elsif nominal.sunday?
78
- nominal + 1
79
- else
80
- nominal
81
- end
77
+ # Figures out where to roll the given nominal date. If it's a Saturday, assumes
78
+ # it's the day before (Friday), if Sunday it's the date after (Monday), otherwise
79
+ # just returns self.
80
+ def roll_nominal(nominal)
81
+ if nominal.saturday?
82
+ nominal - 1
83
+ elsif nominal.sunday?
84
+ nominal + 1
85
+ else
86
+ nominal
82
87
  end
88
+ end
89
+ private :roll_nominal
83
90
 
84
91
  end
85
92
 
@@ -1,3 +1,3 @@
1
1
  module UsBankHolidays
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -6,15 +6,23 @@ require 'us_bank_holidays/month'
6
6
 
7
7
  module UsBankHolidays
8
8
 
9
+ # Returns true if the given date is a weekend, false otherwise.
9
10
  def self.weekend?(date)
10
11
  date.sunday? || date.saturday?
11
12
  end
12
13
 
14
+ # Returns true if the given date is a bank holiday, false otherwise.
13
15
  def self.bank_holiday?(date)
14
16
  weekend?(date) ||
15
17
  ::UsBankHolidays::HolidayYear.new(date.year).bank_holidays.include?(date)
16
18
  end
17
19
 
20
+ # Returns true if the given date is a banking day, i.e. is not a bank holiday,
21
+ # false otherwise.
22
+ def self.banking_day?(date)
23
+ !bank_holiday?(date)
24
+ end
25
+
18
26
  def self.next_banking_day(date)
19
27
  if (next_date = date + 1).bank_holiday?
20
28
  next_banking_day(next_date)
@@ -31,24 +39,32 @@ module UsBankHolidays
31
39
  end
32
40
  end
33
41
 
42
+ # Instance methods to be injected into the Date class
34
43
  module DateMethods
35
44
 
45
+ # Returns true if the date if a weekend, false otherwise.
36
46
  def weekend?
37
47
  ::UsBankHolidays.weekend? self
38
48
  end
39
49
 
50
+ # Returns true if the date is a bank holiday, false otherwise.
40
51
  def bank_holiday?
41
52
  ::UsBankHolidays.bank_holiday? self
42
53
  end
43
54
 
55
+ # Returns the next banking day after this one.
44
56
  def next_banking_day
45
57
  ::UsBankHolidays.next_banking_day self
46
58
  end
47
59
 
60
+ # Returns the previous banking day
48
61
  def previous_banking_day
49
62
  ::UsBankHolidays.previous_banking_day self
50
63
  end
51
64
 
65
+ # Adds the given number of banking days, i.e. bank holidays don't count.
66
+ # If days is negative, subtracts the given number of banking days.
67
+ # If days is zero, returns self.
52
68
  def add_banking_days(days)
53
69
  day = self
54
70
  if days > 0
@@ -58,6 +74,12 @@ module UsBankHolidays
58
74
  end
59
75
  day
60
76
  end
77
+
78
+ # Returns true if this is a banking day, i.e. is not a bank holiday,
79
+ # false otherwise.
80
+ def banking_day?
81
+ !bank_holiday?
82
+ end
61
83
  end
62
84
 
63
85
  end
@@ -88,21 +88,33 @@ describe UsBankHolidays do
88
88
 
89
89
  describe '.bank_holiday?' do
90
90
  it 'should determine bank holidays on the list' do
91
- sample_holidays.each{ |holiday| UsBankHolidays.bank_holiday?(holiday).should be_true }
91
+ sample_holidays.each{ |holiday|
92
+ UsBankHolidays.bank_holiday?(holiday).should be_true
93
+ UsBankHolidays.banking_day?(holiday).should be_false
94
+ }
92
95
  end
93
96
 
94
97
  it 'weekends should be bank holidays' do
95
- sample_weekends.each{ |weekend| UsBankHolidays.bank_holiday?(weekend).should be_true }
98
+ sample_weekends.each{ |weekend|
99
+ UsBankHolidays.bank_holiday?(weekend).should be_true
100
+ UsBankHolidays.banking_day?(weekend).should be_false
101
+ }
96
102
  end
97
103
 
98
104
  it 'regular days should not be bank holidays' do
99
- sample_weekdays.each { |day| UsBankHolidays.bank_holiday?(day).should be_false }
105
+ sample_weekdays.each { |day|
106
+ UsBankHolidays.bank_holiday?(day).should be_false
107
+ UsBankHolidays.banking_day?(day).should be_true
108
+ }
100
109
  end
101
110
  end
102
111
 
103
112
  describe '.weekend?' do
104
113
  it 'should recognize weekends' do
105
- sample_weekends.each{ |weekend| UsBankHolidays.weekend?(weekend).should be_true }
114
+ sample_weekends.each{ |weekend|
115
+ UsBankHolidays.weekend?(weekend).should be_true
116
+ UsBankHolidays.banking_day?(weekend).should be_false
117
+ }
106
118
  end
107
119
 
108
120
  it 'weekdays should not be considered weekends' do
@@ -115,7 +127,10 @@ describe UsBankHolidays do
115
127
  describe '.bank_holiday?' do
116
128
 
117
129
  it 'should recognize bank holidays' do
118
- sample_holidays.each{ |holiday| holiday.bank_holiday?.should be_true }
130
+ sample_holidays.each{ |holiday|
131
+ holiday.bank_holiday?.should be_true
132
+ holiday.banking_day?.should be_false
133
+ }
119
134
  end
120
135
 
121
136
  it 'should treat weekends as bank holidays' do
@@ -123,7 +138,10 @@ describe UsBankHolidays do
123
138
  end
124
139
 
125
140
  it 'should not treat regular weekdays as bank holidays' do
126
- sample_weekdays.each { |day| day.bank_holiday?.should be_false }
141
+ sample_weekdays.each { |day|
142
+ day.bank_holiday?.should be_false
143
+ day.banking_day?.should be_true
144
+ }
127
145
  end
128
146
 
129
147
  it 'if Jan. 1 falls on a Saturday, Dec. 31 of the previous year should be a bank holiday' do
@@ -134,11 +152,17 @@ describe UsBankHolidays do
134
152
  describe '.weekend?' do
135
153
 
136
154
  it 'should recognize weekends' do
137
- sample_weekends.each{ |weekend| weekend.weekend?.should be_true }
155
+ sample_weekends.each{ |weekend|
156
+ weekend.weekend?.should be_true
157
+ weekend.banking_day?.should be_false
158
+ }
138
159
  end
139
160
 
140
161
  it 'weekdays should not be considered weekends' do
141
- sample_weekdays.each { |day| day.weekend?.should be_false }
162
+ sample_weekdays.each { |day|
163
+ day.weekend?.should be_false
164
+ day.banking_day?.should be_true
165
+ }
142
166
  end
143
167
 
144
168
  end
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.1
4
+ version: 0.0.2
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-07 00:00:00.000000000 Z
11
+ date: 2014-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,6 +73,7 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - .travis.yml
76
77
  - Gemfile
77
78
  - LICENSE.txt
78
79
  - README.md