Class: PaperTrailDiff::ActivityRange
- Inherits:
-
Object
- Object
- PaperTrailDiff::ActivityRange
- Defined in:
- lib/paper_trail_diff/activity_range.rb,
sig/generated/paper_trail_diff/activity_range.rbs
Overview
Tests activity versions against a historical-version or wall-clock range end.
Instance Attribute Summary collapse
- #end_time ⇒ Object readonly
- #start_time ⇒ Object readonly
Instance Method Summary collapse
-
#after_start?(version, key) ⇒ Boolean
: (untyped, Array) -> bool.
-
#before_end?(version, key) ⇒ Boolean
: (untyped, Array) -> bool.
-
#current_end? ⇒ Boolean
: () -> bool.
-
#include?(version) ⇒ Boolean
: (untyped) -> bool.
-
#initialize(start_boundary, end_boundary) ⇒ ActivityRange
constructor
: (untyped, untyped) -> void.
- #key_before_or_equal?(left, right) ⇒ Boolean
-
#scope(relation) ⇒ Object
Narrows an Active Record version relation by timestamp.
Constructor Details
#initialize(start_boundary, end_boundary) ⇒ ActivityRange
: (untyped, untyped) -> void
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/paper_trail_diff/activity_range.rb', line 11 def initialize(start_boundary, end_boundary) @start_boundary = start_boundary @end_boundary = end_boundary @start_key = if Endpoint.version?(start_boundary) Support.chronological_version_key(start_boundary) end @start_time = Endpoint.version?(start_boundary) ? start_boundary.created_at : start_boundary @end_time = Endpoint.version?(end_boundary) ? end_boundary.created_at : end_boundary @end_key = if Endpoint.version?(end_boundary) Support.chronological_version_key(end_boundary) end end |
Instance Attribute Details
#end_time ⇒ Object (readonly)
8 9 10 |
# File 'lib/paper_trail_diff/activity_range.rb', line 8 def end_time @end_time end |
#start_time ⇒ Object (readonly)
7 8 9 |
# File 'lib/paper_trail_diff/activity_range.rb', line 7 def start_time @start_time end |
Instance Method Details
#after_start?(version, key) ⇒ Boolean
: (untyped, Array) -> bool
51 52 53 54 55 56 |
# File 'lib/paper_trail_diff/activity_range.rb', line 51 def after_start?(version, key) start_key = @start_key return key_before_or_equal?(start_key, key) if start_key version.created_at >= @start_time end |
#before_end?(version, key) ⇒ Boolean
: (untyped, Array) -> bool
59 60 61 62 63 64 |
# File 'lib/paper_trail_diff/activity_range.rb', line 59 def before_end?(version, key) end_key = @end_key return key_before_or_equal?(key, end_key) if end_key version.created_at <= @end_boundary end |
#current_end? ⇒ Boolean
: () -> bool
38 39 40 |
# File 'lib/paper_trail_diff/activity_range.rb', line 38 def current_end? !Endpoint.version?(@end_boundary) end |
#include?(version) ⇒ Boolean
: (untyped) -> bool
25 26 27 28 |
# File 'lib/paper_trail_diff/activity_range.rb', line 25 def include?(version) key = Support.chronological_version_key(version) after_start?(version, key) && before_end?(version, key) end |
#key_before_or_equal?(left, right) ⇒ Boolean
67 68 69 70 71 72 |
# File 'lib/paper_trail_diff/activity_range.rb', line 67 def key_before_or_equal?(left, right) comparison = left <=> right raise ConfigurationError, 'versions have incomparable timestamps' unless comparison comparison <= 0 end |
#scope(relation) ⇒ Object
Narrows an Active Record version relation by timestamp. Exact tie-breaking remains in #include? so this works for integer, UUID, and custom version IDs. : (untyped) -> untyped
33 34 35 |
# File 'lib/paper_trail_diff/activity_range.rb', line 33 def scope(relation) relation.where(created_at: @start_time..end_time) end |