hebrew_date 1.0.2 → 1.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 +4 -0
- data/doc/HebrewDate.html +860 -356
- data/doc/HebrewDateSupport.html +2 -2
- data/doc/_index.html +18 -3
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +96 -7
- data/doc/index.html +96 -7
- data/doc/method_list.html +57 -21
- data/doc/top-level-namespace.html +1 -1
- data/hebrew_date.gemspec +2 -2
- data/lib/hebrew_date.rb +63 -26
- data/lib/support/holidays.rb +136 -1
- data/lib/support/parshiot.rb +1 -1
- data/spec/hebrew_date_spec.rb +45 -0
- metadata +2 -2
@@ -105,7 +105,7 @@
|
|
105
105
|
</div>
|
106
106
|
|
107
107
|
<div id="footer">
|
108
|
-
Generated on
|
108
|
+
Generated on Sun Jan 26 12:16:13 2014 by
|
109
109
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
110
110
|
0.8.7.3 (ruby-2.0.0).
|
111
111
|
</div>
|
data/hebrew_date.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'hebrew_date'
|
3
3
|
s.require_paths = %w(. lib)
|
4
|
-
s.version = '1.0.
|
5
|
-
s.date = '2014-01-
|
4
|
+
s.version = '1.0.3'
|
5
|
+
s.date = '2014-01-26'
|
6
6
|
s.summary = 'Hebrew/Jewish dates, times, and holidays.'
|
7
7
|
s.description = <<-EOF
|
8
8
|
hebrew_date is a library designed to provide information about the Jewish
|
data/lib/hebrew_date.rb
CHANGED
@@ -12,8 +12,9 @@ require_relative 'support/parshiot.rb'
|
|
12
12
|
# simultaneously. Note that you may call any Date methods on this class
|
13
13
|
# and it should respond accordingly.
|
14
14
|
class HebrewDate < Delegator
|
15
|
-
include HebrewDateSupport::
|
16
|
-
include HebrewDateSupport::
|
15
|
+
include HebrewDateSupport::ParshaMethods
|
16
|
+
include HebrewDateSupport::HolidayMethods
|
17
|
+
# @!parse extend HebrewDateSupport::HolidayMethods::ClassMethods
|
17
18
|
|
18
19
|
# @private
|
19
20
|
HEBREW_EPOCH = -1373429
|
@@ -78,7 +79,23 @@ class HebrewDate < Delegator
|
|
78
79
|
|
79
80
|
# @private
|
80
81
|
def inspect
|
81
|
-
strftime('*Y
|
82
|
+
strftime('*Y-*-m-*-d (%Y-%-m-%-d)')
|
83
|
+
end
|
84
|
+
|
85
|
+
# Add the dates specified (in days).
|
86
|
+
# @param [Fixnum] other_date the days to add.
|
87
|
+
# @return [HebrewDate]
|
88
|
+
def +(other_date)
|
89
|
+
date = self.to_date + other_date
|
90
|
+
HebrewDate.new(date.year, date.month, date.day)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Subtract the dates specified (in days).
|
94
|
+
# @param [Fixnum] other_date the days to subtract.
|
95
|
+
# @return [HebrewDate]
|
96
|
+
def -(other_date)
|
97
|
+
date = self.to_date - other_date
|
98
|
+
HebrewDate.new(date.year, date.month, date.day)
|
82
99
|
end
|
83
100
|
|
84
101
|
# @private
|
@@ -167,7 +184,7 @@ class HebrewDate < Delegator
|
|
167
184
|
end
|
168
185
|
|
169
186
|
# Move forward one day.
|
170
|
-
# @return [
|
187
|
+
# @return [HebrewDate] the same HebrewDate object again, for chaining.
|
171
188
|
def forward
|
172
189
|
# Change Gregorian date
|
173
190
|
if @date == last_day_of_month
|
@@ -207,10 +224,12 @@ class HebrewDate < Delegator
|
|
207
224
|
|
208
225
|
# increment the absolute date
|
209
226
|
@abs_date += 1
|
227
|
+
|
228
|
+
self
|
210
229
|
end
|
211
230
|
|
212
231
|
# Move back one day.
|
213
|
-
# @return [
|
232
|
+
# @return [HebrewDate] the same HebrewDate object again, for chaining.
|
214
233
|
def back
|
215
234
|
# Change Gregorian date
|
216
235
|
if @date == 1
|
@@ -244,6 +263,8 @@ class HebrewDate < Delegator
|
|
244
263
|
|
245
264
|
# Change the absolute date
|
246
265
|
@abs_date -= 1
|
266
|
+
|
267
|
+
self
|
247
268
|
end
|
248
269
|
|
249
270
|
# Get the name of the current Hebrew month.
|
@@ -278,18 +299,19 @@ class HebrewDate < Delegator
|
|
278
299
|
# @param format [String]
|
279
300
|
# @return [String]
|
280
301
|
def strftime(format)
|
281
|
-
format.gsub
|
282
|
-
.gsub
|
283
|
-
.gsub
|
284
|
-
.gsub
|
285
|
-
.gsub
|
286
|
-
.gsub
|
287
|
-
.gsub
|
288
|
-
.gsub
|
289
|
-
.gsub
|
290
|
-
.gsub
|
291
|
-
.gsub
|
292
|
-
.gsub
|
302
|
+
format = format.gsub('*Y', @hebrew_year.to_s)
|
303
|
+
.gsub('*m', @hebrew_month.to_s.rjust(2, '0'))
|
304
|
+
.gsub('*_m', @hebrew_month.to_s.rjust(2, ' '))
|
305
|
+
.gsub('*-m', @hebrew_month.to_s)
|
306
|
+
.gsub('*B', hebrew_month_to_s)
|
307
|
+
.gsub('*^B', hebrew_month_to_s.upcase)
|
308
|
+
.gsub('*b', hebrew_month_to_s[0, 3])
|
309
|
+
.gsub('*^b', hebrew_month_to_s[0, 3].upcase)
|
310
|
+
.gsub('*h', hebrew_month_to_s[0, 3])
|
311
|
+
.gsub('*d', @hebrew_date.to_s.rjust(2, '0'))
|
312
|
+
.gsub('*-d', @hebrew_date.to_s)
|
313
|
+
.gsub('*e', @hebrew_date.to_s.rjust(2, ' '))
|
314
|
+
super(format)
|
293
315
|
end
|
294
316
|
|
295
317
|
# Get the day of the week.
|
@@ -318,18 +340,33 @@ class HebrewDate < Delegator
|
|
318
340
|
end
|
319
341
|
end
|
320
342
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
year
|
326
|
-
|
343
|
+
class << self
|
344
|
+
# Is this a Hebrew leap year?
|
345
|
+
# @param year [Integer] the Hebrew year.
|
346
|
+
# @return [Boolean]
|
347
|
+
def hebrew_leap_year?(year)
|
348
|
+
(((7 * year) + 1).remainder(19)) < 7
|
349
|
+
end
|
350
|
+
|
351
|
+
# The last month in the Hebrew year (12 or 13).
|
352
|
+
# @param year [Integer] the Hebrew year.
|
353
|
+
# @return [Integer]
|
354
|
+
def last_month_of_hebrew_year(year)
|
355
|
+
hebrew_leap_year?(year) ? 13 : 12
|
356
|
+
end
|
357
|
+
|
327
358
|
end
|
328
359
|
|
329
360
|
# The last month in this Hebrew year (12 or 13).
|
330
361
|
# @return [Integer]
|
331
362
|
def last_month_of_hebrew_year
|
332
|
-
|
363
|
+
self.class.last_month_of_hebrew_year(@hebrew_year)
|
364
|
+
end
|
365
|
+
|
366
|
+
# Is this a Hebrew leap year?
|
367
|
+
# @return [Boolean]
|
368
|
+
def hebrew_leap_year?
|
369
|
+
self.class.hebrew_leap_year?(@hebrew_year)
|
333
370
|
end
|
334
371
|
|
335
372
|
# Last day of the current Hebrew month.
|
@@ -407,10 +444,10 @@ class HebrewDate < Delegator
|
|
407
444
|
if (conjunction_parts >= 19440) || # If new moon is at or after midday,
|
408
445
|
(((conjunction_day.remainder(7)) == 2) && # ...or is on a Tuesday...
|
409
446
|
(conjunction_parts >= 9924) && # at 9 hours, 204 parts or later...
|
410
|
-
!hebrew_leap_year?(year)) || # ...of a common year,
|
447
|
+
!HebrewDate.hebrew_leap_year?(year)) || # ...of a common year,
|
411
448
|
(((conjunction_day.remainder(7)) == 1) && # ...or is on a Monday at...
|
412
449
|
(conjunction_parts >= 16789) && # 15 hours, 589 parts or later...
|
413
|
-
(hebrew_leap_year?(year - 1))) # at the end of a leap year
|
450
|
+
(HebrewDate.hebrew_leap_year?(year - 1))) # at the end of a leap year
|
414
451
|
# Then postpone Rosh HaShanah one day
|
415
452
|
alternative_day += 1
|
416
453
|
end
|
data/lib/support/holidays.rb
CHANGED
@@ -1,5 +1,136 @@
|
|
1
1
|
module HebrewDateSupport
|
2
|
-
module
|
2
|
+
module HolidayMethods
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
# A list of holidays which can be passed into the from_holiday method.
|
6
|
+
HOLIDAYS = [
|
7
|
+
:EREV_PESACH,
|
8
|
+
:PESACH,
|
9
|
+
:PESACH_2,
|
10
|
+
:PESACH_SHENI,
|
11
|
+
:YOM_HAATZMAUT,
|
12
|
+
:YOM_HAZIKARON,
|
13
|
+
:YOM_YERUSHALAYIM,
|
14
|
+
:LAG_BAOMER,
|
15
|
+
:EREV_SHAVUOT,
|
16
|
+
:SHAVUOT,
|
17
|
+
:TZOM_TAMMUZ,
|
18
|
+
:TISHA_BAV,
|
19
|
+
:TU_BAV,
|
20
|
+
:EREV_ROSH_HASHANA,
|
21
|
+
:ROSH_HASHANA,
|
22
|
+
:TZOM_GEDALIA,
|
23
|
+
:EREV_YOM_KIPPUR,
|
24
|
+
:YOM_KIPPUR,
|
25
|
+
:EREV_SUKKOT,
|
26
|
+
:SUKKOT,
|
27
|
+
:SHMINI_ATZERET,
|
28
|
+
:EREV_CHANUKAH,
|
29
|
+
:CHANUKAH,
|
30
|
+
:TZOM_TEVET,
|
31
|
+
:TU_BISHVAT,
|
32
|
+
:PURIM_KATAN,
|
33
|
+
:TAANIT_ESTHER,
|
34
|
+
:PURIM,
|
35
|
+
:SHUSHAN_PURIM
|
36
|
+
]
|
37
|
+
|
38
|
+
# Given a holiday name, return a HebrewDate representing that holiday.
|
39
|
+
# @param holiday [Symbol] the name of the holiday. Possible values are
|
40
|
+
# in the HOLIDAYS array.
|
41
|
+
# @param year [Integer] if given, the Hebrew year to search. Defaults
|
42
|
+
# to the current year.
|
43
|
+
def from_holiday(holiday, year=nil)
|
44
|
+
year ||= HebrewDate.new.hebrew_year
|
45
|
+
case holiday
|
46
|
+
when :EREV_PESACH
|
47
|
+
HebrewDate.new_from_hebrew(year, 1, 14)
|
48
|
+
when :PESACH
|
49
|
+
HebrewDate.new_from_hebrew(year, 1, 15)
|
50
|
+
when :PESACH_2
|
51
|
+
HebrewDate.new_from_hebrew(year, 1, 21)
|
52
|
+
when :PESACH_SHENI
|
53
|
+
HebrewDate.new_from_hebrew(year, 2, 15)
|
54
|
+
when :YOM_HAZIKARON
|
55
|
+
HebrewDate.from_holiday(:YOM_HAATZMAUT).back
|
56
|
+
when :YOM_HAATZMAUT
|
57
|
+
date = HebrewDate.new_from_hebrew(year, 2, 5)
|
58
|
+
# Friday or Shabbat - move back to Thursday
|
59
|
+
# Monday - move forward to Tuesday
|
60
|
+
if date.day == 6
|
61
|
+
date.back
|
62
|
+
elsif date.day == 2
|
63
|
+
date.forward
|
64
|
+
elsif date.day == 7
|
65
|
+
date.set_hebrew_date(year, 2, 3)
|
66
|
+
end
|
67
|
+
when :LAG_BAOMER
|
68
|
+
HebrewDate.new_from_hebrew(year, 2, 18)
|
69
|
+
when :YOM_YERUSHALAYIM
|
70
|
+
HebrewDate.new_from_hebrew(year, 2, 28)
|
71
|
+
when :TZOM_TAMMUZ
|
72
|
+
date = HebrewDate.new_from_hebrew(year, 4, 17)
|
73
|
+
date.forward if date.day == 7
|
74
|
+
date
|
75
|
+
when :EREV_SHAVUOT
|
76
|
+
HebrewDate.new_from_hebrew(year, 3, 5)
|
77
|
+
when :SHAVUOT
|
78
|
+
HebrewDate.new_from_hebrew(year, 3, 6)
|
79
|
+
when :TISHA_BAV
|
80
|
+
date = HebrewDate.new_from_hebrew(year, 5, 9)
|
81
|
+
date.forward if date.day == 7
|
82
|
+
date
|
83
|
+
when :TU_BAV
|
84
|
+
HebrewDate.new_from_hebrew(year, 15, 9)
|
85
|
+
when :EREV_ROSH_HASHANA
|
86
|
+
HebrewDate.new_from_hebrew(year, 6, 29)
|
87
|
+
when :ROSH_HASHANA
|
88
|
+
HebrewDate.new_from_hebrew(year, 7, 1)
|
89
|
+
when :TZOM_GEDALIA
|
90
|
+
date = HebrewDate.new_from_hebrew(year, 7, 3)
|
91
|
+
date.forward if date.day == 7
|
92
|
+
date
|
93
|
+
when :EREV_YOM_KIPPUR
|
94
|
+
HebrewDate.new_from_hebrew(year, 7, 9)
|
95
|
+
when :YOM_KIPPUR
|
96
|
+
HebrewDate.new_from_hebrew(year, 7, 10)
|
97
|
+
when :EREV_SUKKOT
|
98
|
+
HebrewDate.new_from_hebrew(year, 7, 14)
|
99
|
+
when :SUKKOT
|
100
|
+
HebrewDate.new_from_hebrew(year, 7, 15)
|
101
|
+
when :SHMINI_ATZERET
|
102
|
+
HebrewDate.new_from_hebrew(year, 7, 22)
|
103
|
+
when :EREV_CHANUKAH
|
104
|
+
HebrewDate.new_from_hebrew(year, 9, 24)
|
105
|
+
when :CHANUKAH
|
106
|
+
HebrewDate.new_from_hebrew(year, 9, 25)
|
107
|
+
when :TZOM_TEVET
|
108
|
+
HebrewDate.new_from_hebrew(year, 10, 10)
|
109
|
+
when :TU_BISHVAT
|
110
|
+
HebrewDate.new_from_hebrew(year, 11, 15)
|
111
|
+
when :PURIM_KATAN
|
112
|
+
if HebrewDate.hebrew_leap_year?(year)
|
113
|
+
HebrewDate.new_from_hebrew(year, 12, 14)
|
114
|
+
end
|
115
|
+
when :TAANIT_ESTHER
|
116
|
+
date = HebrewDate.new_from_hebrew(year,
|
117
|
+
HebrewDate.last_month_of_hebrew_year(year), 13)
|
118
|
+
if date.day == 7
|
119
|
+
date.set_hebrew_date(year, date.hebrew_month, 11)
|
120
|
+
elsif date.day == 6
|
121
|
+
date.back
|
122
|
+
end
|
123
|
+
date
|
124
|
+
when :PURIM
|
125
|
+
HebrewDate.new_from_hebrew(year,
|
126
|
+
HebrewDate.last_month_of_hebrew_year(year), 14)
|
127
|
+
when :SHUSHAN_PURIM
|
128
|
+
HebrewDate.new_from_hebrew(year,
|
129
|
+
HebrewDate.last_month_of_hebrew_year(year), 15)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
3
134
|
# Returns a string of the Jewish holiday or fast day for the current day,
|
4
135
|
# or an empty string if there is no holiday for this day.
|
5
136
|
# @param generic [Boolean] whether you want just a generic name
|
@@ -252,5 +383,9 @@ module HebrewDateSupport
|
|
252
383
|
end
|
253
384
|
end
|
254
385
|
|
386
|
+
def self.included(base)
|
387
|
+
base.extend(ClassMethods)
|
388
|
+
end
|
389
|
+
|
255
390
|
end
|
256
391
|
end
|
data/lib/support/parshiot.rb
CHANGED
data/spec/hebrew_date_spec.rb
CHANGED
@@ -47,4 +47,49 @@ describe HebrewDate do
|
|
47
47
|
HebrewDate.new(2014, 12, 17).holiday.should == 'Chanukah'
|
48
48
|
HebrewDate.new(2014, 12, 25).holiday.should be_nil
|
49
49
|
end
|
50
|
+
|
51
|
+
specify 'from holidays' do
|
52
|
+
HebrewDate.from_holiday(:ROSH_HASHANA, 5774).to_date.
|
53
|
+
should == Date.new(2013, 9, 5)
|
54
|
+
HebrewDate.from_holiday(:TZOM_GEDALIA, 5774).to_date.
|
55
|
+
should == Date.new(2013, 9, 8)
|
56
|
+
HebrewDate.from_holiday(:YOM_KIPPUR, 5774).to_date.
|
57
|
+
should == Date.new(2013, 9, 14)
|
58
|
+
HebrewDate.from_holiday(:SUKKOT, 5774).to_date.
|
59
|
+
should == Date.new(2013, 9, 19)
|
60
|
+
HebrewDate.from_holiday(:SHMINI_ATZERET, 5774).to_date.
|
61
|
+
should == Date.new(2013, 9, 26)
|
62
|
+
HebrewDate.from_holiday(:CHANUKAH, 5774).to_date.
|
63
|
+
should == Date.new(2013, 11, 28)
|
64
|
+
HebrewDate.from_holiday(:TZOM_TEVET, 5774).to_date.
|
65
|
+
should == Date.new(2013, 12, 13)
|
66
|
+
HebrewDate.from_holiday(:TU_BISHVAT, 5774).to_date.
|
67
|
+
should == Date.new(2014, 1, 16)
|
68
|
+
HebrewDate.from_holiday(:PURIM_KATAN, 5774).to_date.
|
69
|
+
should == Date.new(2014, 2, 14)
|
70
|
+
HebrewDate.from_holiday(:TAANIT_ESTHER, 5774).to_date.
|
71
|
+
should == Date.new(2014, 3, 13)
|
72
|
+
HebrewDate.from_holiday(:PURIM, 5774).to_date.
|
73
|
+
should == Date.new(2014, 3, 16)
|
74
|
+
HebrewDate.from_holiday(:EREV_PESACH, 5774).to_date.
|
75
|
+
should == Date.new(2014, 4, 14)
|
76
|
+
HebrewDate.from_holiday(:PESACH, 5774).to_date.
|
77
|
+
should == Date.new(2014, 4, 15)
|
78
|
+
HebrewDate.from_holiday(:PESACH_2, 5774).to_date.
|
79
|
+
should == Date.new(2014, 4, 21)
|
80
|
+
HebrewDate.from_holiday(:YOM_HAZIKARON, 5774).to_date.
|
81
|
+
should == Date.new(2014, 5, 5)
|
82
|
+
HebrewDate.from_holiday(:YOM_HAATZMAUT, 5774).to_date.
|
83
|
+
should == Date.new(2014, 5, 6)
|
84
|
+
HebrewDate.from_holiday(:LAG_BAOMER, 5774).to_date.
|
85
|
+
should == Date.new(2014, 5, 18)
|
86
|
+
HebrewDate.from_holiday(:YOM_YERUSHALAYIM, 5774).to_date.
|
87
|
+
should == Date.new(2014, 5, 28)
|
88
|
+
HebrewDate.from_holiday(:SHAVUOT, 5774).to_date.
|
89
|
+
should == Date.new(2014, 6, 4)
|
90
|
+
HebrewDate.from_holiday(:TZOM_TAMMUZ, 5774).to_date.
|
91
|
+
should == Date.new(2014, 7, 15)
|
92
|
+
HebrewDate.from_holiday(:TISHA_BAV, 5774).to_date.
|
93
|
+
should == Date.new(2014, 8, 5)
|
94
|
+
end
|
50
95
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hebrew_date
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|