zmanim 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/CHANGELOG.md +29 -0
- data/Gemfile.lock +41 -0
- data/lib/zmanim/hebrew_calendar/jewish_calendar.rb +204 -17
- data/lib/zmanim/version.rb +1 -1
- data/zmanim.gemspec +2 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 106a751ffa4c28d37a4d69afc2d8aa91d8f07b668dc126f6008fec90c3a0b308
|
4
|
+
data.tar.gz: 8886864f89feb9382a62644de99201c4b0958ff2d8652728fad14ed1c6420df9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 971b9186fae5a3eccba8730038b9df6f2e5566d57fac6626dbbcba60ae87ec472eb73a2d72536f9dfbeee473cdd857c68f3c296a25dfad8feb65874f790a04ad
|
7
|
+
data.tar.gz: c73d548258fc576a7afaff89025a9c0b7105551e679284d0a291f03bbc91945b5f701bac5236eb6c882fba857ef185944fa879f813d069d11666c654c5f9142f
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [0.5.0] - 2022-03-24
|
8
|
+
### Added
|
9
|
+
- `JewishCalendar#taanis_bechorim?` detects Taanis Bechorim for a given date
|
10
|
+
- `JewishCalendar#pesach` returns the date for start of Pesach for any year, or the next upcoming event
|
11
|
+
- `JewishCalendar#pesach_sheni` returns the date for Pesach Sheni for any year, or the next upcoming event
|
12
|
+
- `JewishCalendar#lag_baomer` returns the date for Lag Baomer for any year, or the next upcoming event
|
13
|
+
- `JewishCalendar#shavuos` returns the date for start of Shavuos for any year, or the next upcoming event
|
14
|
+
- `JewishCalendar#seventeen_of_tammuz` returns the date for Seventeen of Tammuz for any year, or the next upcoming event
|
15
|
+
- `JewishCalendar#tisha_beav` returns the date for Tisha Beav for any year, or the next upcoming event
|
16
|
+
- `JewishCalendar#tu_beav` returns the date for Tu Beav for any year, or the next upcoming event
|
17
|
+
- `JewishCalendar#rosh_hashana` returns the date for start of Rosh Hashana for any year, or the next upcoming event
|
18
|
+
- `JewishCalendar#tzom_gedalyah` returns the date for Tzom Gedalyah for any year, or the next upcoming event
|
19
|
+
- `JewishCalendar#yom_kippur` returns the date for Yom Kippur for any year, or the next upcoming event
|
20
|
+
- `JewishCalendar#succos` returns the date for start of Succos for any year, or the next upcoming event
|
21
|
+
- `JewishCalendar#chanukah` returns the date for start of Chanukah for any year, or the next upcoming event
|
22
|
+
- `JewishCalendar#tenth_of_teves` returns the date for Tenth of Teves for any year, or the next upcoming event
|
23
|
+
- `JewishCalendar#tu_beshvat` returns the date for Tu Beshvat for any year, or the next upcoming event
|
24
|
+
- `JewishCalendar#purim` returns the date for Purim for any year, or the next upcoming event
|
25
|
+
- `JewishCalendar#rosh_chodesh` returns the date for Rosh Chodesh for any month, or the next upcoming event
|
26
|
+
- `JewishCalendar#shabbos_mevorchim` returns the date for Shabbos Mevorchim for any month, or the next upcoming event
|
27
|
+
- `JewishCalendar#vesein_tal_umatar_start` returns the date for start of reciting Vesein Tal Umatar for any year, or the next upcoming event
|
28
|
+
- `JewishCalendar#vesein_tal_umatar_starts?` detects if reciting of Vesein Tal Umatar started today
|
29
|
+
### Changed
|
30
|
+
- Upgraded dependency versions to address known security vulnerabilities:
|
31
|
+
- `rake` to 13.0.6
|
32
|
+
- `bundler` to 2.3.10
|
33
|
+
### Fixed
|
34
|
+
- `JewishCalendar#vesein_tal_umatar?` and `JewishCalendar#vesein_tal_umatar_starts_tonight?` now auto-adjust for any calendar year, previously only valid for 20th/21st century
|
35
|
+
|
7
36
|
## [0.4.0] - 2020-10-13
|
8
37
|
### Added
|
9
38
|
- `JewishCalendar#end_of_week` returns Shabbos for this week
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
zmanim (0.5.0)
|
5
|
+
tzinfo
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
byebug (9.1.0)
|
11
|
+
concurrent-ruby (1.1.10)
|
12
|
+
diff-lcs (1.5.0)
|
13
|
+
rake (13.0.6)
|
14
|
+
rspec (3.11.0)
|
15
|
+
rspec-core (~> 3.11.0)
|
16
|
+
rspec-expectations (~> 3.11.0)
|
17
|
+
rspec-mocks (~> 3.11.0)
|
18
|
+
rspec-core (3.11.0)
|
19
|
+
rspec-support (~> 3.11.0)
|
20
|
+
rspec-expectations (3.11.0)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (~> 3.11.0)
|
23
|
+
rspec-mocks (3.11.0)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.11.0)
|
26
|
+
rspec-support (3.11.0)
|
27
|
+
tzinfo (2.0.4)
|
28
|
+
concurrent-ruby (~> 1.0)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
bundler (~> 2.3)
|
35
|
+
byebug (~> 9.1)
|
36
|
+
rake (~> 13.0)
|
37
|
+
rspec (~> 3.7)
|
38
|
+
zmanim!
|
39
|
+
|
40
|
+
BUNDLED WITH
|
41
|
+
2.3.10
|
@@ -84,6 +84,11 @@ module Zmanim::HebrewCalendar
|
|
84
84
|
%i(seventeen_of_tammuz tisha_beav tzom_gedalyah yom_kippur tenth_of_teves taanis_esther).include?(significant_day)
|
85
85
|
end
|
86
86
|
|
87
|
+
def taanis_bechorim?
|
88
|
+
(day_of_week != 7 && jewish_day == 14 && jewish_month == 1) || # normally 14th of nissan,
|
89
|
+
(day_of_week == 5 && jewish_day == 12 && jewish_month == 1) # when that falls on shabbos, moved to previous Thursday
|
90
|
+
end
|
91
|
+
|
87
92
|
def rosh_chodesh?
|
88
93
|
jewish_day == 30 || (jewish_day == 1 && jewish_month != 7)
|
89
94
|
end
|
@@ -231,6 +236,138 @@ module Zmanim::HebrewCalendar
|
|
231
236
|
end
|
232
237
|
end
|
233
238
|
|
239
|
+
def pesach(upcoming: nil, year: nil)
|
240
|
+
find_annual_event(upcoming, year) do |y|
|
241
|
+
JewishCalendar.new(y, 1, 15)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def pesach_sheni(upcoming: nil, year: nil)
|
246
|
+
find_annual_event(upcoming, year) do |y|
|
247
|
+
JewishCalendar.new(y, 2, 14)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def lag_baomer(upcoming: nil, year: nil)
|
252
|
+
find_annual_event(upcoming, year) do |y|
|
253
|
+
JewishCalendar.new(y, 2, 18)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def shavuos(upcoming: nil, year: nil)
|
258
|
+
find_annual_event(upcoming, year) do |y|
|
259
|
+
JewishCalendar.new(y, 3, 6)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def seventeen_of_tammuz(upcoming: nil, year: nil)
|
264
|
+
find_annual_event(upcoming, year) do |y|
|
265
|
+
date = JewishCalendar.new(y, 4, 17)
|
266
|
+
date.forward! if date.day_of_week == 7
|
267
|
+
date
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def tisha_beav(upcoming: nil, year: nil)
|
272
|
+
find_annual_event(upcoming, year) do |y|
|
273
|
+
date = JewishCalendar.new(y, 5, 9)
|
274
|
+
date.forward! if date.day_of_week == 7
|
275
|
+
date
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def tu_beav(upcoming: nil, year: nil)
|
280
|
+
find_annual_event(upcoming, year) do |y|
|
281
|
+
JewishCalendar.new(y, 5, 15)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
def rosh_hashana(upcoming: nil, year: nil)
|
286
|
+
find_annual_event(upcoming, year) do |y|
|
287
|
+
JewishCalendar.new(y, 7, 1)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
def tzom_gedalyah(upcoming: nil, year: nil)
|
292
|
+
find_annual_event(upcoming, year) do |y|
|
293
|
+
date = JewishCalendar.new(y, 7, 3)
|
294
|
+
date.forward! if date.day_of_week == 7
|
295
|
+
date
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
def yom_kippur(upcoming: nil, year: nil)
|
300
|
+
find_annual_event(upcoming, year) do |y|
|
301
|
+
JewishCalendar.new(y, 7, 10)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
def succos(upcoming: nil, year: nil)
|
306
|
+
find_annual_event(upcoming, year) do |y|
|
307
|
+
JewishCalendar.new(y, 7, 15)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def chanukah(upcoming: nil, year: nil)
|
312
|
+
find_annual_event(upcoming, year) do |y|
|
313
|
+
JewishCalendar.new(y, 9, 25)
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
def tenth_of_teves(upcoming: nil, year: nil)
|
318
|
+
find_annual_event(upcoming, year) do |y|
|
319
|
+
JewishCalendar.new(y, 10, 10)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
def tu_beshvat(upcoming: nil, year: nil)
|
324
|
+
find_annual_event(upcoming, year) do |y|
|
325
|
+
JewishCalendar.new(y, 11, 15)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
def purim(upcoming: nil, year: nil)
|
330
|
+
find_annual_event(upcoming, year) do |y|
|
331
|
+
JewishCalendar.new(y, months_in_jewish_year(y), 14)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
def rosh_chodesh(upcoming: nil, month: nil, year: nil)
|
336
|
+
find_monthly_event(upcoming, month, year) do |m, y|
|
337
|
+
m = 8 if m == 7
|
338
|
+
prev = m - 1
|
339
|
+
prev = months_in_jewish_year(y) if prev < 1
|
340
|
+
if days_in_jewish_month(prev,y) == 30
|
341
|
+
JewishCalendar.new(y, prev, 30)
|
342
|
+
else
|
343
|
+
JewishCalendar.new(y, m, 1)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
def shabbos_mevorchim(upcoming: nil, month: nil, year: nil)
|
349
|
+
find_monthly_event(upcoming, month, year) do |m, y|
|
350
|
+
m = 8 if m == 7
|
351
|
+
prev = m - 1
|
352
|
+
prev = months_in_jewish_year(y) if prev < 1
|
353
|
+
mevorchim_start = JewishCalendar.new(y,prev,23)
|
354
|
+
mevorchim_start + (7 - mevorchim_start.day_of_week)
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
def vesein_tal_umatar_start(upcoming: nil, year: nil)
|
359
|
+
find_annual_event(upcoming, year) do |y|
|
360
|
+
start_date =
|
361
|
+
if in_israel
|
362
|
+
JewishCalendar.new(y, 8, 7)
|
363
|
+
else
|
364
|
+
JewishCalendar.new(y, 7, 1) + (47 - tekufas_tishrei_elapsed_days(1, year: y))
|
365
|
+
end
|
366
|
+
start_date.forward! if start_date.day_of_week == 7
|
367
|
+
start_date
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
234
371
|
def shabbos_mevorchim?
|
235
372
|
day_of_week == 7 &&
|
236
373
|
jewish_month != 6 &&
|
@@ -255,24 +392,33 @@ module Zmanim::HebrewCalendar
|
|
255
392
|
!mashiv_haruach? || mashiv_haruach_starts? || mashiv_haruach_ends?
|
256
393
|
end
|
257
394
|
|
258
|
-
#
|
259
|
-
#
|
395
|
+
# Because the jewish date does not auto-increment in the evening,
|
396
|
+
# we use the daytime transition (e.g. December 5/6 for 20th/21st century) as the start date
|
260
397
|
# and rely on the user to increment the jewish date after nightfall.
|
261
|
-
# Note that according to many, the date for Vesein Tal Umatar is tied to the Julian calendar and has historically
|
262
|
-
# moved over time as the deviance from the Gregorian calendar increases. The date of December 4/5 is to be used
|
263
|
-
# for the 20th and 21st century.
|
264
398
|
def vesein_tal_umatar?
|
265
399
|
return false if day_of_week == 7 || yom_tov_assur_bemelacha?
|
266
|
-
|
267
|
-
|
268
|
-
|
400
|
+
return true if jewish_month == 1 && jewish_day < 15
|
401
|
+
return false if jewish_month < 8
|
402
|
+
if in_israel
|
403
|
+
jewish_month > 8 || (jewish_month == 8 && jewish_day >= 7)
|
404
|
+
else
|
405
|
+
tekufas_tishrei_elapsed_days >= 47
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
def vesein_tal_umatar_starts?
|
410
|
+
if in_israel
|
411
|
+
# 7 Cheshvan, or 8 Cheshvan if 7 is Shabbos
|
412
|
+
return false unless jewish_month == 8
|
413
|
+
(day_of_week != 7 && jewish_day == 7) || (day_of_week == 1 && jewish_day == 8)
|
414
|
+
else
|
415
|
+
elapsed_days = tekufas_tishrei_elapsed_days
|
416
|
+
(day_of_week != 7 && elapsed_days == 47) || (day_of_week == 1 && elapsed_days == 48)
|
417
|
+
end
|
269
418
|
end
|
270
419
|
|
271
420
|
def vesein_tal_umatar_starts_tonight?
|
272
|
-
|
273
|
-
start_date = gregorian_vesein_tal_umatar_start
|
274
|
-
(day_of_week == 7 && self == start_date) ||
|
275
|
-
self == (start_date - 1)
|
421
|
+
succ.vesein_tal_umatar_starts?
|
276
422
|
end
|
277
423
|
|
278
424
|
def vesein_beracha?
|
@@ -445,12 +591,53 @@ module Zmanim::HebrewCalendar
|
|
445
591
|
end
|
446
592
|
end
|
447
593
|
|
448
|
-
def
|
449
|
-
|
450
|
-
|
451
|
-
|
594
|
+
def tekufas_tishrei_elapsed_days(day_number=day_number_of_jewish_year, year: jewish_year)
|
595
|
+
days = jewish_calendar_elapsed_days(year) + (day_number-1) + 0.5
|
596
|
+
solar = (year - 1) * 365.25
|
597
|
+
(days - solar).floor.to_i
|
598
|
+
end
|
599
|
+
|
600
|
+
# Finds the date for an annual event whose rules are provided to the method as a block
|
601
|
+
# Supports boolean `upcoming` or a given integer jewish `year`.
|
602
|
+
# If both are nil, defaults to current jewish year.
|
603
|
+
# `upcoming` finds the current or next occurrence of this event
|
604
|
+
def find_annual_event(upcoming, year)
|
605
|
+
if upcoming && year
|
606
|
+
raise "'upcoming' and 'year' options cannot be used together"
|
452
607
|
end
|
453
|
-
|
608
|
+
|
609
|
+
upcoming = false if upcoming.nil? # 'upcoming' only when explicitly passed
|
610
|
+
year = jewish_year if year.nil?
|
611
|
+
|
612
|
+
current = yield(year)
|
613
|
+
upcoming && current < self ? yield(year+1) : current
|
454
614
|
end
|
615
|
+
|
616
|
+
# Finds the date for a monthly event whose rules are provided to the method as a block
|
617
|
+
# Supports boolean `upcoming` or a given integer jewish `year` and `month`.
|
618
|
+
# If all are nil, defaults to current jewish month and year.
|
619
|
+
# `upcoming` finds the current or next occurrence of this event
|
620
|
+
# If only month is provided, defaults to current jewish year.
|
621
|
+
# If only year is provided, defaults to current jewish month.
|
622
|
+
def find_monthly_event(upcoming, month, year)
|
623
|
+
if upcoming && (year || month)
|
624
|
+
raise "'upcoming' option cannot be used together with 'year' or 'month'"
|
625
|
+
end
|
626
|
+
|
627
|
+
upcoming = false if upcoming.nil? # 'upcoming' only when explicitly passed
|
628
|
+
year ||= jewish_year
|
629
|
+
month ||= jewish_month
|
630
|
+
|
631
|
+
current = yield(month, year)
|
632
|
+
if upcoming && current < self
|
633
|
+
month += 1
|
634
|
+
month = 1 if month > months_in_jewish_year(year)
|
635
|
+
year += 1 if month == 7
|
636
|
+
yield(month, year)
|
637
|
+
else
|
638
|
+
current
|
639
|
+
end
|
640
|
+
end
|
641
|
+
|
455
642
|
end
|
456
643
|
end
|
data/lib/zmanim/version.rb
CHANGED
data/zmanim.gemspec
CHANGED
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_runtime_dependency "tzinfo"
|
33
|
-
spec.add_development_dependency "bundler", "~>
|
34
|
-
spec.add_development_dependency "rake", "~>
|
33
|
+
spec.add_development_dependency "bundler", "~> 2.3"
|
34
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
35
35
|
spec.add_development_dependency "rspec", "~> 3.7"
|
36
36
|
spec.add_development_dependency "byebug", "~> 9.1"
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zmanim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pinny Markowitz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- ".rspec"
|
93
93
|
- CHANGELOG.md
|
94
94
|
- Gemfile
|
95
|
+
- Gemfile.lock
|
95
96
|
- LICENSE
|
96
97
|
- README.md
|
97
98
|
- Rakefile
|