Class: PaperTrailDiff::ActivityBoundary

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

Overview

Immutable metadata identifying one historical or current activity boundary.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(kind:, version_id:, item_type:, item_id:, recorded_at:, event: nil, whodunnit: nil, transaction_id: nil) ⇒ ActivityBoundary

: (kind: Symbol, version_id: untyped, item_type: untyped, item_id: untyped, recorded_at: untyped, ?event: untyped, ?whodunnit: untyped, ?transaction_id: untyped) -> void

Parameters:

  • kind: (Symbol)
  • version_id: (Object)
  • item_type: (Object)
  • item_id: (Object)
  • recorded_at: (Object)
  • event: (Object) (defaults to: nil)
  • whodunnit: (Object) (defaults to: nil)
  • transaction_id: (Object) (defaults to: nil)


73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/paper_trail_diff/activity_boundary.rb', line 73

def initialize( # rubocop:disable Metrics/ParameterLists
  kind:,
  version_id:,
  item_type:,
  item_id:,
  recorded_at:,
  event: nil,
  whodunnit: nil,
  transaction_id: nil
)
  @kind = kind
  @version_id = Support.immutable_copy(version_id)
  @item_type = Support.immutable_copy(item_type.to_s)
  @item_id = Support.immutable_copy(item_id)
  @recorded_at = Support.immutable_copy(recorded_at)
  @event = Support.immutable_copy(event&.to_s)
  @whodunnit = Support.immutable_copy(whodunnit)
  @transaction_id = Support.immutable_copy(transaction_id)
  @record = RecordReference.new(type: @item_type, id: @item_id)
  freeze
end

Instance Attribute Details

#eventString? (readonly)

Signature:

  • String?

Returns:

  • (String, nil)


12
13
14
# File 'lib/paper_trail_diff/activity_boundary.rb', line 12

def event
  @event
end

#item_idObject (readonly)

Signature:

  • untyped

Returns:

  • (Object)


10
11
12
# File 'lib/paper_trail_diff/activity_boundary.rb', line 10

def item_id
  @item_id
end

#item_typeString (readonly)

Signature:

  • String

Returns:

  • (String)


9
10
11
# File 'lib/paper_trail_diff/activity_boundary.rb', line 9

def item_type
  @item_type
end

#kindSymbol (readonly)

Signature:

  • Symbol

Returns:

  • (Symbol)


7
8
9
# File 'lib/paper_trail_diff/activity_boundary.rb', line 7

def kind
  @kind
end

#recordRecordReference (readonly)

Signature:

  • RecordReference

Returns:



14
15
16
# File 'lib/paper_trail_diff/activity_boundary.rb', line 14

def record
  @record
end

#recorded_atObject (readonly)

Signature:

  • untyped

Returns:

  • (Object)


11
12
13
# File 'lib/paper_trail_diff/activity_boundary.rb', line 11

def recorded_at
  @recorded_at
end

#transaction_idObject (readonly)

The transaction the version was written in, when PaperTrail recorded one. Several versions saved together share it, which is what lets a timeline report one save as one step rather than as its parts.

Returns:

  • (Object)


18
19
20
# File 'lib/paper_trail_diff/activity_boundary.rb', line 18

def transaction_id
  @transaction_id
end

#version_idObject (readonly)

Signature:

  • untyped

Returns:

  • (Object)


8
9
10
# File 'lib/paper_trail_diff/activity_boundary.rb', line 8

def version_id
  @version_id
end

#whodunnitObject (readonly)

Signature:

  • untyped

Returns:

  • (Object)


13
14
15
# File 'lib/paper_trail_diff/activity_boundary.rb', line 13

def whodunnit
  @whodunnit
end

Class Method Details

.current(record, captured_at:) ⇒ ActivityBoundary

: (untyped, captured_at: untyped) -> ActivityBoundary

Parameters:

  • (Object)
  • captured_at: (Object)

Returns:



36
37
38
39
40
41
42
43
44
# File 'lib/paper_trail_diff/activity_boundary.rb', line 36

def current(record, captured_at:)
  new(
    kind: :current,
    version_id: nil,
    item_type: record.class.base_class.name,
    item_id: record.id,
    recorded_at: captured_at
  )
end

.destroyed(version) ⇒ ActivityBoundary

The state a destroy version leaves behind. A version records the state before its own event, so the boundary built from a destroy version still holds the record; this one is the absence that follows it. : (untyped) -> ActivityBoundary

Parameters:

  • (Object)

Returns:



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/paper_trail_diff/activity_boundary.rb', line 50

def destroyed(version)
  new(
    kind: :destroyed,
    version_id: version.id,
    item_type: version.item_type,
    item_id: version.item_id,
    recorded_at: version.created_at,
    event: version.event,
    whodunnit: version.whodunnit,
    transaction_id: transaction_id(version)
  )
end

.from_version(version) ⇒ ActivityBoundary

: (untyped) -> ActivityBoundary

Parameters:

  • (Object)

Returns:



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

def from_version(version)
  new(
    kind: :version,
    version_id: version.id,
    item_type: version.item_type,
    item_id: version.item_id,
    recorded_at: version.created_at,
    event: version.event,
    whodunnit: version.whodunnit,
    transaction_id: transaction_id(version)
  )
end

.transaction_id(version) ⇒ Object

A custom version class need not carry the column, and PaperTrail leaves it nil outside a transaction. Both read as "no transaction here", which groups with nothing. : (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


67
68
69
# File 'lib/paper_trail_diff/activity_boundary.rb', line 67

def transaction_id(version)
  version.transaction_id if version.respond_to?(:transaction_id)
end

Instance Method Details

#current?Boolean

: () -> bool

Returns:

  • (Boolean)


101
102
103
# File 'lib/paper_trail_diff/activity_boundary.rb', line 101

def current?
  kind == :current
end

#destroyed?Boolean

: () -> bool

Returns:

  • (Boolean)


106
107
108
# File 'lib/paper_trail_diff/activity_boundary.rb', line 106

def destroyed?
  kind == :destroyed
end

#to_hHash[Symbol, untyped]

: () -> Hash[Symbol, untyped]

Returns:

  • (Hash[Symbol, untyped])


111
112
113
114
115
116
117
118
119
# File 'lib/paper_trail_diff/activity_boundary.rb', line 111

def to_h
  {
    kind: kind,
    version_id: version_id,
    item_type: item_type,
    item_id: item_id,
    recorded_at: recorded_at
  }
end

#version?Boolean

: () -> bool

Returns:

  • (Boolean)


96
97
98
# File 'lib/paper_trail_diff/activity_boundary.rb', line 96

def version?
  kind == :version
end