litecable 0.4.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +34 -1
- data/LICENSE.txt +1 -1
- data/README.md +30 -28
- data/lib/lite_cable.rb +23 -2
- data/lib/lite_cable/anycable.rb +23 -14
- 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/channel.rb +1 -0
- data/lib/lite_cable/channel/base.rb +4 -2
- data/lib/lite_cable/channel/registry.rb +5 -0
- data/lib/lite_cable/channel/streams.rb +1 -2
- data/lib/lite_cable/coders.rb +1 -0
- data/lib/lite_cable/coders/json.rb +1 -0
- data/lib/lite_cable/coders/raw.rb +2 -1
- data/lib/lite_cable/config.rb +8 -6
- data/lib/lite_cable/connection.rb +1 -0
- data/lib/lite_cable/connection/authorization.rb +1 -0
- data/lib/lite_cable/connection/base.rb +2 -2
- data/lib/lite_cable/connection/identification.rb +3 -0
- data/lib/lite_cable/connection/streams.rb +1 -0
- data/lib/lite_cable/connection/subscriptions.rb +7 -2
- data/lib/lite_cable/internal.rb +1 -0
- data/lib/lite_cable/logging.rb +4 -2
- data/lib/lite_cable/server.rb +1 -6
- data/lib/lite_cable/server/client_socket.rb +1 -0
- data/lib/lite_cable/server/client_socket/base.rb +17 -21
- data/lib/lite_cable/server/client_socket/subscriptions.rb +3 -2
- data/lib/lite_cable/server/heart_beat.rb +4 -1
- data/lib/lite_cable/server/middleware.rb +7 -6
- data/lib/lite_cable/server/subscribers_map.rb +3 -0
- data/lib/lite_cable/version.rb +2 -1
- data/lib/litecable.rb +1 -0
- metadata +31 -77
- data/.gitignore +0 -40
- data/.rubocop.yml +0 -63
- data/.travis.yml +0 -7
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/circle.yml +0 -8
- data/examples/sinatra/Gemfile +0 -16
- data/examples/sinatra/Procfile +0 -3
- data/examples/sinatra/README.md +0 -33
- data/examples/sinatra/anycable +0 -18
- data/examples/sinatra/app.rb +0 -52
- 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/bin/anycable-go +0 -0
- data/examples/sinatra/chat.rb +0 -39
- data/examples/sinatra/config.ru +0 -28
- 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 -33
data/lib/lite_cable/coders.rb
CHANGED
data/lib/lite_cable/config.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require
|
2
|
+
|
3
|
+
require "anyway_config"
|
4
|
+
require "logger"
|
4
5
|
|
5
6
|
module LiteCable
|
6
|
-
#
|
7
|
+
# AnyCable configuration
|
7
8
|
class Config < Anyway::Config
|
8
9
|
require "lite_cable/coders/json"
|
9
10
|
require "lite_cable/coders/raw"
|
@@ -11,8 +12,9 @@ module LiteCable
|
|
11
12
|
config_name :litecable
|
12
13
|
|
13
14
|
attr_config :logger,
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
coder: Coders::JSON,
|
16
|
+
broadcast_adapter: :memory,
|
17
|
+
identifier_coder: Coders::Raw,
|
18
|
+
log_level: Logger::INFO
|
17
19
|
end
|
18
20
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
|
-
# rubocop:disable Metrics/LineLength
|
4
4
|
module Connection
|
5
5
|
# A Connection object represents a client "connected" to the application.
|
6
6
|
# It contains all of the channel subscriptions. Incoming messages are then routed to these channel subscriptions
|
@@ -37,7 +37,6 @@ module LiteCable
|
|
37
37
|
# it easy to use cookies that were set when logging in via a web interface to authorize the connection.
|
38
38
|
#
|
39
39
|
class Base
|
40
|
-
# rubocop:enable Metrics/LineLength
|
41
40
|
include Authorization
|
42
41
|
prepend Identification
|
43
42
|
include Logging
|
@@ -79,6 +78,7 @@ module LiteCable
|
|
79
78
|
|
80
79
|
def transmit(cable_message)
|
81
80
|
return if disconnected?
|
81
|
+
|
82
82
|
socket.transmit encode(cable_message)
|
83
83
|
end
|
84
84
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "set"
|
3
4
|
|
4
5
|
module LiteCable
|
@@ -13,6 +14,7 @@ module LiteCable
|
|
13
14
|
define_method(identifier) do
|
14
15
|
return instance_variable_get(:"@#{identifier}") if
|
15
16
|
instance_variable_defined?(:"@#{identifier}")
|
17
|
+
|
16
18
|
fetch_identifier(identifier.to_s)
|
17
19
|
end
|
18
20
|
end
|
@@ -66,6 +68,7 @@ module LiteCable
|
|
66
68
|
identifiers.each_with_object({}) do |id, acc|
|
67
69
|
obj = instance_variable_get("@#{id}")
|
68
70
|
next unless obj
|
71
|
+
|
69
72
|
acc[id.to_s] = LiteCable.config.identifier_coder.encode(obj)
|
70
73
|
end
|
71
74
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Connection
|
4
5
|
# Manage the connection channels and route messages
|
5
6
|
class Subscriptions
|
6
7
|
class Error < StandardError; end
|
8
|
+
|
7
9
|
class AlreadySubscribedError < Error; end
|
10
|
+
|
8
11
|
class UnknownCommandError < Error; end
|
12
|
+
|
9
13
|
class ChannelNotFoundError < Error; end
|
10
14
|
|
11
15
|
include Logging
|
@@ -52,9 +56,9 @@ module LiteCable
|
|
52
56
|
def execute_command(data)
|
53
57
|
command = data.delete("command")
|
54
58
|
case command
|
55
|
-
when "subscribe"
|
59
|
+
when "subscribe" then add(data["identifier"])
|
56
60
|
when "unsubscribe" then remove(data["identifier"])
|
57
|
-
when "message"
|
61
|
+
when "message" then perform_action(data["identifier"], data["data"])
|
58
62
|
else
|
59
63
|
raise UnknownCommandError, "Command not found #{command}"
|
60
64
|
end
|
@@ -67,6 +71,7 @@ module LiteCable
|
|
67
71
|
def find!(identifier)
|
68
72
|
channel = find(identifier)
|
69
73
|
raise ChannelNotFoundError unless channel
|
74
|
+
|
70
75
|
channel
|
71
76
|
end
|
72
77
|
|
data/lib/lite_cable/internal.rb
CHANGED
data/lib/lite_cable/logging.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "logger"
|
3
4
|
|
4
5
|
module LiteCable
|
5
6
|
module Logging # :nodoc:
|
@@ -12,7 +13,7 @@ module LiteCable
|
|
12
13
|
@logger = LiteCable.config.logger
|
13
14
|
return if @logger == false
|
14
15
|
|
15
|
-
@logger ||= ::Logger.new(
|
16
|
+
@logger ||= ::Logger.new($stderr).tap do |logger|
|
16
17
|
logger.level = LiteCable.config.log_level
|
17
18
|
end
|
18
19
|
end
|
@@ -22,6 +23,7 @@ module LiteCable
|
|
22
23
|
|
23
24
|
def log(level, message = nil)
|
24
25
|
return unless LiteCable::Logging.logger
|
26
|
+
|
25
27
|
LiteCable::Logging.logger.send(level, PREFIX) { message || yield }
|
26
28
|
end
|
27
29
|
end
|
data/lib/lite_cable/server.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
# Rack middleware to hijack sockets.
|
4
5
|
#
|
@@ -14,12 +15,6 @@ module LiteCable
|
|
14
15
|
|
15
16
|
class << self
|
16
17
|
attr_accessor :subscribers_map
|
17
|
-
|
18
|
-
# Broadcast encoded message to the stream
|
19
|
-
def broadcast(stream, message, coder: nil)
|
20
|
-
coder ||= LiteCable.config.coder
|
21
|
-
subscribers_map.broadcast stream, message, coder
|
22
|
-
end
|
23
18
|
end
|
24
19
|
|
25
20
|
self.subscribers_map = SubscribersMap.new
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Server
|
4
5
|
module ClientSocket
|
5
6
|
# Wrapper over web socket
|
6
|
-
# rubocop:disable Metrics/ClassLength
|
7
7
|
class Base
|
8
8
|
include Logging
|
9
9
|
include Subscriptions
|
@@ -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
|
@@ -36,6 +36,9 @@ module LiteCable
|
|
36
36
|
type: type
|
37
37
|
)
|
38
38
|
socket.write frame.to_s
|
39
|
+
rescue EOFError, Errno::ECONNRESET => e
|
40
|
+
log(:debug, "Socket gone: #{e}")
|
41
|
+
close
|
39
42
|
rescue IOError, Errno::EPIPE, Errno::ETIMEDOUT => e
|
40
43
|
log(:error, "Socket send failed: #{e}")
|
41
44
|
close
|
@@ -61,6 +64,7 @@ module LiteCable
|
|
61
64
|
@error_handlers << block
|
62
65
|
end
|
63
66
|
|
67
|
+
# rubocop: disable Metrics/MethodLength
|
64
68
|
def listen
|
65
69
|
keepalive
|
66
70
|
Thread.new do
|
@@ -69,13 +73,11 @@ module LiteCable
|
|
69
73
|
@open_handlers.each(&:call)
|
70
74
|
each_frame do |data|
|
71
75
|
@message_handlers.each do |h|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
close if close_on_error
|
78
|
-
end
|
76
|
+
h.call(data)
|
77
|
+
rescue => e # rubocop: disable Style/RescueStandardError
|
78
|
+
log(:error, "Socket receive failed: #{e}")
|
79
|
+
@error_handlers.each { |eh| eh.call(e, data) }
|
80
|
+
close if close_on_error
|
79
81
|
end
|
80
82
|
end
|
81
83
|
ensure
|
@@ -83,6 +85,7 @@ module LiteCable
|
|
83
85
|
end
|
84
86
|
end
|
85
87
|
end
|
88
|
+
# rubocop: enable Metrics/MethodLength
|
86
89
|
|
87
90
|
def close
|
88
91
|
return unless @active
|
@@ -131,22 +134,15 @@ module LiteCable
|
|
131
134
|
end
|
132
135
|
end
|
133
136
|
|
134
|
-
# rubocop:disable Metrics/AbcSize
|
135
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
136
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
137
|
-
# rubocop:disable Metrics/MethodLength
|
138
137
|
def each_frame
|
139
138
|
framebuffer = WebSocket::Frame::Incoming::Server.new(version: version)
|
140
139
|
|
141
140
|
while IO.select([socket])
|
142
|
-
|
143
|
-
data, _addrinfo = socket.recvfrom(2000)
|
144
|
-
else
|
145
|
-
data, _addrinfo = socket.readpartial(2000), socket.peeraddr
|
146
|
-
end
|
141
|
+
data = socket.respond_to?(:recv) ? socket.recv(2000) : socket.readpartial(2000)
|
147
142
|
break if data.empty?
|
143
|
+
|
148
144
|
framebuffer << data
|
149
|
-
while frame = framebuffer.next
|
145
|
+
while frame = framebuffer.next # rubocop:disable Lint/AssignmentInCondition
|
150
146
|
case frame.type
|
151
147
|
when :close
|
152
148
|
return
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Server
|
4
5
|
module ClientSocket
|
@@ -6,12 +7,12 @@ module LiteCable
|
|
6
7
|
module Subscriptions
|
7
8
|
def subscribe(channel, broadcasting)
|
8
9
|
LiteCable::Server.subscribers_map
|
9
|
-
|
10
|
+
.add_subscriber(broadcasting, self, channel)
|
10
11
|
end
|
11
12
|
|
12
13
|
def unsubscribe(channel, broadcasting)
|
13
14
|
LiteCable::Server.subscribers_map
|
14
|
-
|
15
|
+
.remove_subscriber(broadcasting, self, channel)
|
15
16
|
end
|
16
17
|
|
17
18
|
def unsubscribe_from_all(channel)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Server
|
4
5
|
# Sends pings to sockets
|
@@ -22,6 +23,7 @@ module LiteCable
|
|
22
23
|
@stopped = true
|
23
24
|
end
|
24
25
|
|
26
|
+
# rubocop: disable Metrics/MethodLength
|
25
27
|
def run
|
26
28
|
Thread.new do
|
27
29
|
Thread.current.abort_on_exception = true
|
@@ -39,11 +41,12 @@ module LiteCable
|
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
44
|
+
# rubocop: enable Metrics/MethodLength
|
42
45
|
|
43
46
|
private
|
44
47
|
|
45
48
|
def ping_message(time)
|
46
|
-
{
|
49
|
+
{type: LiteCable::INTERNAL[:message_types][:ping], message: time}.to_json
|
47
50
|
end
|
48
51
|
end
|
49
52
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Server
|
4
5
|
# Rack middleware to hijack the socket
|
@@ -11,15 +12,15 @@ module LiteCable
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def call(env)
|
14
|
-
return [404, {
|
15
|
-
env["HTTP_UPGRADE"] ==
|
15
|
+
return [404, {"Content-Type" => "text/plain"}, ["Not Found"]] unless
|
16
|
+
env["HTTP_UPGRADE"] == "websocket"
|
16
17
|
|
17
|
-
raise HijackNotAvailable unless env[
|
18
|
+
raise HijackNotAvailable unless env["rack.hijack"]
|
18
19
|
|
19
|
-
env[
|
20
|
+
env["rack.hijack"].call
|
20
21
|
handshake = send_handshake(env)
|
21
22
|
|
22
|
-
socket = ClientSocket::Base.new env, env[
|
23
|
+
socket = ClientSocket::Base.new env, env["rack.hijack_io"], handshake.version
|
23
24
|
init_connection socket
|
24
25
|
init_heartbeat socket
|
25
26
|
socket.listen
|
@@ -34,7 +35,7 @@ module LiteCable
|
|
34
35
|
)
|
35
36
|
|
36
37
|
handshake.from_rack env
|
37
|
-
env[
|
38
|
+
env["rack.hijack_io"].write handshake.to_s
|
38
39
|
handshake
|
39
40
|
end
|
40
41
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module LiteCable
|
3
4
|
module Server
|
4
5
|
# From https://github.com/rails/rails/blob/v5.0.1/actioncable/lib/action_cable/subscription_adapter/subscriber_map.rb
|
@@ -31,6 +32,7 @@ module LiteCable
|
|
31
32
|
def remove_socket(socket, channel)
|
32
33
|
list = @sync.synchronize do
|
33
34
|
return unless @sockets.key?(socket)
|
35
|
+
|
34
36
|
@sockets[socket].dup
|
35
37
|
end
|
36
38
|
|
@@ -42,6 +44,7 @@ module LiteCable
|
|
42
44
|
def broadcast(stream, message, coder)
|
43
45
|
list = @sync.synchronize do
|
44
46
|
return unless @streams.key?(stream)
|
47
|
+
|
45
48
|
@streams[stream].to_a
|
46
49
|
end
|
47
50
|
|
data/lib/lite_cable/version.rb
CHANGED
data/lib/litecable.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litecable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1
|
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: 2021-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,98 +72,70 @@ 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
|
-
version: 3.6
|
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
|
-
version: 3.6
|
96
|
+
version: '3.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '1.13'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.13'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '10.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '10.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '3.0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '3.0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: simplecov
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
129
|
- - ">="
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 0.3.8
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: pry-byebug
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
131
|
+
version: '3.0'
|
160
132
|
type: :development
|
161
133
|
prerelease: false
|
162
134
|
version_requirements: !ruby/object:Gem::Requirement
|
163
135
|
requirements:
|
164
136
|
- - ">="
|
165
137
|
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
138
|
+
version: '3.0'
|
167
139
|
description: Fat-free ActionCable implementation for using with AnyCable (and without
|
168
140
|
Rails)
|
169
141
|
email:
|
@@ -172,36 +144,15 @@ executables: []
|
|
172
144
|
extensions: []
|
173
145
|
extra_rdoc_files: []
|
174
146
|
files:
|
175
|
-
- ".gitignore"
|
176
|
-
- ".rspec"
|
177
|
-
- ".rubocop.yml"
|
178
|
-
- ".travis.yml"
|
179
147
|
- CHANGELOG.md
|
180
|
-
- Gemfile
|
181
148
|
- LICENSE.txt
|
182
149
|
- README.md
|
183
|
-
- Rakefile
|
184
|
-
- bin/console
|
185
|
-
- bin/setup
|
186
|
-
- circle.yml
|
187
|
-
- examples/sinatra/Gemfile
|
188
|
-
- examples/sinatra/Procfile
|
189
|
-
- examples/sinatra/README.md
|
190
|
-
- examples/sinatra/anycable
|
191
|
-
- examples/sinatra/app.rb
|
192
|
-
- examples/sinatra/assets/app.css
|
193
|
-
- examples/sinatra/assets/cable.js
|
194
|
-
- examples/sinatra/assets/reset.css
|
195
|
-
- examples/sinatra/bin/anycable-go
|
196
|
-
- examples/sinatra/chat.rb
|
197
|
-
- examples/sinatra/config.ru
|
198
|
-
- examples/sinatra/views/index.slim
|
199
|
-
- examples/sinatra/views/layout.slim
|
200
|
-
- examples/sinatra/views/login.slim
|
201
|
-
- examples/sinatra/views/resetcss.slim
|
202
|
-
- examples/sinatra/views/room.slim
|
203
150
|
- lib/lite_cable.rb
|
204
151
|
- lib/lite_cable/anycable.rb
|
152
|
+
- lib/lite_cable/broadcast_adapters.rb
|
153
|
+
- lib/lite_cable/broadcast_adapters/any_cable.rb
|
154
|
+
- lib/lite_cable/broadcast_adapters/base.rb
|
155
|
+
- lib/lite_cable/broadcast_adapters/memory.rb
|
205
156
|
- lib/lite_cable/channel.rb
|
206
157
|
- lib/lite_cable/channel/base.rb
|
207
158
|
- lib/lite_cable/channel/registry.rb
|
@@ -227,11 +178,15 @@ files:
|
|
227
178
|
- lib/lite_cable/server/subscribers_map.rb
|
228
179
|
- lib/lite_cable/version.rb
|
229
180
|
- lib/litecable.rb
|
230
|
-
|
231
|
-
homepage: https://github.com/anycable/litecable
|
181
|
+
homepage: https://github.com/palkan/litecable
|
232
182
|
licenses:
|
233
183
|
- MIT
|
234
|
-
metadata:
|
184
|
+
metadata:
|
185
|
+
bug_tracker_uri: http://github.com/palkan/litecable/issues
|
186
|
+
changelog_uri: https://github.com/palkan/litecable/blob/master/CHANGELOG.md
|
187
|
+
documentation_uri: http://github.com/palkan/litecable
|
188
|
+
homepage_uri: http://github.com/palkan/litecable
|
189
|
+
source_code_uri: http://github.com/palkan/litecable
|
235
190
|
post_install_message:
|
236
191
|
rdoc_options: []
|
237
192
|
require_paths:
|
@@ -240,15 +195,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
240
195
|
requirements:
|
241
196
|
- - ">="
|
242
197
|
- !ruby/object:Gem::Version
|
243
|
-
version:
|
198
|
+
version: 2.5.0
|
244
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
200
|
requirements:
|
246
201
|
- - ">="
|
247
202
|
- !ruby/object:Gem::Version
|
248
203
|
version: '0'
|
249
204
|
requirements: []
|
250
|
-
|
251
|
-
rubygems_version: 2.6.4
|
205
|
+
rubygems_version: 3.0.6
|
252
206
|
signing_key:
|
253
207
|
specification_version: 4
|
254
208
|
summary: Fat-free ActionCable implementation
|