Module: PeriodicRecords::Model
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/periodic_records/model.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- MIN =
Date.new(0001, 1, 1)
- MAX =
Date.new(9999, 1, 1)
Instance Method Summary collapse
- #adjust_overlapping_records ⇒ Object
- #current? ⇒ Boolean
- #overlapping_records ⇒ Object
- #periodic_dup ⇒ Object
- #record_split_step ⇒ Object
- #set_default_period_after_initialize? ⇒ Boolean
- #siblings ⇒ Object
- #within_interval?(start_date, end_date) ⇒ Boolean
Instance Method Details
#adjust_overlapping_records ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/periodic_records/model.rb', line 55 def adjust_overlapping_records overlapping_records.each do |overlapping_record| if overlapping_record.start_at >= start_at && overlapping_record.end_at <= end_at destroy_overlapping_record(overlapping_record) elsif overlapping_record.start_at < start_at && overlapping_record.end_at > end_at split_overlapping_record(overlapping_record) elsif overlapping_record.start_at < start_at adjust_overlapping_record_end_at(overlapping_record) elsif overlapping_record.end_at > end_at adjust_overlapping_record_start_at(overlapping_record) end end end |
#current? ⇒ Boolean
38 39 40 41 |
# File 'lib/periodic_records/model.rb', line 38 def current? date = Date.current within_interval?(date, date) end |
#overlapping_records ⇒ Object
51 52 53 |
# File 'lib/periodic_records/model.rb', line 51 def overlapping_records siblings.within_interval(start_at, end_at) end |
#periodic_dup ⇒ Object
75 76 77 |
# File 'lib/periodic_records/model.rb', line 75 def periodic_dup dup end |
#record_split_step ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/periodic_records/model.rb', line 79 def record_split_step @record_split_step ||= begin column = self.class.column_for_attribute(:start_at) if column.type == :datetime precision = column.precision || 6 Float("1.0e-#{precision}").seconds else 1.day end end end |
#set_default_period_after_initialize? ⇒ Boolean
71 72 73 |
# File 'lib/periodic_records/model.rb', line 71 def set_default_period_after_initialize? new_record? end |
#siblings ⇒ Object
47 48 49 |
# File 'lib/periodic_records/model.rb', line 47 def siblings raise NotImplementedError end |
#within_interval?(start_date, end_date) ⇒ Boolean
43 44 45 |
# File 'lib/periodic_records/model.rb', line 43 def within_interval?(start_date, end_date) start_at && end_at && start_at <= end_date && end_at >= start_date end |