litecable 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -1
- data/LICENSE.txt +1 -1
- data/README.md +24 -22
- data/lib/lite_cable.rb +22 -2
- data/lib/lite_cable/anycable.rb +14 -12
- data/lib/lite_cable/broadcast_adapters.rb +35 -0
- data/lib/lite_cable/broadcast_adapters/any_cable.rb +11 -0
- data/lib/lite_cable/broadcast_adapters/base.rb +17 -0
- data/lib/lite_cable/broadcast_adapters/memory.rb +11 -0
- data/lib/lite_cable/config.rb +5 -4
- data/lib/lite_cable/connection/subscriptions.rb +2 -2
- data/lib/lite_cable/server.rb +0 -6
- data/lib/lite_cable/server/client_socket/base.rb +9 -15
- data/lib/lite_cable/version.rb +1 -1
- metadata +18 -76
- data/.gem_release.yml +0 -3
- data/.gitignore +0 -40
- data/.rubocop.yml +0 -53
- data/.travis.yml +0 -16
- data/Gemfile +0 -4
- data/Rakefile +0 -10
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/examples/sinatra/Gemfile +0 -19
- data/examples/sinatra/Procfile +0 -3
- data/examples/sinatra/README.md +0 -35
- data/examples/sinatra/app.rb +0 -53
- data/examples/sinatra/assets/app.css +0 -169
- data/examples/sinatra/assets/cable.js +0 -584
- data/examples/sinatra/assets/reset.css +0 -223
- data/examples/sinatra/chat.rb +0 -40
- data/examples/sinatra/config.ru +0 -21
- data/examples/sinatra/config/environment.rb +0 -18
- data/examples/sinatra/views/index.slim +0 -8
- data/examples/sinatra/views/layout.slim +0 -15
- data/examples/sinatra/views/login.slim +0 -8
- data/examples/sinatra/views/resetcss.slim +0 -224
- data/examples/sinatra/views/room.slim +0 -68
- data/litecable.gemspec +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47a04414eade53832c4b900305ca3a034999724c0cabd6aceacb908192a6124f
|
4
|
+
data.tar.gz: 24c67d2cacbb5f64b5b7d63293c7fdbe143797d0102b732983fc78028469dfc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb63ada090f884f750828b7c116d1066a020c87ab043d929e4ad46b035299c95972acf1d458813a34da797273e0656fc7613977cfef24c6e0765a7a8dece9a6a
|
7
|
+
data.tar.gz: 75314e320e2ed5f18e34c4038d467aef14e73f9b0e4fe01f61955369a52ee28e246e62662a94c3e1d1b9f7ea9999049f8d58e5f7af80479fc88a97b91055720e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 0.7.0 (2020-01-07)
|
4
|
+
|
5
|
+
- Refactor AnyCable integration ([@palkan][])
|
6
|
+
|
7
|
+
Now you only need to set AnyCable broadcast adapter:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
LiteCable.broadcast_adapter = :any_cable
|
11
|
+
```
|
12
|
+
|
13
|
+
```sh
|
14
|
+
# or via env/config
|
15
|
+
LITECABLE_BROADCAST_ADAPTER=any_cable ruby my_app.rb
|
16
|
+
```
|
17
|
+
|
18
|
+
- Adapterize broadcast adapters ([@palkan][])
|
19
|
+
|
20
|
+
- Drop Ruby 2.4 support ([palkan][])
|
21
|
+
|
3
22
|
## 0.6.0 (2019-04-12) 🚀
|
4
23
|
|
5
24
|
- Drop Ruby 2.3 support ([@palkan][])
|
@@ -10,7 +29,7 @@
|
|
10
29
|
|
11
30
|
## 0.4.1 (2017-02-04)
|
12
31
|
|
13
|
-
- Use `websocket-ruby` with
|
32
|
+
- Use `websocket-ruby` with sub-protocols support ([@palkan][])
|
14
33
|
|
15
34
|
## 0.4.0 (2017-01-29)
|
16
35
|
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
[![Gem Version](https://badge.fury.io/rb/litecable.svg)](https://rubygems.org/gems/litecable)
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/litecable.svg)](https://rubygems.org/gems/litecable)
|
2
|
+
[![Build](https://github.com/palkan/litecable/workflows/Build/badge.svg)](https://github.com/palkan/litecable/actions)
|
2
3
|
|
3
4
|
# Lite Cable
|
4
5
|
|
@@ -25,17 +26,11 @@ Add this line to your application's Gemfile:
|
|
25
26
|
gem "litecable"
|
26
27
|
```
|
27
28
|
|
28
|
-
And
|
29
|
-
|
30
|
-
$ bundle
|
31
|
-
|
32
|
-
Or install it yourself as:
|
33
|
-
|
34
|
-
$ gem install litecable
|
29
|
+
And run `bundle install`.
|
35
30
|
|
36
31
|
## Usage
|
37
32
|
|
38
|
-
Please, checkout [Action Cable guides](http://guides.rubyonrails.org/action_cable_overview.html) for general information. Lite Cable aims to be compatible with Action Cable as much as possible without the loss of simplicity and
|
33
|
+
Please, checkout [Action Cable guides](http://guides.rubyonrails.org/action_cable_overview.html) for general information. Lite Cable aims to be compatible with Action Cable as much as possible without the loss of simplicity and _lightness_.
|
39
34
|
|
40
35
|
You can use Action Cable javascript client without any change (precompiled version can be found [here](https://github.com/palkan/litecable/tree/master/examples/sinatra/assets/cable.js)).
|
41
36
|
|
@@ -83,24 +78,32 @@ end
|
|
83
78
|
|
84
79
|
### Using with AnyCable
|
85
80
|
|
86
|
-
Lite Cable is AnyCable-compatible out-of-the-box
|
81
|
+
Lite Cable is AnyCable-compatible out-of-the-box:
|
82
|
+
|
83
|
+
- Set broadcast adapter to AnyCable:
|
87
84
|
|
88
85
|
```ruby
|
89
|
-
|
86
|
+
LiteCable.broadcast_adapter = :any_cable
|
87
|
+
```
|
90
88
|
|
91
|
-
|
92
|
-
require "rack"
|
93
|
-
require "anycable"
|
89
|
+
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.
|
94
90
|
|
95
|
-
|
96
|
-
LiteCable.anycable!
|
91
|
+
- Configure connection factory:
|
97
92
|
|
98
|
-
|
93
|
+
```ruby
|
94
|
+
AnyCable.connection_factory = MyApp::Connection
|
95
|
+
```
|
96
|
+
|
97
|
+
Then run AnyCable along with the app:
|
99
98
|
|
100
|
-
|
99
|
+
```sh
|
100
|
+
bundle exec anycable
|
101
|
+
|
102
|
+
# add -r option to load the app if it's not ./config/anycable.rb or ./config/environment.rb
|
103
|
+
bundle exec anycable -r ./my_app.rb
|
101
104
|
```
|
102
105
|
|
103
|
-
|
106
|
+
See [Sinatra example](https://github.com/palkan/litecable/tree/master/examples/sinatra) for more.
|
104
107
|
|
105
108
|
### Configuration
|
106
109
|
|
@@ -120,9 +123,8 @@ See [config](https://github.com/palkan/litecable/blob/master/lib/lite_cable/conf
|
|
120
123
|
|
121
124
|
## Contributing
|
122
125
|
|
123
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
126
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/palkan/litecable](https://github.com/palkan/litecable).
|
124
127
|
|
125
128
|
## License
|
126
129
|
|
127
|
-
The gem is available as open source under the terms of the [MIT License](
|
128
|
-
|
130
|
+
The gem is available as open source under the terms of the [MIT License](./LICENSE.txt).
|
data/lib/lite_cable.rb
CHANGED
@@ -15,6 +15,7 @@ module LiteCable
|
|
15
15
|
require "lite_cable/channel"
|
16
16
|
require "lite_cable/coders"
|
17
17
|
require "lite_cable/config"
|
18
|
+
require "lite_cable/broadcast_adapters"
|
18
19
|
require "lite_cable/anycable"
|
19
20
|
|
20
21
|
class << self
|
@@ -23,8 +24,27 @@ module LiteCable
|
|
23
24
|
end
|
24
25
|
|
25
26
|
# Broadcast encoded message to the stream
|
26
|
-
def broadcast(
|
27
|
-
|
27
|
+
def broadcast(stream, message, coder: LiteCable.config.coder)
|
28
|
+
broadcast_adapter.broadcast(stream, message, coder: coder)
|
29
|
+
end
|
30
|
+
|
31
|
+
def broadcast_adapter
|
32
|
+
return @broadcast_adapter if defined?(@broadcast_adapter)
|
33
|
+
self.broadcast_adapter = LiteCable.config.broadcast_adapter.to_sym
|
34
|
+
@broadcast_adapter
|
35
|
+
end
|
36
|
+
|
37
|
+
def broadcast_adapter=(adapter)
|
38
|
+
if adapter.is_a?(Symbol) || adapter.is_a?(Array)
|
39
|
+
adapter = BroadcastAdapters.lookup_adapter(adapter)
|
40
|
+
end
|
41
|
+
|
42
|
+
unless adapter.respond_to?(:broadcast)
|
43
|
+
raise ArgumentError, "BroadcastAdapter must implement #broadcast method. " \
|
44
|
+
"#{adapter.class} doesn't implement it."
|
45
|
+
end
|
46
|
+
|
47
|
+
@broadcast_adapter = adapter
|
28
48
|
end
|
29
49
|
end
|
30
50
|
end
|
data/lib/lite_cable/anycable.rb
CHANGED
@@ -3,14 +3,6 @@
|
|
3
3
|
module LiteCable # :nodoc:
|
4
4
|
# AnyCable extensions
|
5
5
|
module AnyCable
|
6
|
-
module Broadcasting # :nodoc:
|
7
|
-
def broadcast(stream, message, coder: nil)
|
8
|
-
coder ||= LiteCable.config.coder
|
9
|
-
# FIXME: after anycable 0.6.0 release
|
10
|
-
Anycable.broadcast stream, coder.encode(message)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
6
|
module Connection # :nodoc:
|
15
7
|
def self.extended(base)
|
16
8
|
base.prepend InstanceMethods
|
@@ -20,9 +12,6 @@ module LiteCable # :nodoc:
|
|
20
12
|
new(socket, options)
|
21
13
|
end
|
22
14
|
|
23
|
-
# Backward compatibility with AnyCable <= 0.4
|
24
|
-
alias create call
|
25
|
-
|
26
15
|
module InstanceMethods # :nodoc:
|
27
16
|
def initialize(socket, subscriptions: nil, **hargs)
|
28
17
|
super(socket, **hargs)
|
@@ -64,6 +53,19 @@ module LiteCable # :nodoc:
|
|
64
53
|
# Patch Lite Cable with AnyCable functionality
|
65
54
|
def self.anycable!
|
66
55
|
LiteCable::Connection::Base.extend LiteCable::AnyCable::Connection
|
67
|
-
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if defined?(AnyCable)
|
60
|
+
AnyCable.configure_server do
|
61
|
+
# Make sure broadcast adapter is valid
|
62
|
+
require "lite_cable/broadcast_adapters/any_cable"
|
63
|
+
unless LiteCable::BroadcastAdapters::AnyCable === LiteCable.broadcast_adapter
|
64
|
+
raise "You should use :any_cable broadcast adapter (current: #{LiteCable.broadcast_adapter.class}). " \
|
65
|
+
"Set it via LITECABLE_BROADCAST_ADAPTER=any_cable or in the code/YML."
|
66
|
+
end
|
67
|
+
|
68
|
+
# Turn AnyCable compatibility mode for anycable RPC server automatically
|
69
|
+
LiteCable.anycable!
|
68
70
|
end
|
69
71
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "lite_cable/broadcast_adapters/base"
|
4
|
+
|
5
|
+
module LiteCable
|
6
|
+
module BroadcastAdapters # :nodoc:
|
7
|
+
module_function
|
8
|
+
|
9
|
+
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
10
|
+
def lookup_adapter(args)
|
11
|
+
adapter, options = Array(args)
|
12
|
+
path_to_adapter = "lite_cable/broadcast_adapters/#{adapter}"
|
13
|
+
adapter_class_name = adapter.to_s.split("_").map(&:capitalize).join
|
14
|
+
|
15
|
+
unless BroadcastAdapters.const_defined?(adapter_class_name, false)
|
16
|
+
begin
|
17
|
+
require path_to_adapter
|
18
|
+
rescue LoadError => e
|
19
|
+
# We couldn't require the adapter itself.
|
20
|
+
if e.path == path_to_adapter
|
21
|
+
raise e.class, "Couldn't load the '#{adapter}' broadcast adapter for LiteCable",
|
22
|
+
e.backtrace
|
23
|
+
# Bubbled up from the adapter require.
|
24
|
+
else
|
25
|
+
raise e.class, "Error loading the '#{adapter}' broadcast adapter for LiteCable",
|
26
|
+
e.backtrace
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
BroadcastAdapters.const_get(adapter_class_name, false).new(**(options || {}))
|
32
|
+
end
|
33
|
+
# rubocop: enable Metrics/AbcSize, Metrics/MethodLength
|
34
|
+
end
|
35
|
+
end
|
data/lib/lite_cable/config.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "anyway_config"
|
4
4
|
require "logger"
|
5
5
|
|
6
6
|
module LiteCable
|
@@ -12,8 +12,9 @@ module LiteCable
|
|
12
12
|
config_name :litecable
|
13
13
|
|
14
14
|
attr_config :logger,
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
coder: Coders::JSON,
|
16
|
+
broadcast_adapter: :memory,
|
17
|
+
identifier_coder: Coders::Raw,
|
18
|
+
log_level: Logger::INFO
|
18
19
|
end
|
19
20
|
end
|
@@ -53,9 +53,9 @@ module LiteCable
|
|
53
53
|
def execute_command(data)
|
54
54
|
command = data.delete("command")
|
55
55
|
case command
|
56
|
-
when "subscribe"
|
56
|
+
when "subscribe" then add(data["identifier"])
|
57
57
|
when "unsubscribe" then remove(data["identifier"])
|
58
|
-
when "message"
|
58
|
+
when "message" then perform_action(data["identifier"], data["data"])
|
59
59
|
else
|
60
60
|
raise UnknownCommandError, "Command not found #{command}"
|
61
61
|
end
|
data/lib/lite_cable/server.rb
CHANGED
@@ -15,12 +15,6 @@ module LiteCable
|
|
15
15
|
|
16
16
|
class << self
|
17
17
|
attr_accessor :subscribers_map
|
18
|
-
|
19
|
-
# Broadcast encoded message to the stream
|
20
|
-
def broadcast(stream, message, coder: nil)
|
21
|
-
coder ||= LiteCable.config.coder
|
22
|
-
subscribers_map.broadcast stream, message, coder
|
23
|
-
end
|
24
18
|
end
|
25
19
|
|
26
20
|
self.subscribers_map = SubscribersMap.new
|
@@ -17,10 +17,10 @@ module LiteCable
|
|
17
17
|
@version = version
|
18
18
|
@active = true
|
19
19
|
|
20
|
-
@open_handlers
|
20
|
+
@open_handlers = []
|
21
21
|
@message_handlers = []
|
22
|
-
@close_handlers
|
23
|
-
@error_handlers
|
22
|
+
@close_handlers = []
|
23
|
+
@error_handlers = []
|
24
24
|
|
25
25
|
@close_on_error = true
|
26
26
|
end
|
@@ -70,13 +70,11 @@ module LiteCable
|
|
70
70
|
@open_handlers.each(&:call)
|
71
71
|
each_frame do |data|
|
72
72
|
@message_handlers.each do |h|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
close if close_on_error
|
79
|
-
end
|
73
|
+
h.call(data)
|
74
|
+
rescue => e # rubocop: disable Style/RescueStandardError
|
75
|
+
log(:error, "Socket receive failed: #{e}")
|
76
|
+
@error_handlers.each { |eh| eh.call(e, data) }
|
77
|
+
close if close_on_error
|
80
78
|
end
|
81
79
|
end
|
82
80
|
ensure
|
@@ -137,11 +135,7 @@ module LiteCable
|
|
137
135
|
framebuffer = WebSocket::Frame::Incoming::Server.new(version: version)
|
138
136
|
|
139
137
|
while IO.select([socket])
|
140
|
-
|
141
|
-
data, _addrinfo = socket.recvfrom(2000)
|
142
|
-
else
|
143
|
-
data, _addrinfo = socket.readpartial(2000), socket.peeraddr
|
144
|
-
end
|
138
|
+
data = socket.respond_to?(:recv) ? socket.recv(2000) : socket.readpartial(2000)
|
145
139
|
break if data.empty?
|
146
140
|
|
147
141
|
framebuffer << data
|
data/lib/lite_cable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litecable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -72,26 +72,26 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: '1.1'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: '1.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: puma
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '3.6'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
@@ -150,48 +150,6 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 0.3.8
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rubocop
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - "~>"
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: 0.65.0
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - "~>"
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 0.65.0
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: rubocop-md
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0.2'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0.2'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: standard
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: 0.0.36
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - "~>"
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: 0.0.36
|
195
153
|
- !ruby/object:Gem::Dependency
|
196
154
|
name: pry-byebug
|
197
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,35 +172,15 @@ executables: []
|
|
214
172
|
extensions: []
|
215
173
|
extra_rdoc_files: []
|
216
174
|
files:
|
217
|
-
- ".gem_release.yml"
|
218
|
-
- ".gitignore"
|
219
|
-
- ".rspec"
|
220
|
-
- ".rubocop.yml"
|
221
|
-
- ".travis.yml"
|
222
175
|
- CHANGELOG.md
|
223
|
-
- Gemfile
|
224
176
|
- LICENSE.txt
|
225
177
|
- README.md
|
226
|
-
- Rakefile
|
227
|
-
- bin/console
|
228
|
-
- bin/setup
|
229
|
-
- examples/sinatra/Gemfile
|
230
|
-
- examples/sinatra/Procfile
|
231
|
-
- examples/sinatra/README.md
|
232
|
-
- examples/sinatra/app.rb
|
233
|
-
- examples/sinatra/assets/app.css
|
234
|
-
- examples/sinatra/assets/cable.js
|
235
|
-
- examples/sinatra/assets/reset.css
|
236
|
-
- examples/sinatra/chat.rb
|
237
|
-
- examples/sinatra/config.ru
|
238
|
-
- examples/sinatra/config/environment.rb
|
239
|
-
- examples/sinatra/views/index.slim
|
240
|
-
- examples/sinatra/views/layout.slim
|
241
|
-
- examples/sinatra/views/login.slim
|
242
|
-
- examples/sinatra/views/resetcss.slim
|
243
|
-
- examples/sinatra/views/room.slim
|
244
178
|
- lib/lite_cable.rb
|
245
179
|
- lib/lite_cable/anycable.rb
|
180
|
+
- lib/lite_cable/broadcast_adapters.rb
|
181
|
+
- lib/lite_cable/broadcast_adapters/any_cable.rb
|
182
|
+
- lib/lite_cable/broadcast_adapters/base.rb
|
183
|
+
- lib/lite_cable/broadcast_adapters/memory.rb
|
246
184
|
- lib/lite_cable/channel.rb
|
247
185
|
- lib/lite_cable/channel/base.rb
|
248
186
|
- lib/lite_cable/channel/registry.rb
|
@@ -268,11 +206,15 @@ files:
|
|
268
206
|
- lib/lite_cable/server/subscribers_map.rb
|
269
207
|
- lib/lite_cable/version.rb
|
270
208
|
- lib/litecable.rb
|
271
|
-
- litecable.gemspec
|
272
209
|
homepage: https://github.com/palkan/litecable
|
273
210
|
licenses:
|
274
211
|
- MIT
|
275
|
-
metadata:
|
212
|
+
metadata:
|
213
|
+
bug_tracker_uri: http://github.com/palkan/litecable/issues
|
214
|
+
changelog_uri: https://github.com/palkan/litecable/blob/master/CHANGELOG.md
|
215
|
+
documentation_uri: http://github.com/palkan/litecable
|
216
|
+
homepage_uri: http://github.com/palkan/litecable
|
217
|
+
source_code_uri: http://github.com/palkan/litecable
|
276
218
|
post_install_message:
|
277
219
|
rdoc_options: []
|
278
220
|
require_paths:
|
@@ -281,14 +223,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
281
223
|
requirements:
|
282
224
|
- - ">="
|
283
225
|
- !ruby/object:Gem::Version
|
284
|
-
version: 2.
|
226
|
+
version: 2.5.0
|
285
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
286
228
|
requirements:
|
287
229
|
- - ">="
|
288
230
|
- !ruby/object:Gem::Version
|
289
231
|
version: '0'
|
290
232
|
requirements: []
|
291
|
-
rubygems_version: 3.0.
|
233
|
+
rubygems_version: 3.0.6
|
292
234
|
signing_key:
|
293
235
|
specification_version: 4
|
294
236
|
summary: Fat-free ActionCable implementation
|