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

Overview

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

Defined Under Namespace

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

Constant Summary collapse

VERSION =
"0.6.3"
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



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

def connection_factory
  @connection_factory
end

.loggerObject



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

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.



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

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!



97
98
99
# File 'lib/anycable.rb', line 97

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

.broadcast_adapterObject



77
78
79
80
# File 'lib/anycable.rb', line 77

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

.broadcast_adapter=(adapter) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/anycable.rb', line 82

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



55
56
57
# File 'lib/anycable.rb', line 55

def capture_exception(&block)
  ExceptionsHandling << block
end

.configObject



40
41
42
43
44
45
46
47
# File 'lib/anycable.rb', line 40

def config
  @config ||= begin
    # Load anyway_config as later as possible
    # to make sure all framework-dependent patches are loaded
    require "anycable/config"
    Config.new
  end
end

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

Yields:



49
50
51
# File 'lib/anycable.rb', line 49

def configure
  yield(config) if block_given?
end

.configure_server(&block) ⇒ Object

Register a callback to be invoked before the server starts



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

def configure_server(&block)
  server_callbacks << block
end

.error_handlersObject



59
60
61
62
63
64
65
# File 'lib/anycable.rb', line 59

def error_handlers
  warn "    Using `AnyCable.error_handlers` is deprecated!\n    Please, use `AnyCable.capture_exception` instead.\n  DEPRECATION\n  ExceptionsHandling\nend\n"

.server_callbacksObject



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

def server_callbacks
  @server_callbacks ||= []
end