week_of_month 1.1.0 → 1.2.1

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.
@@ -0,0 +1,350 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'test/unit'
5
+ require_relative '../week_of_month'
6
+
7
+ class TestWeekOfMonthForDateObject < Test::Unit::TestCase
8
+
9
+ def test_constants_present?
10
+ assert Date::WEEK_IN_ENG
11
+
12
+ assert Date::WEEK_IN_GER
13
+
14
+ assert Date::WEEK_IN_FR
15
+
16
+ assert Date::WEEK_IN_JAP
17
+
18
+ assert Date::MONTH_WITH_DAY
19
+
20
+ assert Date::MONTH_WITH_SEQUENCE
21
+ end
22
+
23
+ def test_constants_value
24
+ assert_equal({ 1 => 'First', 2 => 'Second',
25
+ 3 => 'Third', 4 => 'Fourth',
26
+ 5 => 'Fifth', 6 => 'Sixth' }, Date::WEEK_IN_ENG)
27
+
28
+ assert_equal({ 1 => 'First', 2 => 'Second',
29
+ 3 => 'Third', 4 => 'Quatrième',
30
+ 5 => 'Cinquième', 6 => 'sixième'}, Date::WEEK_IN_FR)
31
+
32
+ assert_equal({ 1 => 'First', 2 => 'Second',
33
+ 3 => 'Dritten', 4 => 'Vierte',
34
+ 5 => 'Fünfte', 6 => 'Sechste'}, Date::WEEK_IN_GER)
35
+
36
+ assert_equal({ 1=>'最初', 2 =>'秒',
37
+ 3 =>'サード', 4=> '第4回',
38
+ 5 =>'第五',6=> 'シックス' } , Date::WEEK_IN_JAP)
39
+
40
+ assert_equal({ :january => 1, :february => 2, :march => 3,
41
+ :april => 4, :may => 5, :june => 6, :july => 7,
42
+ :august => 8, :september => 9, :october => 10,
43
+ :november => 11, :december => 12 }, Date::MONTH_WITH_SEQUENCE)
44
+
45
+ assert_equal({ :january => 31, :february => 28, :march => 31,
46
+ :april => 30, :may => 31, :june => 30, :july => 31,
47
+ :august => 31, :september => 30, :october => 31,
48
+ :november => 30, :december => 31 }, Date::MONTH_WITH_DAY)
49
+ end
50
+
51
+ def test_month?
52
+ assert Date.new(2012,1,1).january?
53
+
54
+ assert Date.new(2012,2,1).february?
55
+
56
+ assert Date.new(2012,3,1).march?
57
+
58
+ assert Date.new(2012,4,1).april?
59
+
60
+ assert Date.new(2012,5,1).may?
61
+
62
+ assert Date.new(2012,6,1).june?
63
+
64
+ assert Date.new(2012,7,1).july?
65
+
66
+ assert Date.new(2012,8,1).august?
67
+
68
+ assert Date.new(2012,9,1).september?
69
+
70
+ assert Date.new(2012,10,1).october?
71
+
72
+ assert Date.new(2012,11,1).november?
73
+
74
+ assert Date.new(2012,12,1).december?
75
+ end
76
+
77
+ def test_week_of_month
78
+ assert_equal 5, Date.new(2012,1,31).week_of_month
79
+
80
+ assert_equal 5, Date.new(2012,2,29).week_of_month
81
+
82
+ assert_equal 5, Date.new(2012,3,31).week_of_month
83
+
84
+ assert_equal 5, Date.new(2012,4,30).week_of_month
85
+
86
+ assert_equal 5, Date.new(2012,5,31).week_of_month
87
+
88
+ assert_equal 5, Date.new(2012,6,30).week_of_month
89
+
90
+ assert_equal 5, Date.new(2012,7,31).week_of_month
91
+
92
+ assert_equal 5, Date.new(2012,8,31).week_of_month
93
+
94
+ assert_equal 6, Date.new(2012,9,30).week_of_month
95
+
96
+ assert_equal 5, Date.new(2012,10,31).week_of_month
97
+
98
+ assert_equal 5, Date.new(2012,11,30).week_of_month
99
+
100
+ assert_equal 6, Date.new(2012,12,31).week_of_month
101
+ end
102
+
103
+ def test_last_day_of_month
104
+ assert_equal 31, Date.new(2012,1,31).last_day_of_month
105
+
106
+ assert_equal 29, Date.new(2012,2,29).last_day_of_month
107
+
108
+ assert_equal 31, Date.new(2012,3,31).last_day_of_month
109
+
110
+ assert_equal 30, Date.new(2012,4,30).last_day_of_month
111
+
112
+ assert_equal 31, Date.new(2012,5,31).last_day_of_month
113
+
114
+ assert_equal 30, Date.new(2012,6,30).last_day_of_month
115
+
116
+ assert_equal 31, Date.new(2012,7,31).last_day_of_month
117
+
118
+ assert_equal 31, Date.new(2012,8,31).last_day_of_month
119
+
120
+ assert_equal 30, Date.new(2012,9,30).last_day_of_month
121
+
122
+ assert_equal 31, Date.new(2012,10,31).last_day_of_month
123
+
124
+ assert_equal 30, Date.new(2012,11,30).last_day_of_month
125
+
126
+ assert_equal 31, Date.new(2012,12,31).last_day_of_month
127
+ end
128
+
129
+ def test_end_of_month
130
+ assert_equal Date.new(2012,1,31), Date.new(2012,1,1).end_of_month
131
+
132
+ assert_equal Date.new(2012,2,29), Date.new(2012,2,2).end_of_month
133
+
134
+ assert_equal Date.new(2012,3,31), Date.new(2012,3,1).end_of_month
135
+
136
+ assert_equal Date.new(2012,4,30), Date.new(2012,4,3).end_of_month
137
+
138
+ assert_equal Date.new(2012,5,31), Date.new(2012,5,1).end_of_month
139
+
140
+ assert_equal Date.new(2012,6,30), Date.new(2012,6,30).end_of_month
141
+
142
+ assert_equal Date.new(2012,7,31), Date.new(2012,7,1).end_of_month
143
+
144
+ assert_equal Date.new(2012,8,31), Date.new(2012,8,5).end_of_month
145
+
146
+ assert_equal Date.new(2012,9,30), Date.new(2012,9,2).end_of_month
147
+
148
+ assert_equal Date.new(2012,10,31), Date.new(2012,10,22).end_of_month
149
+
150
+ assert_equal Date.new(2012,11,30), Date.new(2012,11,10).end_of_month
151
+
152
+ assert_equal Date.new(2012,12,31), Date.new(2012,12,15).end_of_month
153
+ end
154
+
155
+ def test_beginning_of_month
156
+ assert_equal Date.new(2012,1,1), Date.new(2012,1,31).beginning_of_month
157
+
158
+ assert_equal Date.new(2012,2,1), Date.new(2012,2,29).beginning_of_month
159
+
160
+ assert_equal Date.new(2012,3,1), Date.new(2012,3,31).beginning_of_month
161
+
162
+ assert_equal Date.new(2012,4,1), Date.new(2012,4,30).beginning_of_month
163
+
164
+ assert_equal Date.new(2012,5,1), Date.new(2012,5,31).beginning_of_month
165
+
166
+ assert_equal Date.new(2012,6,1), Date.new(2012,6,30).beginning_of_month
167
+
168
+ assert_equal Date.new(2012,7,1), Date.new(2012,7,31).beginning_of_month
169
+
170
+ assert_equal Date.new(2012,8,1), Date.new(2012,8,31).beginning_of_month
171
+
172
+ assert_equal Date.new(2012,9,1), Date.new(2012,9,30).beginning_of_month
173
+
174
+ assert_equal Date.new(2012,10,1), Date.new(2012,10,31).beginning_of_month
175
+
176
+ assert_equal Date.new(2012,11,1), Date.new(2012,11,30).beginning_of_month
177
+
178
+ assert_equal Date.new(2012,12,1), Date.new(2012,12,31).beginning_of_month
179
+ end
180
+
181
+ def test_days_array
182
+ date = Date.new(2012,2,8)
183
+ days_array_for_february = [nil, nil, nil, 1, 2, 3, 4, 5,
184
+ 6, 7, 8, 9, 10, 11, 12, 13, 14,
185
+ 15, 16, 17, 18, 19, 20, 21, 22,
186
+ 23, 24, 25, 26, 27, 28, 29]
187
+ assert_kind_of Array,date.days_array
188
+ assert_equal days_array_for_february, date.days_array
189
+
190
+ date = Date.new(2012,7,1)
191
+ days_array_for_july = [1, 2, 3, 4, 5, 6, 7,
192
+ 8, 9, 10, 11, 12, 13,
193
+ 14, 15, 16, 17, 18, 19,
194
+ 20, 21, 22, 23, 24, 25,
195
+ 26, 27, 28, 29, 30, 31]
196
+ assert_kind_of Array,date.days_array
197
+ assert_equal days_array_for_july, date.days_array
198
+ end
199
+
200
+ def test_week_split
201
+ date = Date.new(2012,1,10)
202
+ split_for_january = [[1, 2, 3, 4, 5, 6, 7],
203
+ [8, 9, 10, 11, 12, 13, 14],
204
+ [15, 16, 17, 18, 19, 20, 21],
205
+ [22, 23, 24, 25, 26, 27, 28],
206
+ [29, 30, 31]]
207
+ assert_kind_of Array,date.week_split
208
+ assert_equal split_for_january, date.week_split
209
+
210
+ date = Date.new(2012,10,15)
211
+ split_for_october = [[nil, 1, 2, 3, 4, 5, 6],
212
+ [7, 8, 9, 10, 11, 12, 13],
213
+ [14, 15, 16, 17, 18, 19, 20],
214
+ [21, 22, 23, 24, 25, 26, 27],
215
+ [28, 29, 30, 31]]
216
+ assert_kind_of Array,date.week_split
217
+ assert_equal split_for_october, date.week_split
218
+ end
219
+
220
+ def test_first_week?
221
+ assert Date.new(2012,1,1).first_week?
222
+ assert !Date.new(2012,1,31).first_week?
223
+ end
224
+
225
+ def test_second_week?
226
+ assert Date.new(2012,10,9).second_week?
227
+ assert !Date.new(2012,10,20).second_week?
228
+ end
229
+
230
+ def test_last_week?
231
+ assert Date.new(2012,10,31).last_week?
232
+ assert !Date.new(2012,10,20).last_week?
233
+ end
234
+
235
+ def test_total_weeks
236
+ assert_equal 5, Date.new(2012,10,31).total_weeks
237
+ assert_equal 6, Date.new(2012,12,20).total_weeks
238
+ end
239
+
240
+ def test_week_of_month_in_eng
241
+ assert_equal 'First', Date.new(2012,12,1).week_of_month_in_eng
242
+ assert_equal 'Second', Date.new(2012,12,4).week_of_month_in_eng
243
+ assert_equal 'Third', Date.new(2012,12,9).week_of_month_in_eng
244
+ assert_equal 'Fourth', Date.new(2012,12,16).week_of_month_in_eng
245
+ assert_equal 'Fifth', Date.new(2012,12,24).week_of_month_in_eng
246
+ assert_equal 'Sixth', Date.new(2012,12,31).week_of_month_in_eng
247
+ end
248
+
249
+ def test_week_of_month_in_fr
250
+ assert_equal 'First', Date.new(2012,12,1).week_of_month_in_fr
251
+ assert_equal 'Second', Date.new(2012,12,4).week_of_month_in_fr
252
+ assert_equal 'Third', Date.new(2012,12,9).week_of_month_in_fr
253
+ assert_equal 'Quatrième', Date.new(2012,12,16).week_of_month_in_fr
254
+ assert_equal 'Cinquième', Date.new(2012,12,24).week_of_month_in_fr
255
+ assert_equal 'sixième', Date.new(2012,12,31).week_of_month_in_fr
256
+ end
257
+
258
+ def test_week_of_month_in_ger
259
+ assert_equal 'First', Date.new(2012,12,1).week_of_month_in_ger
260
+ assert_equal 'Second', Date.new(2012,12,4).week_of_month_in_ger
261
+ assert_equal 'Dritten', Date.new(2012,12,9).week_of_month_in_ger
262
+ assert_equal 'Vierte', Date.new(2012,12,16).week_of_month_in_ger
263
+ assert_equal 'Fünfte', Date.new(2012,12,24).week_of_month_in_ger
264
+ assert_equal 'Sechste', Date.new(2012,12,31).week_of_month_in_ger
265
+ end
266
+
267
+ def test_week_of_month_in_jap
268
+ assert_equal '最初', Date.new(2012,12,1).week_of_month_in_jap
269
+ assert_equal '秒', Date.new(2012,12,4).week_of_month_in_jap
270
+ assert_equal 'サード', Date.new(2012,12,9).week_of_month_in_jap
271
+ assert_equal '第4回', Date.new(2012,12,16).week_of_month_in_jap
272
+ assert_equal '第五', Date.new(2012,12,24).week_of_month_in_jap
273
+ assert_equal 'シックス', Date.new(2012,12,31).week_of_month_in_jap
274
+ end
275
+
276
+ def test_name_of_week_day
277
+ assert_equal "Saturday", Date.new(2012,12,1).name_of_week_day
278
+ assert_equal "Sunday", Date.new(2012,12,2).name_of_week_day
279
+ assert_equal "Monday", Date.new(2012,12,3).name_of_week_day
280
+ assert_equal "Tuesday", Date.new(2012,12,4).name_of_week_day
281
+ assert_equal "Wednesday", Date.new(2012,12,5).name_of_week_day
282
+ assert_equal "Thursday", Date.new(2012,12,6).name_of_week_day
283
+ assert_equal "Friday", Date.new(2012,12,7).name_of_week_day
284
+ end
285
+
286
+ def test_name_of_month
287
+ assert_equal "January", Date.new(2012,1,1).name_of_month
288
+ assert_equal "February", Date.new(2012,2,1).name_of_month
289
+ assert_equal "March", Date.new(2012,3,1).name_of_month
290
+ assert_equal "April", Date.new(2012,4,1).name_of_month
291
+ assert_equal "May", Date.new(2012,5,1).name_of_month
292
+ assert_equal "June", Date.new(2012,6,1).name_of_month
293
+ assert_equal "July", Date.new(2012,7,1).name_of_month
294
+ assert_equal "August", Date.new(2012,8,1).name_of_month
295
+ assert_equal "September", Date.new(2012,9,1).name_of_month
296
+ assert_equal "October", Date.new(2012,10,1).name_of_month
297
+ assert_equal "November", Date.new(2012,11,1).name_of_month
298
+ assert_equal "December", Date.new(2012,12,1).name_of_month
299
+ end
300
+
301
+ def test_week_end?
302
+ assert !Date.new(2012,10,1).week_end?
303
+ assert !Date.new(2012,10,31).week_end?
304
+ assert Date.new(2012,10,6).week_end?
305
+ assert Date.new(2012,10,7).week_end?
306
+ end
307
+
308
+ def test_working_day?
309
+ assert Date.new(2012,10,1).working_day?
310
+ assert Date.new(2012,10,31).working_day?
311
+ assert !Date.new(2012,10,6).working_day?
312
+ assert !Date.new(2012,10,7).working_day?
313
+ end
314
+
315
+ def test_all_sundays_in_month
316
+ assert_equal [2, 9, 16, 23, 30], Date.new(2012,12,1).all_sundays_in_month
317
+ assert_equal [7, 14, 21, 28], Date.new(2012,10,1).all_sundays_in_month
318
+ end
319
+
320
+ def test_all_mondays_in_month
321
+ assert_equal [3, 10, 17, 24, 31], Date.new(2012,12,1).all_mondays_in_month
322
+ assert_equal [1, 8, 15, 22, 29], Date.new(2012,10,1).all_mondays_in_month
323
+ end
324
+
325
+ def test_all_tuesdays_in_month
326
+ assert_equal [4, 11, 18, 25], Date.new(2012,12,1).all_tuesdays_in_month
327
+ assert_equal [2, 9, 16, 23, 30], Date.new(2012,10,1).all_tuesdays_in_month
328
+ end
329
+
330
+ def test_all_wednesdays_in_month
331
+ assert_equal [5, 12, 19, 26], Date.new(2012,12,1).all_wednesdays_in_month
332
+ assert_equal [3, 10, 17, 24, 31], Date.new(2012,10,1).all_wednesdays_in_month
333
+ end
334
+
335
+ def test_all_thursdays_in_month
336
+ assert_equal [6, 13, 20, 27], Date.new(2012,12,1).all_thursdays_in_month
337
+ assert_equal [4, 11, 18, 25], Date.new(2012,10,1).all_thursdays_in_month
338
+ end
339
+
340
+ def test_all_fridays_in_month
341
+ assert_equal [7, 14, 21, 28], Date.new(2012,12,1).all_fridays_in_month
342
+ assert_equal [5, 12, 19, 26], Date.new(2012,10,1).all_fridays_in_month
343
+ end
344
+
345
+ def test_all_saturdays_in_month
346
+ assert_equal [1, 8, 15, 22, 29], Date.new(2012,12,1).all_saturdays_in_month
347
+ assert_equal [6, 13, 20, 27], Date.new(2012,10,1).all_saturdays_in_month
348
+ end
349
+
350
+ end
@@ -0,0 +1,350 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'test/unit'
5
+ require_relative '../week_of_month'
6
+
7
+ class TestWeekOfMonthForTimeObject < Test::Unit::TestCase
8
+
9
+ def test_constants_present?
10
+ assert Time::WEEK_IN_ENG
11
+
12
+ assert Time::WEEK_IN_GER
13
+
14
+ assert Time::WEEK_IN_FR
15
+
16
+ assert Time::WEEK_IN_JAP
17
+
18
+ assert Time::MONTH_WITH_DAY
19
+
20
+ assert Time::MONTH_WITH_SEQUENCE
21
+ end
22
+
23
+ def test_constants_value
24
+ assert_equal({ 1 => 'First', 2 => 'Second',
25
+ 3 => 'Third', 4 => 'Fourth',
26
+ 5 => 'Fifth', 6 => 'Sixth' }, Time::WEEK_IN_ENG)
27
+
28
+ assert_equal({ 1 => 'First', 2 => 'Second',
29
+ 3 => 'Third', 4 => 'Quatrième',
30
+ 5 => 'Cinquième', 6 => 'sixième'}, Time::WEEK_IN_FR)
31
+
32
+ assert_equal({ 1 => 'First', 2 => 'Second',
33
+ 3 => 'Dritten', 4 => 'Vierte',
34
+ 5 => 'Fünfte', 6 => 'Sechste'}, Time::WEEK_IN_GER)
35
+
36
+ assert_equal({ 1=>'最初', 2 =>'秒',
37
+ 3 =>'サード', 4=> '第4回',
38
+ 5 =>'第五',6=> 'シックス' } , Time::WEEK_IN_JAP)
39
+
40
+ assert_equal({ :january => 1, :february => 2, :march => 3,
41
+ :april => 4, :may => 5, :june => 6, :july => 7,
42
+ :august => 8, :september => 9, :october => 10,
43
+ :november => 11, :december => 12 }, Time::MONTH_WITH_SEQUENCE)
44
+
45
+ assert_equal({ :january => 31, :february => 28, :march => 31,
46
+ :april => 30, :may => 31, :june => 30, :july => 31,
47
+ :august => 31, :september => 30, :october => 31,
48
+ :november => 30, :december => 31 }, Time::MONTH_WITH_DAY)
49
+ end
50
+
51
+ def test_month?
52
+ assert Time.new(2012,1,1).january?
53
+
54
+ assert Time.new(2012,2,1).february?
55
+
56
+ assert Time.new(2012,3,1).march?
57
+
58
+ assert Time.new(2012,4,1).april?
59
+
60
+ assert Time.new(2012,5,1).may?
61
+
62
+ assert Time.new(2012,6,1).june?
63
+
64
+ assert Time.new(2012,7,1).july?
65
+
66
+ assert Time.new(2012,8,1).august?
67
+
68
+ assert Time.new(2012,9,1).september?
69
+
70
+ assert Time.new(2012,10,1).october?
71
+
72
+ assert Time.new(2012,11,1).november?
73
+
74
+ assert Time.new(2012,12,1).december?
75
+ end
76
+
77
+ def test_week_of_month
78
+ assert_equal 5, Time.new(2012,1,31).week_of_month
79
+
80
+ assert_equal 5, Time.new(2012,2,29).week_of_month
81
+
82
+ assert_equal 5, Time.new(2012,3,31).week_of_month
83
+
84
+ assert_equal 5, Time.new(2012,4,30).week_of_month
85
+
86
+ assert_equal 5, Time.new(2012,5,31).week_of_month
87
+
88
+ assert_equal 5, Time.new(2012,6,30).week_of_month
89
+
90
+ assert_equal 5, Time.new(2012,7,31).week_of_month
91
+
92
+ assert_equal 5, Time.new(2012,8,31).week_of_month
93
+
94
+ assert_equal 6, Time.new(2012,9,30).week_of_month
95
+
96
+ assert_equal 5, Time.new(2012,10,31).week_of_month
97
+
98
+ assert_equal 5, Time.new(2012,11,30).week_of_month
99
+
100
+ assert_equal 6, Time.new(2012,12,31).week_of_month
101
+ end
102
+
103
+ def test_last_day_of_month
104
+ assert_equal 31, Time.new(2012,1,31).last_day_of_month
105
+
106
+ assert_equal 29, Time.new(2012,2,29).last_day_of_month
107
+
108
+ assert_equal 31, Time.new(2012,3,31).last_day_of_month
109
+
110
+ assert_equal 30, Time.new(2012,4,30).last_day_of_month
111
+
112
+ assert_equal 31, Time.new(2012,5,31).last_day_of_month
113
+
114
+ assert_equal 30, Time.new(2012,6,30).last_day_of_month
115
+
116
+ assert_equal 31, Time.new(2012,7,31).last_day_of_month
117
+
118
+ assert_equal 31, Time.new(2012,8,31).last_day_of_month
119
+
120
+ assert_equal 30, Time.new(2012,9,30).last_day_of_month
121
+
122
+ assert_equal 31, Time.new(2012,10,31).last_day_of_month
123
+
124
+ assert_equal 30, Time.new(2012,11,30).last_day_of_month
125
+
126
+ assert_equal 31, Time.new(2012,12,31).last_day_of_month
127
+ end
128
+
129
+ def test_end_of_month
130
+ assert_equal Time.new(2012,1,31), Time.new(2012,1,1).end_of_month
131
+
132
+ assert_equal Time.new(2012,2,29), Time.new(2012,2,2).end_of_month
133
+
134
+ assert_equal Time.new(2012,3,31), Time.new(2012,3,1).end_of_month
135
+
136
+ assert_equal Time.new(2012,4,30), Time.new(2012,4,3).end_of_month
137
+
138
+ assert_equal Time.new(2012,5,31), Time.new(2012,5,1).end_of_month
139
+
140
+ assert_equal Time.new(2012,6,30), Time.new(2012,6,30).end_of_month
141
+
142
+ assert_equal Time.new(2012,7,31), Time.new(2012,7,1).end_of_month
143
+
144
+ assert_equal Time.new(2012,8,31), Time.new(2012,8,5).end_of_month
145
+
146
+ assert_equal Time.new(2012,9,30), Time.new(2012,9,2).end_of_month
147
+
148
+ assert_equal Time.new(2012,10,31), Time.new(2012,10,22).end_of_month
149
+
150
+ assert_equal Time.new(2012,11,30), Time.new(2012,11,10).end_of_month
151
+
152
+ assert_equal Time.new(2012,12,31), Time.new(2012,12,15).end_of_month
153
+ end
154
+
155
+ def test_beginning_of_month
156
+ assert_equal Time.new(2012,1,1), Time.new(2012,1,31).beginning_of_month
157
+
158
+ assert_equal Time.new(2012,2,1), Time.new(2012,2,29).beginning_of_month
159
+
160
+ assert_equal Time.new(2012,3,1), Time.new(2012,3,31).beginning_of_month
161
+
162
+ assert_equal Time.new(2012,4,1), Time.new(2012,4,30).beginning_of_month
163
+
164
+ assert_equal Time.new(2012,5,1), Time.new(2012,5,31).beginning_of_month
165
+
166
+ assert_equal Time.new(2012,6,1), Time.new(2012,6,30).beginning_of_month
167
+
168
+ assert_equal Time.new(2012,7,1), Time.new(2012,7,31).beginning_of_month
169
+
170
+ assert_equal Time.new(2012,8,1), Time.new(2012,8,31).beginning_of_month
171
+
172
+ assert_equal Time.new(2012,9,1), Time.new(2012,9,30).beginning_of_month
173
+
174
+ assert_equal Time.new(2012,10,1), Time.new(2012,10,31).beginning_of_month
175
+
176
+ assert_equal Time.new(2012,11,1), Time.new(2012,11,30).beginning_of_month
177
+
178
+ assert_equal Time.new(2012,12,1), Time.new(2012,12,31).beginning_of_month
179
+ end
180
+
181
+ def test_days_array
182
+ time = Time.new(2012,2,8)
183
+ days_array_for_february = [nil, nil, nil, 1, 2, 3, 4, 5,
184
+ 6, 7, 8, 9, 10, 11, 12, 13, 14,
185
+ 15, 16, 17, 18, 19, 20, 21, 22,
186
+ 23, 24, 25, 26, 27, 28, 29]
187
+ assert_kind_of Array,time.days_array
188
+ assert_equal days_array_for_february, time.days_array
189
+
190
+ time = Time.new(2012,7,1)
191
+ days_array_for_july = [1, 2, 3, 4, 5, 6, 7,
192
+ 8, 9, 10, 11, 12, 13,
193
+ 14, 15, 16, 17, 18, 19,
194
+ 20, 21, 22, 23, 24, 25,
195
+ 26, 27, 28, 29, 30, 31]
196
+ assert_kind_of Array,time.days_array
197
+ assert_equal days_array_for_july, time.days_array
198
+ end
199
+
200
+ def test_week_split
201
+ time = Time.new(2012,1,10)
202
+ split_for_january = [[1, 2, 3, 4, 5, 6, 7],
203
+ [8, 9, 10, 11, 12, 13, 14],
204
+ [15, 16, 17, 18, 19, 20, 21],
205
+ [22, 23, 24, 25, 26, 27, 28],
206
+ [29, 30, 31]]
207
+ assert_kind_of Array, time.week_split
208
+ assert_equal split_for_january, time.week_split
209
+
210
+ time = Time.new(2012,10,15)
211
+ split_for_october = [[nil, 1, 2, 3, 4, 5, 6],
212
+ [7, 8, 9, 10, 11, 12, 13],
213
+ [14, 15, 16, 17, 18, 19, 20],
214
+ [21, 22, 23, 24, 25, 26, 27],
215
+ [28, 29, 30, 31]]
216
+ assert_kind_of Array, time.week_split
217
+ assert_equal split_for_october, time.week_split
218
+ end
219
+
220
+ def test_first_week?
221
+ assert Time.new(2012,1,1).first_week?
222
+ assert !Time.new(2012,1,31).first_week?
223
+ end
224
+
225
+ def test_second_week?
226
+ assert Time.new(2012,10,9).second_week?
227
+ assert !Time.new(2012,10,20).second_week?
228
+ end
229
+
230
+ def test_last_week?
231
+ assert Time.new(2012,10,31).last_week?
232
+ assert !Time.new(2012,10,20).last_week?
233
+ end
234
+
235
+ def test_total_weeks
236
+ assert_equal 5, Time.new(2012,10,31).total_weeks
237
+ assert_equal 6, Time.new(2012,12,20).total_weeks
238
+ end
239
+
240
+ def test_week_of_month_in_eng
241
+ assert_equal 'First', Time.new(2012,12,1).week_of_month_in_eng
242
+ assert_equal 'Second', Time.new(2012,12,4).week_of_month_in_eng
243
+ assert_equal 'Third', Time.new(2012,12,9).week_of_month_in_eng
244
+ assert_equal 'Fourth', Time.new(2012,12,16).week_of_month_in_eng
245
+ assert_equal 'Fifth', Time.new(2012,12,24).week_of_month_in_eng
246
+ assert_equal 'Sixth', Time.new(2012,12,31).week_of_month_in_eng
247
+ end
248
+
249
+ def test_week_of_month_in_fr
250
+ assert_equal 'First', Time.new(2012,12,1).week_of_month_in_fr
251
+ assert_equal 'Second', Time.new(2012,12,4).week_of_month_in_fr
252
+ assert_equal 'Third', Time.new(2012,12,9).week_of_month_in_fr
253
+ assert_equal 'Quatrième', Time.new(2012,12,16).week_of_month_in_fr
254
+ assert_equal 'Cinquième', Time.new(2012,12,24).week_of_month_in_fr
255
+ assert_equal 'sixième', Time.new(2012,12,31).week_of_month_in_fr
256
+ end
257
+
258
+ def test_week_of_month_in_ger
259
+ assert_equal 'First', Time.new(2012,12,1).week_of_month_in_ger
260
+ assert_equal 'Second', Time.new(2012,12,4).week_of_month_in_ger
261
+ assert_equal 'Dritten', Time.new(2012,12,9).week_of_month_in_ger
262
+ assert_equal 'Vierte', Time.new(2012,12,16).week_of_month_in_ger
263
+ assert_equal 'Fünfte', Time.new(2012,12,24).week_of_month_in_ger
264
+ assert_equal 'Sechste', Time.new(2012,12,31).week_of_month_in_ger
265
+ end
266
+
267
+ def test_week_of_month_in_jap
268
+ assert_equal '最初', Time.new(2012,12,1).week_of_month_in_jap
269
+ assert_equal '秒', Time.new(2012,12,4).week_of_month_in_jap
270
+ assert_equal 'サード', Time.new(2012,12,9).week_of_month_in_jap
271
+ assert_equal '第4回', Time.new(2012,12,16).week_of_month_in_jap
272
+ assert_equal '第五', Time.new(2012,12,24).week_of_month_in_jap
273
+ assert_equal 'シックス', Time.new(2012,12,31).week_of_month_in_jap
274
+ end
275
+
276
+ def test_name_of_week_day
277
+ assert_equal "Saturday", Time.new(2012,12,1).name_of_week_day
278
+ assert_equal "Sunday", Time.new(2012,12,2).name_of_week_day
279
+ assert_equal "Monday", Time.new(2012,12,3).name_of_week_day
280
+ assert_equal "Tuesday", Time.new(2012,12,4).name_of_week_day
281
+ assert_equal "Wednesday", Time.new(2012,12,5).name_of_week_day
282
+ assert_equal "Thursday", Time.new(2012,12,6).name_of_week_day
283
+ assert_equal "Friday", Time.new(2012,12,7).name_of_week_day
284
+ end
285
+
286
+ def test_name_of_month
287
+ assert_equal "January", Time.new(2012,1,1).name_of_month
288
+ assert_equal "February", Time.new(2012,2,1).name_of_month
289
+ assert_equal "March", Time.new(2012,3,1).name_of_month
290
+ assert_equal "April", Time.new(2012,4,1).name_of_month
291
+ assert_equal "May", Time.new(2012,5,1).name_of_month
292
+ assert_equal "June", Time.new(2012,6,1).name_of_month
293
+ assert_equal "July", Time.new(2012,7,1).name_of_month
294
+ assert_equal "August", Time.new(2012,8,1).name_of_month
295
+ assert_equal "September", Time.new(2012,9,1).name_of_month
296
+ assert_equal "October", Time.new(2012,10,1).name_of_month
297
+ assert_equal "November", Time.new(2012,11,1).name_of_month
298
+ assert_equal "December", Time.new(2012,12,1).name_of_month
299
+ end
300
+
301
+ def test_week_end?
302
+ assert !Time.new(2012,10,1).week_end?
303
+ assert !Time.new(2012,10,31).week_end?
304
+ assert Time.new(2012,10,6).week_end?
305
+ assert Time.new(2012,10,7).week_end?
306
+ end
307
+
308
+ def test_working_day?
309
+ assert Time.new(2012,10,1).working_day?
310
+ assert Time.new(2012,10,31).working_day?
311
+ assert !Time.new(2012,10,6).working_day?
312
+ assert !Time.new(2012,10,7).working_day?
313
+ end
314
+
315
+ def test_all_sundays_in_month
316
+ assert_equal [2, 9, 16, 23, 30], Time.new(2012,12,1).all_sundays_in_month
317
+ assert_equal [7, 14, 21, 28], Time.new(2012,10,1).all_sundays_in_month
318
+ end
319
+
320
+ def test_all_mondays_in_month
321
+ assert_equal [3, 10, 17, 24, 31], Time.new(2012,12,1).all_mondays_in_month
322
+ assert_equal [1, 8, 15, 22, 29], Time.new(2012,10,1).all_mondays_in_month
323
+ end
324
+
325
+ def test_all_tuesdays_in_month
326
+ assert_equal [4, 11, 18, 25], Time.new(2012,12,1).all_tuesdays_in_month
327
+ assert_equal [2, 9, 16, 23, 30], Time.new(2012,10,1).all_tuesdays_in_month
328
+ end
329
+
330
+ def test_all_wednesdays_in_month
331
+ assert_equal [5, 12, 19, 26], Time.new(2012,12,1).all_wednesdays_in_month
332
+ assert_equal [3, 10, 17, 24, 31], Time.new(2012,10,1).all_wednesdays_in_month
333
+ end
334
+
335
+ def test_all_thursdays_in_month
336
+ assert_equal [6, 13, 20, 27], Time.new(2012,12,1).all_thursdays_in_month
337
+ assert_equal [4, 11, 18, 25], Time.new(2012,10,1).all_thursdays_in_month
338
+ end
339
+
340
+ def test_all_fridays_in_month
341
+ assert_equal [7, 14, 21, 28], Time.new(2012,12,1).all_fridays_in_month
342
+ assert_equal [5, 12, 19, 26], Time.new(2012,10,1).all_fridays_in_month
343
+ end
344
+
345
+ def test_all_saturdays_in_month
346
+ assert_equal [1, 8, 15, 22, 29], Time.new(2012,12,1).all_saturdays_in_month
347
+ assert_equal [6, 13, 20, 27], Time.new(2012,10,1).all_saturdays_in_month
348
+ end
349
+
350
+ end
@@ -0,0 +1,120 @@
1
+ #!/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module WeekHelper
5
+
6
+ WEEK_IN_ENG = { 1 => 'First', 2 => 'Second',
7
+ 3 => 'Third', 4 => 'Fourth',
8
+ 5 => 'Fifth', 6 => 'Sixth' }
9
+
10
+ WEEK_IN_FR = { 1 => 'First', 2 => 'Second',
11
+ 3 => 'Third', 4 => 'Quatrième',
12
+ 5 => 'Cinquième', 6 => 'sixième'}
13
+
14
+ WEEK_IN_GER = { 1 => 'First', 2 => 'Second',
15
+ 3 => 'Dritten', 4 => 'Vierte',
16
+ 5 => 'Fünfte', 6 => 'Sechste'}
17
+
18
+ WEEK_IN_JAP = { 1=>'最初', 2 =>'秒',
19
+ 3 =>'サード', 4=> '第4回',
20
+ 5 =>'第五',6=> 'シックス' }
21
+
22
+ MONTH_WITH_DAY = { :january => 31, :february => 28, :march => 31,
23
+ :april => 30, :may => 31, :june => 30, :july => 31,
24
+ :august => 31, :september => 30, :october => 31,
25
+ :november => 30, :december => 31 }
26
+
27
+ MONTH_WITH_SEQUENCE = { :january => 1, :february => 2, :march => 3,
28
+ :april => 4, :may => 5, :june => 6, :july => 7,
29
+ :august => 8, :september => 9, :october => 10,
30
+ :november => 11, :december => 12 }
31
+
32
+
33
+ MONTH_WITH_DAY.keys.each do |month_name|
34
+ define_method((month_name.to_s + '?').to_sym) do
35
+ MONTH_WITH_SEQUENCE[month_name] == month
36
+ end
37
+ end
38
+
39
+ def last_day_of_month
40
+ if leap? && february?
41
+ 29
42
+ else
43
+ MONTH_WITH_DAY[MONTH_WITH_SEQUENCE.key(month)]
44
+ end
45
+ end
46
+
47
+ def end_of_month
48
+ self.class.new(year,month,last_day_of_month)
49
+ end
50
+
51
+ def beginning_of_month
52
+ self.class.new(year,month,1)
53
+ end
54
+
55
+ def days_array
56
+ day = self.beginning_of_month.wday
57
+ array = []
58
+ array[day] = 1
59
+ (2..self.end_of_month.mday).each {|i| array << i }
60
+ array
61
+ end
62
+
63
+ def week_split
64
+ days_array.each_slice(7).to_a
65
+ end
66
+
67
+ def week_of_month
68
+ week_split.each_with_index do |o,i|
69
+ return (i + 1) if o.include?(self.day)
70
+ end
71
+ end
72
+
73
+ def first_week?
74
+ week_split[0].include?((self.day))
75
+ end
76
+
77
+ def second_week?
78
+ week_split[1].include?((self.day))
79
+ end
80
+
81
+ def last_week?
82
+ week_split.last.include?((self.day))
83
+ end
84
+
85
+ def total_weeks
86
+ week_split.size
87
+ end
88
+
89
+ ['eng', 'fr', 'ger', 'jap'].each do |lang|
90
+ method_name = "week_of_month_in_#{lang}"
91
+ define_method(method_name) do
92
+ eval "WEEK_IN_#{lang.upcase}[week_of_month]"
93
+ end
94
+ end
95
+
96
+ def name_of_week_day
97
+ self.class.new(year,month,day).strftime('%A')
98
+ end
99
+
100
+ def name_of_month
101
+ self.class.new(year,month,day).strftime('%B')
102
+ end
103
+
104
+ def week_end?
105
+ saturday? || sunday?
106
+ end
107
+
108
+ def working_day?
109
+ !week_end?
110
+ end
111
+
112
+ Date::DAYNAMES.each_with_index do |day_name, i|
113
+ method_name = "all_#{day_name.downcase}s_in_month".to_sym
114
+ define_method(method_name) do
115
+ week_split.map{|d| d[i] }.compact
116
+ end
117
+ end
118
+
119
+ end
120
+
data/lib/week_of_month.rb CHANGED
@@ -1,173 +1,15 @@
1
- #!/bin/env ruby
2
- # encoding: utf-8
3
-
4
1
  require 'date'
2
+ require 'time'
3
+ require 'week_helper'
5
4
 
6
5
  class Date
6
+ include WeekHelper
7
+ end
7
8
 
8
- WEEK_IN_ENG = { 1 => 'First', 2 => 'Second',
9
- 3 => 'Third', 4 => 'Fourth',
10
- 5 => 'Fifth', 6 => 'Sixth' }
11
-
12
- WEEK_IN_FR = { 1 => 'First', 2 => 'Second',
13
- 3 => 'Third', 4 => 'Quatrième',
14
- 5 => 'Cinquième', 6 => 'sixième'}
15
-
16
- WEEK_IN_GER = { 1 => 'First', 2 => 'Second',
17
- 3 => 'Dritten', 4 => 'Vierte',
18
- 5 => 'Fünfte', 6 => 'Sechste'}
19
-
20
- WEEK_IN_JAP = { 1=>'最初', 2 =>'秒',
21
- 3 =>'サード', 4=> '第4回',
22
- 5 =>'第五',6=> 'シックス' }
23
-
24
-
25
- GENERAL_YEAR = { "January" => 31, "February" => 28, "March" => 31,
26
- "April" => 30, "May" => 31, "June" => 30, "July" => 31,
27
- "August" => 31, "September" => 30, "October" => 31,
28
- "November" => 30, "December" => 31 }
29
-
30
- LEAP_YEAR = { "January" => 31, "February" => 28, "March" => 31,
31
- "April" => 30, "May" => 31, "June" => 30, "July" => 31,
32
- "August" => 31, "September" => 30, "October" => 31,
33
- "November" => 30, "December" => 31 }
34
-
35
- def last_day_of_month
36
- if january?
37
- 31
38
- elsif february?
39
- if leap?
40
- 29
41
- else
42
- 28
43
- end
44
- elsif march?
45
- 31
46
- elsif april?
47
- 30
48
- elsif may?
49
- 31
50
- elsif june?
51
- 30
52
- elsif july?
53
- 31
54
- elsif august?
55
- 31
56
- elsif september?
57
- 30
58
- elsif october?
59
- 31
60
- elsif november?
61
- 30
62
- elsif december?
63
- 31
64
- end
65
- end
66
-
67
- def january?
68
- month == 1
69
- end
70
-
71
- def february?
72
- month == 2
73
- end
74
-
75
- def march?
76
- month == 3
77
- end
78
-
79
- def april?
80
- month == 4
81
- end
82
-
83
- def may?
84
- month == 5
85
- end
86
-
87
- def june?
88
- month == 6
89
- end
90
-
91
- def july?
92
- month == 7
93
- end
94
-
95
- def august?
96
- month == 8
97
- end
98
-
99
- def september?
100
- month == 9
101
- end
102
-
103
- def october?
104
- month == 10
105
- end
106
-
107
- def november?
108
- month == 11
109
- end
110
-
111
- def december?
112
- month == 12
113
- end
114
-
115
- def end_of_month
116
- Date.new(year,month,last_day_of_month)
117
- end
118
-
119
- def beginning_of_month
120
- Date.new(year,month,1)
121
- end
122
-
123
- def days_array
124
- day = self.beginning_of_month.wday
125
- array = []
126
- array[day] = 1
127
- (2..self.end_of_month.mday).each {|i| array << i }
128
- array
129
- end
130
-
131
- def week_split
132
- days_array.each_slice(7).to_a
133
- end
9
+ class Time
10
+ include WeekHelper
134
11
 
135
- def week_of_month
136
- week_split.each_with_index do |o,i|
137
- return (i + 1) if o.include?(self.day)
138
- end
139
- end
140
-
141
- def first_week?
142
- week_split[0].include?((self.day))
143
- end
144
-
145
- def second_week?
146
- week_split[1].include?((self.day))
12
+ def leap?
13
+ self.to_date.leap?
147
14
  end
148
-
149
- def last_week?
150
- week_split.last.include?((self.day))
151
- end
152
-
153
- def total_weeks
154
- week_split.size
155
- end
156
-
157
- def week_of_month_in_eng
158
- WEEK_IN_ENG[week_of_month]
159
- end
160
-
161
- def week_of_month_in_fr
162
- WEEK_IN_FR[week_of_month]
163
- end
164
-
165
- def week_of_month_in_ger
166
- WEEK_IN_GER[week_of_month]
167
- end
168
-
169
- def week_of_month_in_jap
170
- WEEK_IN_JAP[week_of_month]
171
- end
172
-
173
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: week_of_month
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,16 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-22 00:00:00.000000000 Z
12
+ date: 2012-10-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: Its gives you week_of_month method on date object, that returns week
15
- of the month.
14
+ description: Its gives you week_of_month method on date and time objects, that returns
15
+ week of the month.
16
16
  email: sachin@railsdeveloper.in
17
17
  executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - lib/week_of_month.rb
22
+ - lib/week_helper.rb
23
+ - lib/test/test_week_of_month_for_date_object.rb
24
+ - lib/test/test_week_of_month_for_time_object.rb
22
25
  homepage: http://rubygems.org/gems/week_of_month
23
26
  licenses: []
24
27
  post_install_message: