123456789_123456789_123456789_123456789_123456789_

Class: ActionCable::Connection::TestServer

Relationships & Source Files
Inherits: Object
Defined in: actioncable/lib/action_cable/connection/test_case.rb

Overview

TestServer provides test pub/sub and executor implementations

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(server) ⇒ TestServer

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 137

def initialize(server)
  @streams = Hash.new { |h, k| h[k] = [] }
  @config = server.config
  @timers = []
end

Instance Attribute Details

#config (readonly)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 135

attr_reader :streams, :config, :timers

#streams (readonly)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 135

attr_reader :streams, :config, :timers

#timers (readonly)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 135

attr_reader :streams, :config, :timers

Instance Method Details

#advance_time(seconds)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 155

def advance_time(seconds)
  @timers.each { |timer| timer.advance(seconds) }
end

#executor

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 144

alias_method :executor, :itself

#post(&work)

Inline async calls

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 149

def post(&work) = work.call

#pubsub

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 143

alias_method :pubsub, :itself

#subscribe(stream, callback, success_callback = nil)

Pub/sub interface ==

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 160

def subscribe(stream, callback, success_callback = nil)
  @streams[stream] << callback
  success_callback&.call
end

#timer(every, &block)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 151

def timer(every, &block)
  TestTimer.new(every, &block).tap { |t| @timers << t }
end

#unsubscribe(stream, callback)

[ GitHub ]

  
# File 'actioncable/lib/action_cable/connection/test_case.rb', line 165

def unsubscribe(stream, callback)
  @streams[stream].delete(callback)
  @streams.delete(stream) if @streams[stream].empty?
end