Class: PaperTrailDiff::ActivityEventSnapshotRefresher

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

Overview

Dispatches safe descendant events to focused immutable snapshot appliers.

Instance Method Summary collapse

Constructor Details

#initialize(traversal:, pool:, components:, association_reader: nil, record_transition: nil) ⇒ ActivityEventSnapshotRefresher

: (traversal: AssociationTraversal, pool: SnapshotPool, components: untyped, ?association_reader: untyped, ?record_transition: untyped) -> void

Parameters:

  • traversal: (AssociationTraversal)
  • pool: (SnapshotPool)
  • components: (Object)
  • association_reader: (Object) (defaults to: nil)
  • record_transition: (Object) (defaults to: nil)


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

def initialize(traversal:, pool:, components:, association_reader: nil, record_transition: nil)
  @components = components
  @record_resolver = ActivityEventRecordResolver.new(record_transition: record_transition)
  @route_finder = ActivityEventRouteFinder.new(traversal)
  @relationship = ActivityRelationship.new
  configure_appliers(pool, association_reader)
end

Instance Method Details

#belongs_to_applier(record_normalizer) ⇒ ActivityBelongsToEventApplier

: (ActivityEventRecordNormalizer) -> ActivityBelongsToEventApplier



42
43
44
45
46
47
48
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 42

def belongs_to_applier(record_normalizer)
  ActivityBelongsToEventApplier.new(
    route_finder: @route_finder,
    record_resolver: @record_resolver,
    record_normalizer: record_normalizer
  )
end

#call(root_endpoint, context_endpoint, previous, branches, event) ⇒ [ bool, RecordSnapshot? ]

: (untyped, untyped, RecordSnapshot, Array, ActivityEvent?) -> [bool, RecordSnapshot?]

Parameters:

Returns:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 51

def call( # rubocop:disable Metrics/MethodLength
  root_endpoint,
  context_endpoint,
  previous,
  branches,
  event
)
  return [false, nil] unless event && branches.one?

  tree, normalizer = @components.call(branches)
  routes = @route_finder.collection_routes(
    endpoint_model_class(root_endpoint), tree, event.version.item_type.to_s
  )
  unless routes.empty?
    delta = @record_resolver.snapshot_delta(event.version)
    return [false, nil] unless @collection_applier.safe?(routes, event.version, delta)

    return @collection_applier.call(
      root_endpoint,
      context_endpoint,
      previous,
      normalizer,
      routes,
      event.version,
      delta
    )
  end

  @belongs_to_applier.call(
    root_endpoint,
    context_endpoint,
    previous,
    tree,
    normalizer,
    event.version
  )
end

#collection_applier(record_normalizer, route_updater) ⇒ ActivityCollectionEventApplier

: (ActivityEventRecordNormalizer, ActivityCollectionRouteUpdater) -> ActivityCollectionEventApplier



32
33
34
35
36
37
38
39
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 32

def collection_applier(record_normalizer, route_updater)
  ActivityCollectionEventApplier.new(
    record_resolver: @record_resolver,
    record_normalizer: record_normalizer,
    route_updater: route_updater,
    relationship: @relationship
  )
end

#collection_updater(pool) ⇒ ActivityCollectionRouteUpdater

: (SnapshotPool) -> ActivityCollectionRouteUpdater

Parameters:

Returns:



27
28
29
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 27

def collection_updater(pool)
  ActivityCollectionRouteUpdater.new(pool: pool, relationship: @relationship)
end

#configure_appliers(pool, association_reader) ⇒ void

This method returns an undefined value.

: (SnapshotPool, untyped) -> void

Parameters:



17
18
19
20
21
22
23
24
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 17

def configure_appliers(pool, association_reader)
  route_updater = collection_updater(pool)
  record_normalizer = ActivityEventRecordNormalizer.new(
    association_reader: association_reader
  )
  @collection_applier = collection_applier(record_normalizer, route_updater)
  @belongs_to_applier = belongs_to_applier(record_normalizer)
end

#deserialized_changeset(version, model_class) ⇒ Object

: (untyped, untyped) -> untyped

Parameters:

  • (Object)
  • (Object)

Returns:

  • (Object)


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

def deserialized_changeset(version, model_class)
  @record_resolver.deserialized_changeset(version, model_class)
end

#endpoint_model_class(endpoint) ⇒ Object

: (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


111
112
113
# File 'lib/paper_trail_diff/activity_event_snapshot_refresher.rb', line 111

def endpoint_model_class(endpoint)
  Endpoint.version?(endpoint) ? Endpoint.model_class(endpoint) : endpoint.class
end

#record_after(version) ⇒ Object

: (untyped) -> untyped

Parameters:

  • (Object)

Returns:

  • (Object)


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

def record_after(version)
  @record_resolver.record_after(version)
end