@@ -52,26 +52,19 @@ def refreshes_for(invalidation)
5252 registration . dependencies . include? ( observable_name ) &&
5353 newer_revision? ( registration . dom_id , instance_id , revision )
5454 end
55- batched , individual = changed . partition ( &:batch )
56- streams = individual . map { |registration | refresh ( registration , instance_id , revision ) }
57- batched . group_by ( &:batch ) . each_value do |group |
58- group . each { |registration | record_revision ( registration , instance_id , revision ) }
59- streams << TurboStreamRenderer . batch_refresh ( group , instance_id , revision )
60- end
61- streams
55+ refresh_streams ( changed , instance_id , revision )
6256 end
6357
6458 # @rbs (ActorSnapshot) -> Array[String]
6559 def reconnect_refreshes ( snapshot )
66- registrations . filter_map do |registration |
67- next unless newer_revision? (
60+ stale = registrations . select do |registration |
61+ newer_revision? (
6862 registration . dom_id ,
6963 snapshot . instance_id ,
7064 snapshot . revision
7165 )
72-
73- refresh ( registration , snapshot . instance_id , snapshot . revision )
7466 end
67+ refresh_streams ( stale , snapshot . instance_id , snapshot . revision )
7568 end
7669
7770 class << self
@@ -91,6 +84,21 @@ def validate_identity!(registration, reference)
9184
9285 attr_reader :registrations , :revisions
9386
87+ # Live invalidations and reconnect replays share this, so a reconnecting
88+ # client pays the same number of requests a connected one does.
89+ # @rbs (Array[ComponentRegistration], Integer, Integer) -> Array[String]
90+ def refresh_streams ( changed , instance_id , revision )
91+ batched , individual = changed . partition ( &:batch )
92+ streams = individual . map do |registration |
93+ refresh ( registration , instance_id , revision )
94+ end
95+ batched . group_by ( &:batch ) . each_value do |group |
96+ group . each { |registration | record_revision ( registration , instance_id , revision ) }
97+ streams << TurboStreamRenderer . batch_refresh ( group , instance_id , revision )
98+ end
99+ streams
100+ end
101+
94102 # @rbs (ComponentRegistration, Integer, Integer) -> void
95103 def record_revision ( registration , instance_id , revision )
96104 revisions [ registration . dom_id ] = [ instance_id , revision ]
0 commit comments