Class: SOF::Cycles::Lookback
Constant Summary
Constants inherited
from SOF::Cycle
SOF::Cycle::VERSION
Instance Attribute Summary
Attributes inherited from SOF::Cycle
#parser
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from SOF::Cycle
#==, #as_json, class_for_kind, class_for_notation_id, #considered_dates, #cover?, #covered_dates, cycle_handlers, dump, #extend_period, for, #from_data, handles?, #humanized_span, inherited, #initialize, #kind_inquiry, #last_completed, legend, load, notation, #notation, #range, #satisfied_by?, #to_h, validate_period, #validate_period, volume_only?
Constructor Details
This class inherits a constructor from SOF::Cycle
Class Method Details
.description ⇒ Object
13
14
15
|
# File 'lib/sof/cycles/lookback.rb', line 13
def self.description
"Lookback - occurrences within a prior time period counting backwards from today"
end
|
.examples ⇒ Object
17
18
19
|
# File 'lib/sof/cycles/lookback.rb', line 17
def self.examples
["V3L3D - 3 times in the prior 3 days", "V1L2W - once in the prior 2 weeks"]
end
|
.recurring? ⇒ Boolean
11
|
# File 'lib/sof/cycles/lookback.rb', line 11
def self.recurring? = true
|
Instance Method Details
#expiration_of(completion_dates) ⇒ Date?
“Absent further completions, you go red on this date”
35
36
37
38
39
40
|
# File 'lib/sof/cycles/lookback.rb', line 35
def expiration_of(completion_dates)
anchor = completion_dates.max_by(volume) { it }.min
return unless satisfied_by?(completion_dates, anchor:)
window_end anchor
end
|
#final_date(anchor) ⇒ Object
Also known as:
window_end
42
43
44
45
46
|
# File 'lib/sof/cycles/lookback.rb', line 42
def final_date(anchor)
return if anchor.nil?
time_span.end_date(anchor.to_date)
end
|
#start_date(anchor) ⇒ Object
Also known as:
window_start
49
50
51
|
# File 'lib/sof/cycles/lookback.rb', line 49
def start_date(anchor)
time_span.begin_date(anchor.to_date)
end
|
#to_s ⇒ Object
21
|
# File 'lib/sof/cycles/lookback.rb', line 21
def to_s = "#{volume}x in the prior #{period_count} #{humanized_period}"
|
#volume_to_delay_expiration(completion_dates, anchor:) ⇒ Object
23
24
25
26
27
28
29
30
|
# File 'lib/sof/cycles/lookback.rb', line 23
def volume_to_delay_expiration(completion_dates, anchor:)
relevant_dates = considered_dates(completion_dates, anchor:)
return unless satisfied_by?(relevant_dates, anchor:)
relevant_dates.count(relevant_dates.min)
end
|