Home

Awesome

Gem Version Build

Lite Cable

Lightweight ActionCable implementation.

Contains application logic (channels, streams, broadcasting) and also (optional) Rack hijack based server (suitable only for development and test due to its simplicity).

Compatible with AnyCable (for production usage).

<a href="https://evilmartians.com/"> <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>

Examples

Installation

Add this line to your application's Gemfile:

gem "litecable"

And run bundle install.

Usage

Please, checkout Action Cable guides for general information. Lite Cable aims to be compatible with Action Cable as much as possible without the loss of simplicity and lightness.

You can use Action Cable javascript client without any change (precompiled version can be found here).

Here are the differences:

class MyChannel < LiteCable::Channel::Base
  # Use this id in your client to create subscriptions
  identifier :chat
end
App.cable.subscriptions.create('chat', ...)

Using a custom channel registry

Alternatively to eager loading all channel classes and providing identifiers, you can build a custom channel registry object, which can perform channel class lookups:

# DummyRegistry which always returns a predefined channel class
class DummyRegistry
  def lookup(channel_id)
    DummyChannel
  end
end

LiteCable.channel_registry = DummyRegistry.new

Using built-in server (middleware)

Lite Cable comes with a simple Rack middleware for development/testing usage. To use Lite Cable server:

Rack::Builder.new do
  map "/cable" do
    # You have to specify your app's connection class
    use LiteCable::Server::Middleware, connection_class: App::Connection
    run proc { |_| [200, {"Content-Type" => "text/plain"}, ["OK"]] }
  end
end

Using with AnyCable

Lite Cable is AnyCable-compatible out-of-the-box.

If AnyCable gem is loaded, you don't need to configure Lite Cable at all.

Otherwise, you must configure broadcast adapter manually:

LiteCable.broadcast_adapter = :any_cable

You can also do this via configuration, e.g., env var (LITECABLE_BROADCAST_ADAPTER=any_cable) or broadcast_adapter: any_cable in a YAML config.

At the AnyCable side, you must configure a connection factory:

AnyCable.connection_factory = MyApp::Connection

Then run AnyCable along with the app:

bundle exec anycable

# add -r option to load the app if it's not ./config/anycable.rb or ./config/environment.rb
bundle exec anycable -r ./my_app.rb

See Sinatra example for more.

Configuration

Lite Cable uses anyway_config for configuration.

See config for available options.

Unsupported features

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/palkan/litecable.

License

The gem is available as open source under the terms of the MIT License.