zmanim 0.1.0 → 0.2.0
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/CHANGELOG.md +22 -0
- data/lib/zmanim.rb +3 -4
- data/lib/zmanim/hebrew_calendar/jewish_calendar.rb +4 -0
- data/lib/zmanim/limudim/calculators/daf_yomi_yerushalmi.rb +2 -6
- data/lib/zmanim/limudim/calculators/pirkei_avos.rb +54 -0
- data/lib/zmanim/limudim/limud_calculator.rb +11 -5
- data/lib/zmanim/limudim/limudim_formatter.rb +6 -0
- data/lib/zmanim/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f1cc976587acbbfd1df9ee5cd4fa5fda1a87e79
|
4
|
+
data.tar.gz: 3769e3712e2161dc0298a4c4d2be922854b97d31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e5e8c962d601071f4f9fed2fe5d83129ef1fc06738e47a25805869874fc1bd2bc538531551d3cac703f246bca3ad4fa42b1d9fb47a64eeeb4365d028a4fed42
|
7
|
+
data.tar.gz: a39894be370c65758d39925861bcf19c2b108efe9c640001a80d771411692af9ec40b49f9e59006cf31be5aedbfe018d9c73aa9f409bb9e7edc95bf0555ba84c
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [0.2.0] - 2018-04-22
|
8
|
+
### Added
|
9
|
+
- Pirkei Avos limudim calculation
|
10
|
+
- Support for explicit skip_unit (used by DafYomiYerushalmi)
|
11
|
+
- CHANGELOG (this file :) )
|
12
|
+
### Changed
|
13
|
+
- Refactored skip_interval to generic limud detection
|
14
|
+
### Fixed
|
15
|
+
- Cycle detection falsely identifies dates between cycle windows as belonging to a prior cycle
|
16
|
+
- Load sequence can't find Zmanim module when loaded externally
|
17
|
+
|
18
|
+
## [0.1.0] - 2018-01-09 (Original release)
|
19
|
+
### Added
|
20
|
+
- Port of KosherJava/zmanim library, primary functionality
|
21
|
+
- Limudim calculation framework
|
22
|
+
- Weekly Parsha, Tehillim (Month cycle), Mishna Yomis limudim calculation
|
data/lib/zmanim.rb
CHANGED
@@ -143,6 +143,10 @@ module Zmanim::HebrewCalendar
|
|
143
143
|
Zmanim::Limudim::Calculators::MishnaYomis.new.limud(self)
|
144
144
|
end
|
145
145
|
|
146
|
+
def pirkei_avos
|
147
|
+
Zmanim::Limudim::Calculators::PirkeiAvos.new(in_israel: in_israel).limud(self)
|
148
|
+
end
|
149
|
+
|
146
150
|
def tefilah_additions(walled_city: false, nusach: :ashkenaz)
|
147
151
|
additions = []
|
148
152
|
if mashiv_haruach_starts?
|
@@ -33,12 +33,8 @@ module Zmanim::Limudim::Calculators
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
38
|
-
Zmanim::Limudim::Unit.new('no_daf_today')
|
39
|
-
else
|
40
|
-
super
|
41
|
-
end
|
36
|
+
def skip_unit
|
37
|
+
Zmanim::Limudim::Unit.new('no_daf_today')
|
42
38
|
end
|
43
39
|
|
44
40
|
def skip_interval?(interval)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'zmanim/limudim/limud_calculator'
|
2
|
+
|
3
|
+
module Zmanim::Limudim::Calculators
|
4
|
+
class PirkeiAvos
|
5
|
+
include Zmanim::Limudim::LimudCalculator
|
6
|
+
|
7
|
+
attr_reader :in_israel
|
8
|
+
|
9
|
+
def initialize(in_israel:false)
|
10
|
+
@in_israel = in_israel
|
11
|
+
end
|
12
|
+
|
13
|
+
def tiered_units?
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def perpetual_cycle_anchor
|
18
|
+
Zmanim::Limudim::Anchor::DayOfYearAnchor.new(1, in_israel ? 22 : 23) # Day after Pesach
|
19
|
+
end
|
20
|
+
|
21
|
+
def default_units
|
22
|
+
@default_units ||= (1..6).to_a * 4 # 4 sub-cycles of 6 perakim, with the last sub-cycle being compressed as needed
|
23
|
+
end
|
24
|
+
|
25
|
+
def cycle_end_calculation
|
26
|
+
->(start_date, _iteration) do
|
27
|
+
rosh_hashana = Zmanim::HebrewCalendar::JewishDate.new(start_date.jewish_year + 1, 7, 1)
|
28
|
+
rosh_hashana - rosh_hashana.day_of_week # last Shabbos before Rosh Hashanah
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def interval_end_calculation
|
33
|
+
->(cycle, start_date) do
|
34
|
+
start_date + (7 - start_date.day_of_week)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def skip_interval?(interval)
|
39
|
+
!in_israel && [interval.end_date.jewish_month, interval.end_date.jewish_day] == [3,7]
|
40
|
+
end
|
41
|
+
|
42
|
+
def cycle_units_calculation
|
43
|
+
->(cycle) do
|
44
|
+
cycle_weeks = ((cycle.end_date - cycle.start_date + 1) / 7.0).ceil
|
45
|
+
# If the cycle starts on a Friday, outside of israel the 2nd day of Shavuos will fall on Shabbos
|
46
|
+
# and we lose one week in the pirkei avos cycle
|
47
|
+
cycle_weeks -=1 if !in_israel && cycle.start_date.day_of_week == 6
|
48
|
+
unit_count = default_units.length
|
49
|
+
compress_weeks = (unit_count - cycle_weeks) * 2
|
50
|
+
default_units.first(unit_count - compress_weeks) + default_units.last(compress_weeks).each_slice(2).to_a
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -5,14 +5,15 @@ module Zmanim::Limudim
|
|
5
5
|
def limud(date)
|
6
6
|
jewish_date = jewish_date(date)
|
7
7
|
cycle = find_cycle(jewish_date)
|
8
|
-
return nil unless cycle
|
8
|
+
return nil unless cycle && cycle.end_date >= date
|
9
9
|
units = cycle_units_calculation.(cycle)
|
10
10
|
interval = cycle.first_interval(interval_end_calculation)
|
11
11
|
while !jewish_date.between?(interval.start_date, interval.end_date) do
|
12
|
-
interval = interval
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
interval = if skip_interval?(interval)
|
13
|
+
interval.skip(interval_end_calculation)
|
14
|
+
else
|
15
|
+
interval.next(interval_end_calculation)
|
16
|
+
end
|
16
17
|
end
|
17
18
|
unit = unit_for_interval(units, interval)
|
18
19
|
Zmanim::Limudim::Limud.new(interval, unit)
|
@@ -79,10 +80,15 @@ module Zmanim::Limudim
|
|
79
80
|
end
|
80
81
|
|
81
82
|
def unit_for_interval(units, interval)
|
83
|
+
return skip_unit if skip_interval?(interval)
|
82
84
|
return tiered_units_for_interval(units, interval) if tiered_units?
|
83
85
|
Unit.new(*units[interval.iteration-1])
|
84
86
|
end
|
85
87
|
|
88
|
+
def skip_unit
|
89
|
+
nil
|
90
|
+
end
|
91
|
+
|
86
92
|
def skip_interval?(interval)
|
87
93
|
false
|
88
94
|
end
|
@@ -159,6 +159,12 @@ module Zmanim::Limudim
|
|
159
159
|
prefix + limud.unit.render {|e| format_number(e) }
|
160
160
|
end
|
161
161
|
|
162
|
+
def format_avos(limud)
|
163
|
+
return '' unless unit = (limud && limud.unit)
|
164
|
+
prefix = hebrew_format ? 'פרקי אבות ' : 'Pirkei Avos '
|
165
|
+
prefix + unit.render {|e| format_number(e) }
|
166
|
+
end
|
167
|
+
|
162
168
|
private
|
163
169
|
|
164
170
|
def format_number(number)
|
data/lib/zmanim/version.rb
CHANGED
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.2.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: 2018-
|
11
|
+
date: 2018-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo
|
@@ -90,6 +90,7 @@ extra_rdoc_files: []
|
|
90
90
|
files:
|
91
91
|
- ".gitignore"
|
92
92
|
- ".rspec"
|
93
|
+
- CHANGELOG.md
|
93
94
|
- Gemfile
|
94
95
|
- LICENSE
|
95
96
|
- README.md
|
@@ -108,6 +109,7 @@ files:
|
|
108
109
|
- lib/zmanim/limudim/calculators/daf_yomi_yerushalmi.rb
|
109
110
|
- lib/zmanim/limudim/calculators/mishna_yomis.rb
|
110
111
|
- lib/zmanim/limudim/calculators/parsha.rb
|
112
|
+
- lib/zmanim/limudim/calculators/pirkei_avos.rb
|
111
113
|
- lib/zmanim/limudim/calculators/tehillim_monthly.rb
|
112
114
|
- lib/zmanim/limudim/cycle.rb
|
113
115
|
- lib/zmanim/limudim/interval.rb
|