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.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +34 -1
  3. data/LICENSE.txt +1 -1
  4. data/README.md +30 -28
  5. data/lib/lite_cable.rb +23 -2
  6. data/lib/lite_cable/anycable.rb +23 -14
  7. data/lib/lite_cable/broadcast_adapters.rb +35 -0
  8. data/lib/lite_cable/broadcast_adapters/any_cable.rb +11 -0
  9. data/lib/lite_cable/broadcast_adapters/base.rb +17 -0
  10. data/lib/lite_cable/broadcast_adapters/memory.rb +11 -0
  11. data/lib/lite_cable/channel.rb +1 -0
  12. data/lib/lite_cable/channel/base.rb +4 -2
  13. data/lib/lite_cable/channel/registry.rb +5 -0
  14. data/lib/lite_cable/channel/streams.rb +1 -2
  15. data/lib/lite_cable/coders.rb +1 -0
  16. data/lib/lite_cable/coders/json.rb +1 -0
  17. data/lib/lite_cable/coders/raw.rb +2 -1
  18. data/lib/lite_cable/config.rb +8 -6
  19. data/lib/lite_cable/connection.rb +1 -0
  20. data/lib/lite_cable/connection/authorization.rb +1 -0
  21. data/lib/lite_cable/connection/base.rb +2 -2
  22. data/lib/lite_cable/connection/identification.rb +3 -0
  23. data/lib/lite_cable/connection/streams.rb +1 -0
  24. data/lib/lite_cable/connection/subscriptions.rb +7 -2
  25. data/lib/lite_cable/internal.rb +1 -0
  26. data/lib/lite_cable/logging.rb +4 -2
  27. data/lib/lite_cable/server.rb +1 -6
  28. data/lib/lite_cable/server/client_socket.rb +1 -0
  29. data/lib/lite_cable/server/client_socket/base.rb +17 -21
  30. data/lib/lite_cable/server/client_socket/subscriptions.rb +3 -2
  31. data/lib/lite_cable/server/heart_beat.rb +4 -1
  32. data/lib/lite_cable/server/middleware.rb +7 -6
  33. data/lib/lite_cable/server/subscribers_map.rb +3 -0
  34. data/lib/lite_cable/version.rb +2 -1
  35. data/lib/litecable.rb +1 -0
  36. metadata +31 -77
  37. data/.gitignore +0 -40
  38. data/.rubocop.yml +0 -63
  39. data/.travis.yml +0 -7
  40. data/Gemfile +0 -4
  41. data/Rakefile +0 -6
  42. data/bin/console +0 -14
  43. data/bin/setup +0 -8
  44. data/circle.yml +0 -8
  45. data/examples/sinatra/Gemfile +0 -16
  46. data/examples/sinatra/Procfile +0 -3
  47. data/examples/sinatra/README.md +0 -33
  48. data/examples/sinatra/anycable +0 -18
  49. data/examples/sinatra/app.rb +0 -52
  50. data/examples/sinatra/assets/app.css +0 -169
  51. data/examples/sinatra/assets/cable.js +0 -584
  52. data/examples/sinatra/assets/reset.css +0 -223
  53. data/examples/sinatra/bin/anycable-go +0 -0
  54. data/examples/sinatra/chat.rb +0 -39
  55. data/examples/sinatra/config.ru +0 -28
  56. data/examples/sinatra/views/index.slim +0 -8
  57. data/examples/sinatra/views/layout.slim +0 -15
  58. data/examples/sinatra/views/login.slim +0 -8
  59. data/examples/sinatra/views/resetcss.slim +0 -224
  60. data/examples/sinatra/views/room.slim +0 -68
  61. data/litecable.gemspec +0 -33
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Coders # :nodoc:
4
5
  require "lite_cable/coders/raw"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "json"
3
4
 
4
5
  module LiteCable
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Coders
4
5
  # No-op coder
@@ -8,7 +9,7 @@ module LiteCable
8
9
  val
9
10
  end
10
11
 
11
- alias encode decode
12
+ alias_method :encode, :decode
12
13
  end
13
14
  end
14
15
  end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
- require "anyway"
3
- require 'logger'
2
+
3
+ require "anyway_config"
4
+ require "logger"
4
5
 
5
6
  module LiteCable
6
- # Anycable configuration
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
- coder: Coders::JSON,
15
- identifier_coder: Coders::Raw,
16
- log_level: Logger::INFO
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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Connection # :nodoc:
4
5
  require "lite_cable/connection/authorization"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Connection
4
5
  class UnauthorizedError < StandardError; 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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Connection
4
5
  # Manage the connection streams
@@ -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" then add(data["identifier"])
59
+ when "subscribe" then add(data["identifier"])
56
60
  when "unsubscribe" then remove(data["identifier"])
57
- when "message" then perform_action(data["identifier"], data["data"])
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
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  INTERNAL = {
4
5
  message_types: {
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'logger'
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(STDERR).tap do |logger|
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
@@ -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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
4
  module Server
4
5
  module ClientSocket # :nodoc:
@@ -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
- begin
73
- h.call(data)
74
- rescue => e
75
- log(:error, "Socket receive failed: #{e}")
76
- @error_handlers.each { |eh| eh.call(e, data) }
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
- if socket.respond_to?(:recvfrom)
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
- .add_subscriber(broadcasting, self, channel)
10
+ .add_subscriber(broadcasting, self, channel)
10
11
  end
11
12
 
12
13
  def unsubscribe(channel, broadcasting)
13
14
  LiteCable::Server.subscribers_map
14
- .remove_subscriber(broadcasting, self, channel)
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
- { type: LiteCable::INTERNAL[:message_types][:ping], message: time }.to_json
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, { 'Content-Type' => 'text/plain' }, ['Not Found']] unless
15
- env["HTTP_UPGRADE"] == 'websocket'
15
+ return [404, {"Content-Type" => "text/plain"}, ["Not Found"]] unless
16
+ env["HTTP_UPGRADE"] == "websocket"
16
17
 
17
- raise HijackNotAvailable unless env['rack.hijack']
18
+ raise HijackNotAvailable unless env["rack.hijack"]
18
19
 
19
- env['rack.hijack'].call
20
+ env["rack.hijack"].call
20
21
  handshake = send_handshake(env)
21
22
 
22
- socket = ClientSocket::Base.new env, env['rack.hijack_io'], handshake.version
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['rack.hijack_io'].write handshake.to_s
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
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module LiteCable
3
- VERSION = "0.4.1"
4
+ VERSION = "0.7.1"
4
5
  end
@@ -1,2 +1,3 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "lite_cable"
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.1
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: 2017-02-04 00:00:00.000000000 Z
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: 0.5.0
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: 0.5.0
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.0.0
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.0.0
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.0
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.0
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: 0.3.8
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
- - litecable.gemspec
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: '0'
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
- rubyforge_project:
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