Class: PaperTrailDiff::TimeVersionRange
- Inherits:
-
Object
- Object
- PaperTrailDiff::TimeVersionRange
- 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
-
#initialize(record, time_range:, version_scope: nil, live_endpoint: nil) ⇒ TimeVersionRange
constructor
: (untyped, time_range: TimeRange, ?version_scope: untyped, ?live_endpoint: untyped) -> void.
- #ordered(versions) ⇒ Array[untyped]
-
#select(context_required: false) ⇒ Array[untyped]
: (?context_required: bool) -> Array.
-
#select_plan(context_required: false) ⇒ RootVersionPlan
: (?context_required: bool) -> RootVersionPlan.
-
#trailing_version(relation) ⇒ Object
: (untyped) -> untyped.
-
#versions_relation ⇒ Object
: () -> untyped.
Constructor Details
#initialize(record, time_range:, version_scope: nil, live_endpoint: nil) ⇒ TimeVersionRange
: (untyped, time_range: TimeRange, ?version_scope: untyped, ?live_endpoint: untyped) -> void
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]
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
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
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
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_relation ⇒ Object
: () -> untyped
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 = 'record does not expose a PaperTrail version history' raise InvalidTimelineRangeError, , cause: e end |