Class: SOF::Cycles::EndOf

Inherits:
SOF::Cycle show all
Defined in:
lib/sof/cycles/end_of.rb

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, legend, load, notation, #notation, #range, #to_h, validate_period, #validate_period, volume_only?, #volume_to_delay_expiration

Constructor Details

This class inherits a constructor from SOF::Cycle

Class Method Details

.descriptionObject



21
22
23
# File 'lib/sof/cycles/end_of.rb', line 21

def self.description
  "End of - occurrences by the end of a time period"
end

.examplesObject



25
26
27
# File 'lib/sof/cycles/end_of.rb', line 25

def self.examples
  ["V1E1M - once by the end of next month", "V2E2Q - twice by the end of 2 quarters"]
end

.recurring?Boolean

Returns:

  • (Boolean)


19
# File 'lib/sof/cycles/end_of.rb', line 19

def self.recurring? = true

Instance Method Details

#expiration_of(_ = nil, anchor: nil) ⇒ Date

Returns the expiration date for the cycle

Examples:

Cycle.for("V1E18MF2020-01-09")
  .expiration_of(anchor: "2020-06-04".to_date)
# => #<Date: 2021-06-30>

Parameters:

  • _ (nil) (defaults to: nil)

    Unused parameter, maintained for compatibility

  • anchor (nil) (defaults to: nil)

    _ Unused parameter, maintained for compatibility

Returns:

  • (Date)

    The final date of the cycle



48
49
50
51
# File 'lib/sof/cycles/end_of.rb', line 48

def expiration_of(_ = nil, anchor: nil)
  return nil if parser.dormant? || from_date.nil?
  final_date
end

#final_date(_ = nil) ⇒ Date

Calculates the final date of the cycle

Examples:

Cycle.for("V1E18MF2020-01-09").final_date
# => #<Date: 2021-06-30>

Parameters:

  • _ (nil) (defaults to: nil)

    Unused parameter, maintained for compatibility

Returns:

  • (Date)

    The final date of the cycle calculated as the end of the nth subsequent period after the FROM date, where n = (period count - 1)



70
71
72
73
74
75
# File 'lib/sof/cycles/end_of.rb', line 70

def final_date(_ = nil)
  return nil if parser.dormant? || from_date.nil?
  time_span
    .end_date(start_date - 1.send(period))
    .end_of_month
end

#last_completed(_ = nil) ⇒ Object

Always returns the from_date



36
# File 'lib/sof/cycles/end_of.rb', line 36

def last_completed(_ = nil) = from_date&.to_date

#satisfied_by?(_ = nil, anchor: Date.current) ⇒ Boolean

Is the supplied anchor date prior to the final date?

Returns:

  • (Boolean)

    true if the cycle is satisfied, false otherwise



56
57
58
59
# File 'lib/sof/cycles/end_of.rb', line 56

def satisfied_by?(_ = nil, anchor: Date.current)
  return false if parser.dormant? || from_date.nil?
  anchor <= final_date
end

#start_date(_ = nil) ⇒ Object



77
# File 'lib/sof/cycles/end_of.rb', line 77

def start_date(_ = nil) = from_date&.to_date

#to_sObject



29
30
31
32
33
# File 'lib/sof/cycles/end_of.rb', line 29

def to_s
  return dormant_to_s if parser.dormant? || from_date.nil?

  "#{volume}x by #{final_date.to_fs(:american)}"
end