norwegian_holidays 0.0.1 → 0.0.2
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/README.md +10 -0
- data/lib/norwegian_holidays.rb +21 -8
- data/lib/norwegian_holidays/version.rb +1 -1
- data/spec/norwegian_holidays_spec.rb +148 -71
- metadata +8 -8
data/README.md
CHANGED
@@ -23,3 +23,13 @@ Christmas: December 24th (Norwegians only care about Christmas Eve, apparently).
|
|
23
23
|
|
24
24
|
NorwegianHolidays.next_mothersday( Date.new(2011, 3, 14) )
|
25
25
|
=> February 12, 2012
|
26
|
+
|
27
|
+
|
28
|
+
## Next (if coming up) or last holiday
|
29
|
+
|
30
|
+
There is a need to return _the next holiday_ if it is coming up within a certain timeframe, otherwise return _last year's holiday_.
|
31
|
+
|
32
|
+
The name for this has not been suitably determined as of yet.
|
33
|
+
|
34
|
+
fathersday_for_season(2.months)
|
35
|
+
|
data/lib/norwegian_holidays.rb
CHANGED
@@ -33,19 +33,32 @@ module NorwegianHolidays
|
|
33
33
|
|
34
34
|
def method_missing(method, *args, &block)
|
35
35
|
if method.to_s =~ /^next_(.*)$/
|
36
|
+
next_holiday($1, args.first)
|
37
|
+
elsif method.to_s =~ /(.*)_for_season/
|
38
|
+
holiday_for_season($1, *args)
|
39
|
+
else
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
36
43
|
|
37
|
-
|
38
|
-
holiday = $1
|
44
|
+
private
|
39
45
|
|
40
|
-
|
46
|
+
def next_holiday(holiday, given_date)
|
47
|
+
the_day = self.send(holiday.to_sym, given_date.year)
|
41
48
|
|
42
|
-
|
43
|
-
|
44
|
-
|
49
|
+
if the_day < given_date
|
50
|
+
the_day = self.send(holiday.to_sym, given_date.year + 1)
|
51
|
+
end
|
52
|
+
|
53
|
+
the_day
|
54
|
+
end
|
45
55
|
|
46
|
-
|
56
|
+
def holiday_for_season(holiday, date, timeframe)
|
57
|
+
upcoming = next_holiday(holiday, date)
|
58
|
+
if (date + timeframe) >= upcoming
|
59
|
+
upcoming
|
47
60
|
else
|
48
|
-
|
61
|
+
send(holiday, upcoming.year - 1)
|
49
62
|
end
|
50
63
|
end
|
51
64
|
|
@@ -16,134 +16,211 @@ describe NorwegianHolidays do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
describe "
|
19
|
+
describe "Christmas" do
|
20
|
+
let(:christmas) { Date.new(2011, 12, 24) }
|
21
|
+
|
20
22
|
it "is on Christmas Eve" do
|
21
|
-
NorwegianHolidays.christmas(2011).should eq(
|
23
|
+
NorwegianHolidays.christmas(2011).should eq(christmas)
|
22
24
|
end
|
23
|
-
end
|
24
25
|
|
25
|
-
|
26
|
-
it "is on Feb 14th" do
|
27
|
-
NorwegianHolidays.valentines_day(2011).should eq(Date.new(2011, 2, 14))
|
28
|
-
end
|
29
|
-
end
|
26
|
+
describe "#next_christmas" do
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
28
|
+
it "is on Dec 24th" do
|
29
|
+
NorwegianHolidays.next_christmas(christmas - 1.day).should eq(christmas)
|
30
|
+
end
|
36
31
|
|
37
|
-
|
38
|
-
|
39
|
-
|
32
|
+
it "is this year if today is Christmas Eve" do
|
33
|
+
NorwegianHolidays.next_christmas(christmas).should eq(christmas)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "is next year if it's already passed" do
|
37
|
+
NorwegianHolidays.next_christmas(christmas + 1.day).should eq(christmas + 1.year)
|
38
|
+
end
|
40
39
|
end
|
41
|
-
end
|
42
40
|
|
43
|
-
|
44
|
-
|
41
|
+
describe "#christmas_for_season(date, timespan)" do
|
42
|
+
let(:timeframe) { 2.months }
|
43
|
+
let(:cutoff) { christmas - 2.months }
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
it "is this year if it's coming up within the timeframe" do
|
46
|
+
NorwegianHolidays.christmas_for_season(cutoff + 1.day, timeframe).should eq(christmas)
|
47
|
+
end
|
49
48
|
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
it "is this year if it's coming up in exactly the timeframe" do
|
50
|
+
NorwegianHolidays.christmas_for_season(cutoff, timeframe).should eq(christmas)
|
51
|
+
end
|
53
52
|
|
54
|
-
|
55
|
-
|
53
|
+
it "is last year if it's too long til the next one" do
|
54
|
+
NorwegianHolidays.christmas_for_season(cutoff - 1.day, timeframe).should eq(christmas - 1.year)
|
55
|
+
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
describe "
|
59
|
+
describe "Valentines Day" do
|
60
60
|
let(:valentines_day) { Date.new(2011, 2, 14) }
|
61
61
|
|
62
62
|
it "is on Feb 14th" do
|
63
|
-
NorwegianHolidays.
|
63
|
+
NorwegianHolidays.valentines_day(2011).should eq(valentines_day)
|
64
64
|
end
|
65
65
|
|
66
|
-
|
67
|
-
|
66
|
+
describe "#next_valentines_day" do
|
67
|
+
|
68
|
+
it "is on Feb 14th" do
|
69
|
+
NorwegianHolidays.next_valentines_day(valentines_day - 1.day).should eq(valentines_day)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "is this year if today is valentines day" do
|
73
|
+
NorwegianHolidays.next_valentines_day(valentines_day).should eq(valentines_day)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "is next year if it's already passed" do
|
77
|
+
NorwegianHolidays.next_valentines_day(valentines_day + 1.day).should eq(valentines_day + 1.year)
|
78
|
+
end
|
68
79
|
end
|
69
80
|
|
70
|
-
|
71
|
-
|
81
|
+
describe "#valentines_day_for_season(date, timespan)" do
|
82
|
+
let(:timeframe) { 2.months }
|
83
|
+
let(:cutoff) { valentines_day - 2.months }
|
84
|
+
|
85
|
+
it "is this year if it's coming up within the timeframe" do
|
86
|
+
NorwegianHolidays.valentines_day_for_season(cutoff + 1.day, timeframe).should eq(valentines_day)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "is this year if it's coming up in exactly the timeframe" do
|
90
|
+
NorwegianHolidays.valentines_day_for_season(cutoff, timeframe).should eq(valentines_day)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "is last year if it's too long til the next one" do
|
94
|
+
NorwegianHolidays.valentines_day_for_season(cutoff - 1.day, timeframe).should eq(valentines_day - 1.year)
|
95
|
+
end
|
72
96
|
end
|
97
|
+
|
73
98
|
end
|
74
99
|
|
75
|
-
describe "
|
100
|
+
describe "Mothersday" do
|
76
101
|
let(:mothersday_2010) { Date.new(2010, 2, 14) }
|
77
102
|
let(:mothersday_2011) { Date.new(2011, 2, 13) }
|
78
103
|
let(:mothersday_2012) { Date.new(2012, 2, 12) }
|
79
104
|
|
80
|
-
|
81
|
-
|
82
|
-
|
105
|
+
it "is on the second Sunday of February" do
|
106
|
+
NorwegianHolidays.mothersday(2010).should eq(mothersday_2010)
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "#next_mothersday" do
|
110
|
+
|
111
|
+
context "(sanity check) correct in" do
|
112
|
+
specify "2010" do
|
113
|
+
NorwegianHolidays.next_mothersday( Date.new(2010, 1, 1) ).should eq(mothersday_2010)
|
114
|
+
end
|
115
|
+
|
116
|
+
specify "2011" do
|
117
|
+
NorwegianHolidays.next_mothersday( Date.new(2011, 1, 1) ).should eq(mothersday_2011)
|
118
|
+
end
|
119
|
+
|
120
|
+
specify "2012" do
|
121
|
+
NorwegianHolidays.next_mothersday( Date.new(2012, 1, 1) ).should eq(mothersday_2012)
|
122
|
+
end
|
83
123
|
end
|
84
124
|
|
85
|
-
|
86
|
-
|
125
|
+
context "on mothersday" do
|
126
|
+
it "is this year" do
|
127
|
+
NorwegianHolidays.next_mothersday(mothersday_2010).should eq(mothersday_2010)
|
128
|
+
end
|
87
129
|
end
|
88
130
|
|
89
|
-
|
90
|
-
|
131
|
+
context "before mothersday" do
|
132
|
+
it "is this year" do
|
133
|
+
NorwegianHolidays.next_mothersday(mothersday_2010 - 1.day).should eq(mothersday_2010)
|
134
|
+
end
|
91
135
|
end
|
92
|
-
end
|
93
136
|
|
94
|
-
|
95
|
-
|
96
|
-
|
137
|
+
context "after mothersday" do
|
138
|
+
it "is next year" do
|
139
|
+
NorwegianHolidays.next_mothersday(mothersday_2010 + 1.day).should eq(mothersday_2011)
|
140
|
+
end
|
97
141
|
end
|
98
142
|
end
|
99
143
|
|
100
|
-
|
101
|
-
|
102
|
-
|
144
|
+
describe "#mothersday_for_season(date, timespan)" do
|
145
|
+
let(:mothersday) { mothersday_2011 }
|
146
|
+
let(:last_mothersday) { mothersday_2010 }
|
147
|
+
|
148
|
+
let(:cutoff) { mothersday - 2.months }
|
149
|
+
let(:timeframe) { 2.months }
|
150
|
+
|
151
|
+
it "is this year if it's coming up within the timeframe" do
|
152
|
+
NorwegianHolidays.mothersday_for_season(cutoff + 1.day, timeframe).should eq(mothersday)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "is this year if it's coming up in exactly the timeframe" do
|
156
|
+
NorwegianHolidays.mothersday_for_season(cutoff, timeframe).should eq(mothersday)
|
103
157
|
end
|
104
|
-
end
|
105
158
|
|
106
|
-
|
107
|
-
|
108
|
-
NorwegianHolidays.next_mothersday(mothersday_2010 + 1.day).should eq(mothersday_2011)
|
159
|
+
it "is last year if it's too long til the next one" do
|
160
|
+
NorwegianHolidays.mothersday_for_season(cutoff - 1.day, timeframe).should eq(last_mothersday)
|
109
161
|
end
|
110
162
|
end
|
111
163
|
end
|
112
164
|
|
113
|
-
describe "
|
165
|
+
describe "Fathersday" do
|
114
166
|
let(:fathersday_2010) { Date.new(2010, 11, 14) }
|
115
167
|
let(:fathersday_2011) { Date.new(2011, 11, 13) }
|
116
168
|
let(:fathersday_2012) { Date.new(2012, 11, 11) }
|
117
169
|
|
118
|
-
|
119
|
-
|
120
|
-
|
170
|
+
it "is on the second Sunday of November" do
|
171
|
+
NorwegianHolidays.fathersday(2011).should eq(fathersday_2011)
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "#next_fathersday" do
|
175
|
+
context "(sanity check) correct in" do
|
176
|
+
specify "2010" do
|
177
|
+
NorwegianHolidays.next_fathersday( Date.new(2010, 1, 1) ).should eq(fathersday_2010)
|
178
|
+
end
|
179
|
+
|
180
|
+
specify "2011" do
|
181
|
+
NorwegianHolidays.next_fathersday( Date.new(2011, 1, 1) ).should eq(fathersday_2011)
|
182
|
+
end
|
183
|
+
|
184
|
+
specify "2012" do
|
185
|
+
NorwegianHolidays.next_fathersday( Date.new(2012, 1, 1) ).should eq(fathersday_2012)
|
186
|
+
end
|
121
187
|
end
|
122
188
|
|
123
|
-
|
124
|
-
|
189
|
+
context "on fathersday" do
|
190
|
+
it "is this year" do
|
191
|
+
NorwegianHolidays.next_fathersday(fathersday_2010).should eq(fathersday_2010)
|
192
|
+
end
|
125
193
|
end
|
126
194
|
|
127
|
-
|
128
|
-
|
195
|
+
context "before fathersday" do
|
196
|
+
it "is this year" do
|
197
|
+
NorwegianHolidays.next_fathersday(fathersday_2010 - 1.day).should eq(fathersday_2010)
|
198
|
+
end
|
129
199
|
end
|
130
|
-
end
|
131
200
|
|
132
|
-
|
133
|
-
|
134
|
-
|
201
|
+
context "after fathersday" do
|
202
|
+
it "is next year" do
|
203
|
+
NorwegianHolidays.next_fathersday(fathersday_2010 + 1.day).should eq(fathersday_2011)
|
204
|
+
end
|
135
205
|
end
|
136
206
|
end
|
137
207
|
|
138
|
-
|
139
|
-
|
140
|
-
|
208
|
+
describe "#fathersday_for_season(date, timespan)" do
|
209
|
+
let(:fathersday) { fathersday_2011 }
|
210
|
+
let(:last_fathersday) { fathersday_2010 }
|
211
|
+
let(:timeframe) { 2.months }
|
212
|
+
let(:cutoff) { fathersday - 2.months }
|
213
|
+
|
214
|
+
it "is this year if it's coming up within the timeframe" do
|
215
|
+
NorwegianHolidays.fathersday_for_season(cutoff + 1.day, timeframe).should eq(fathersday)
|
216
|
+
end
|
217
|
+
|
218
|
+
it "is this year if it's coming up in exactly the timeframe" do
|
219
|
+
NorwegianHolidays.fathersday_for_season(cutoff, timeframe).should eq(fathersday)
|
141
220
|
end
|
142
|
-
end
|
143
221
|
|
144
|
-
|
145
|
-
|
146
|
-
NorwegianHolidays.next_fathersday(fathersday_2010 + 1.day).should eq(fathersday_2011)
|
222
|
+
it "is last year if it's too long til the next one" do
|
223
|
+
NorwegianHolidays.fathersday_for_season(cutoff - 1.day, timeframe).should eq(last_fathersday)
|
147
224
|
end
|
148
225
|
end
|
149
226
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norwegian_holidays
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70170598094940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70170598094940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: active_support
|
27
|
-
requirement: &
|
27
|
+
requirement: &70170598094500 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70170598094500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: i18n
|
38
|
-
requirement: &
|
38
|
+
requirement: &70170598094080 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70170598094080
|
47
47
|
description: ! 'A Norwegian holiday calendar. Answers the age-old question: "When
|
48
48
|
is mothersday this year?"'
|
49
49
|
email:
|