Class: PaperTrailDiff::TimeVersionRange

Inherits:
Object
  • Object
show all
Defined in:
lib/paper_trail_diff/time_version_range.rb,
sig/generated/paper_trail_diff/time_version_range.rbs

Overview

Selects in-range root versions plus one later reconstruction boundary.

Instance Method Summary collapse

Constructor Details

#initialize(record, time_range:, version_scope: nil, live_endpoint: nil) ⇒ TimeVersionRange

: (untyped, time_range: TimeRange, ?version_scope: untyped, ?live_endpoint: untyped) -> void

Parameters:

  • (Object)
  • time_range: (TimeRange)
  • version_scope: (Object) (defaults to: nil)
  • live_endpoint: (Object) (defaults to: nil)


8
9
10
11
12
13
# File 'lib/paper_trail_diff/time_version_range.rb', line 8

def initialize(record, time_range:, version_scope: nil, live_endpoint: nil)
  @record = record
  @time_range = time_range
  @version_scope = version_scope
  @live_endpoint = live_endpoint
end

Instance Method Details

#ordered(versions) ⇒ Array[untyped]

: (Array) -> Array

Parameters:

  • (Array[untyped])

Returns:

  • (Array[untyped])


58
59
60
# File 'lib/paper_trail_diff/time_version_range.rb', line 58

def ordered(versions)
  Support.chronological_sort(versions)
end

#select(context_required: false) ⇒ Array[untyped]

: (?context_required: bool) -> Array

Parameters:

  • context_required: (Boolean) (defaults to: false)

Returns:

  • (Array[untyped])


16
17
18
# File 'lib/paper_trail_diff/time_version_range.rb', line 16

def select(context_required: false)
  select_plan(context_required: context_required).versions
end

#select_plan(context_required: false) ⇒ RootVersionPlan

: (?context_required: bool) -> RootVersionPlan

Parameters:

  • context_required: (Boolean) (defaults to: false)

Returns:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/paper_trail_diff/time_version_range.rb', line 21

def select_plan(context_required: false)
  relation = versions_relation
  in_range = ordered(@time_range.scope(relation).to_a)
  RootVersionSelection.new(
    in_range: in_range,
    selected: VersionScopeFilter.new(@version_scope).call(@time_range.scope(relation),
                                                          in_range),
    after_range: trailing_version(relation),
    windowed: true,
    context_required: context_required,
    filtered: !@version_scope.nil?,
    live_endpoint: @live_endpoint
  ).call
end

#trailing_version(relation) ⇒ Object

: (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


53
54
55
# File 'lib/paper_trail_diff/time_version_range.rb', line 53

def trailing_version(relation)
  @time_range.trailing_scope(relation).reorder(created_at: :asc, id: :asc).first
end

#versions_relationObject

: () -> untyped

Returns:

  • (Object)


44
45
46
47
48
49
50
# File 'lib/paper_trail_diff/time_version_range.rb', line 44

def versions_relation
  association_name = @record.class.versions_association_name
  @record.public_send(association_name)
rescue NoMethodError => e
  message = 'record does not expose a PaperTrail version history'
  raise InvalidTimelineRangeError, message, cause: e
end