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