class FastVersioning::Timeline
a timeline for a tracked property
Attributes
fast_versions[RW]
name[RW]
Public Class Methods
new(fast_versions:, name:)
click to toggle source
@param name [String] tracked property name @param fast_versions
[ActiveRecord::Collection] FastVersion collection
# File lib/fast_versioning/timeline.rb, line 7 def initialize(fast_versions:, name:) self.fast_versions = fast_versions self.name = name end
Public Instance Methods
to_h()
click to toggle source
@return [Hash] hash of duration => date ranges
@example
FastVersioning::Timeline.new(fast_versions: model.fast_versions, name: 'status').to_h { Thu, 01 Apr 2021 14:08:48 EDT -04:00..Mon, 05 Apr 2021 21:53:48 EDT -04:00 => 'active', Mon, 05 Apr 2021 21:53:48 EDT -04:00..Mon, 05 Apr 2021 22:02:44 EDT -04:00 => 'inactive' }
# File lib/fast_versioning/timeline.rb, line 23 def to_h durations_array.map do |duration| [duration.date_range, duration.value] end.to_h end
Private Instance Methods
durations_array()
click to toggle source
# File lib/fast_versioning/timeline.rb, line 37 def durations_array @value_durations ||= (filtered_fast_versions.to_a + [nil]).each_cons(2).map do |item, prev_item| Timelines::Duration.new( value: item.value, start_date: item.created_at, end_date: prev_item&.created_at ) end end
filtered_fast_versions()
click to toggle source
# File lib/fast_versioning/timeline.rb, line 33 def filtered_fast_versions fast_versions.where(name: name).order('created_at') end