Module: AnyCable::BroadcastAdapters

Defined in:
lib/anycable/broadcast_adapters.rb,
lib/anycable/broadcast_adapters/redis.rb

Overview

:nodoc:

Defined Under Namespace

Classes: Redis

Class Method Summary collapse

Class Method Details

.lookup_adapter(args) ⇒ Object

rubocop: disable Metrics/AbcSize, Metrics/MethodLength



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/anycable/broadcast_adapters.rb', line 8

def lookup_adapter(args)
  adapter, options = Array(args)
  path_to_adapter = "anycable/broadcast_adapters/#{adapter}"
  adapter_class_name = adapter.to_s.split("_").map(&:capitalize).join

  unless BroadcastAdapters.const_defined?(adapter_class_name, false)
    begin
      require path_to_adapter
    rescue LoadError => e
      # We couldn't require the adapter itself.
      if e.path == path_to_adapter
        raise e.class, "Couldn't load the '#{adapter}' broadcast adapter for AnyCable",
              e.backtrace
      # Bubbled up from the adapter require.
      else
        raise e.class, "Error loading the '#{adapter}' broadcast adapter for AnyCable",
              e.backtrace
      end
    end
  end

  BroadcastAdapters.const_get(adapter_class_name, false).new(options || {})
end