Class: Zmanim::Limudim::Cycle

Inherits:
Object
  • Object
show all
Defined in:
lib/zmanim/limudim/cycle.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(start_date, end_date, iteration) ⇒ Cycle

Returns a new instance of Cycle.



5
6
7
8
9
# File 'lib/zmanim/limudim/cycle.rb', line 5

def initialize(start_date, end_date, iteration)
  @start_date = start_date
  @end_date = end_date
  @iteration = iteration
end

Instance Attribute Details

#end_dateObject (readonly)

Returns the value of attribute end_date.



3
4
5
# File 'lib/zmanim/limudim/cycle.rb', line 3

def end_date
  @end_date
end

#iterationObject (readonly)

Returns the value of attribute iteration.



3
4
5
# File 'lib/zmanim/limudim/cycle.rb', line 3

def iteration
  @iteration
end

#start_dateObject (readonly)

Returns the value of attribute start_date.



3
4
5
# File 'lib/zmanim/limudim/cycle.rb', line 3

def start_date
  @start_date
end

Class Method Details

.from_cycle_initiation(initial_cycle_date, cycle_end_calculation, date) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/zmanim/limudim/cycle.rb', line 17

def self.from_cycle_initiation(initial_cycle_date, cycle_end_calculation, date)
  return nil if initial_cycle_date > date
  iteration = 1
  end_date = cycle_end_calculation.(initial_cycle_date, iteration)
  cycle = Cycle.new(initial_cycle_date, end_date, iteration)
  while date > cycle.end_date
    cycle = cycle.next(cycle_end_calculation)
  end
  cycle
end

.from_perpetual_anchor(anchor, cycle_end_calculation, date) ⇒ Object



11
12
13
14
15
# File 'lib/zmanim/limudim/cycle.rb', line 11

def self.from_perpetual_anchor(anchor, cycle_end_calculation, date)
  start_date = anchor.current_or_previous_occurrence(date)
  end_date = cycle_end_calculation.(start_date, nil)
  Cycle.new(start_date, end_date, nil)
end

Instance Method Details

#first_interval(interval_end_calculation) ⇒ Object



36
37
38
# File 'lib/zmanim/limudim/cycle.rb', line 36

def first_interval(interval_end_calculation)
  Interval.first_for_cycle(self, interval_end_calculation)
end

#next(cycle_end_calculation) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/zmanim/limudim/cycle.rb', line 28

def next(cycle_end_calculation)
  return nil unless iteration
  new_iteration = iteration + 1
  new_start_date = end_date + 1
  new_end_date = cycle_end_calculation.(new_start_date, new_iteration)
  Cycle.new(new_start_date, new_end_date, new_iteration)
end