Module: AnyCable

Defined in:
lib/anycable.rb,
lib/anycable/cli.rb,
lib/anycable/config.rb,
lib/anycable/server.rb,
lib/anycable/socket.rb,
lib/anycable/version.rb,
lib/anycable/middleware.rb,
lib/anycable/rpc/rpc_pb.rb,
lib/anycable/rpc_handler.rb,
lib/anycable/health_server.rb,
lib/anycable/middleware_chain.rb,
lib/anycable/broadcast_adapters.rb,
lib/anycable/exceptions_handling.rb,
lib/anycable/rpc/rpc_services_pb.rb,
lib/anycable/broadcast_adapters/redis.rb,
lib/anycable/handler/capture_exceptions.rb

Overview

rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength

Defined Under Namespace

Modules: BroadcastAdapters, ExceptionsHandling, Handler, RPC Classes: CLI, Config, HealthServer, Middleware, MiddlewareChain, RPCHandler, Server, Socket

Constant Summary collapse

VERSION =
"0.6.0"
ConnectionRequest =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.ConnectionRequest").msgclass
ConnectionResponse =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.ConnectionResponse").msgclass
CommandMessage =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.CommandMessage").msgclass
CommandResponse =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.CommandResponse").msgclass
DisconnectRequest =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.DisconnectRequest").msgclass
DisconnectResponse =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.DisconnectResponse").msgclass
Status =
Google::Protobuf::DescriptorPool.generated_pool.lookup("anycable.Status").enummodule

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.connection_factoryObject

Provide connection factory which is a callable object with build a Connection object



26
27
28
# File 'lib/anycable.rb', line 26

def connection_factory
  @connection_factory
end

.loggerObject



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

def logger
  return @logger if instance_variable_defined?(:@logger)

  log_output = AnyCable.config.log_file || STDOUT
  @logger = Logger.new(log_output).tap do |logger|
    logger.level = AnyCable.config.log_level
  end
end

.middlewareObject

Returns the value of attribute middleware.



30
31
32
# File 'lib/anycable.rb', line 30

def middleware
  @middleware
end

Class Method Details

.broadcast(channel, payload) ⇒ Object

Raw broadcast message to the channel, sends only string! To send hash or object use ActionCable.server.broadcast instead!



93
94
95
# File 'lib/anycable.rb', line 93

def broadcast(channel, payload)
  broadcast_adapter.broadcast(channel, payload)
end

.broadcast_adapterObject



73
74
75
76
# File 'lib/anycable.rb', line 73

def broadcast_adapter
  self.broadcast_adapter = :redis unless instance_variable_defined?(:@broadcast_adapter)
  @broadcast_adapter
end

.broadcast_adapter=(adapter) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/anycable.rb', line 78

def broadcast_adapter=(adapter)
  if adapter.is_a?(Symbol) || adapter.is_a?(Array)
    adapter = BroadcastAdapters.lookup_adapter(adapter)
  end

  unless adapter.respond_to?(:broadcast)
    raise ArgumentError, "BroadcastAdapter must implement #broadcast method. " \
                         "#{adapter.class} doesn't implement it."
  end

  @broadcast_adapter = adapter
end

.capture_exception(&block) ⇒ Object

Register a custom block that will be called when an exception is raised during gRPC call



51
52
53
# File 'lib/anycable.rb', line 51

def capture_exception(&block)
  ExceptionsHandling << block
end

.configObject



41
42
43
# File 'lib/anycable.rb', line 41

def config
  @config ||= Config.new
end

.configure {|config| ... } ⇒ Object

Yields:



45
46
47
# File 'lib/anycable.rb', line 45

def configure
  yield(config) if block_given?
end

.configure_server(&block) ⇒ Object

Register a callback to be invoked before the server starts



65
66
67
# File 'lib/anycable.rb', line 65

def configure_server(&block)
  server_callbacks << block
end

.error_handlersObject



55
56
57
58
59
60
61
# File 'lib/anycable.rb', line 55

def error_handlers
  warn <<~DEPRECATION
    Using `AnyCable.error_handlers` is deprecated!
    Please, use `AnyCable.capture_exception` instead.
  DEPRECATION
  ExceptionsHandling
end

.server_callbacksObject



69
70
71
# File 'lib/anycable.rb', line 69

def server_callbacks
  @server_callbacks ||= []
end