anycable-core 1.1.0.pre1

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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +84 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +78 -0
  5. data/bin/anycable +13 -0
  6. data/bin/anycabled +30 -0
  7. data/bin/console +7 -0
  8. data/bin/setup +6 -0
  9. data/lib/anycable.rb +114 -0
  10. data/lib/anycable/broadcast_adapters.rb +34 -0
  11. data/lib/anycable/broadcast_adapters/base.rb +29 -0
  12. data/lib/anycable/broadcast_adapters/http.rb +131 -0
  13. data/lib/anycable/broadcast_adapters/redis.rb +46 -0
  14. data/lib/anycable/cli.rb +319 -0
  15. data/lib/anycable/config.rb +127 -0
  16. data/lib/anycable/exceptions_handling.rb +35 -0
  17. data/lib/anycable/grpc.rb +30 -0
  18. data/lib/anycable/grpc/check_version.rb +33 -0
  19. data/lib/anycable/grpc/config.rb +53 -0
  20. data/lib/anycable/grpc/handler.rb +25 -0
  21. data/lib/anycable/grpc/rpc_services_pb.rb +24 -0
  22. data/lib/anycable/grpc/server.rb +103 -0
  23. data/lib/anycable/health_server.rb +73 -0
  24. data/lib/anycable/middleware.rb +10 -0
  25. data/lib/anycable/middleware_chain.rb +74 -0
  26. data/lib/anycable/middlewares/exceptions.rb +35 -0
  27. data/lib/anycable/protos/rpc_pb.rb +74 -0
  28. data/lib/anycable/rpc.rb +91 -0
  29. data/lib/anycable/rpc/handler.rb +50 -0
  30. data/lib/anycable/rpc/handlers/command.rb +36 -0
  31. data/lib/anycable/rpc/handlers/connect.rb +33 -0
  32. data/lib/anycable/rpc/handlers/disconnect.rb +27 -0
  33. data/lib/anycable/rspec.rb +4 -0
  34. data/lib/anycable/rspec/rpc_command_context.rb +21 -0
  35. data/lib/anycable/socket.rb +169 -0
  36. data/lib/anycable/version.rb +5 -0
  37. data/sig/anycable.rbs +37 -0
  38. data/sig/anycable/broadcast_adapters.rbs +5 -0
  39. data/sig/anycable/cli.rbs +40 -0
  40. data/sig/anycable/config.rbs +46 -0
  41. data/sig/anycable/exceptions_handling.rbs +14 -0
  42. data/sig/anycable/health_server.rbs +21 -0
  43. data/sig/anycable/middleware.rbs +5 -0
  44. data/sig/anycable/middleware_chain.rbs +22 -0
  45. data/sig/anycable/rpc.rbs +143 -0
  46. data/sig/anycable/socket.rbs +40 -0
  47. data/sig/anycable/version.rbs +3 -0
  48. metadata +237 -0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AnyCable
4
+ VERSION = "1.1.0.pre1"
5
+ end
data/sig/anycable.rbs ADDED
@@ -0,0 +1,37 @@
1
+ module AnyCable
2
+ interface _Server
3
+ def start: () -> void
4
+ def wait_till_terminated: () -> void
5
+ def stop: () -> void
6
+ def running?: () -> bool
7
+ def stopped?: () -> bool
8
+ end
9
+
10
+ interface _Connection
11
+ def handle_open: () -> void
12
+ def handle_close: () -> void
13
+ def handle_channel_command: (String identifier, String command, String data) -> void
14
+ def identifiers_json: () -> String
15
+ end
16
+
17
+ type rackEnv = Hash[String, untyped]
18
+
19
+ type serverBuilder = ^(Config) -> _Server
20
+
21
+ attr_accessor self.connection_factory: ^(Socket, ?identifiers: String, ?subscriptions: Array[String]) -> _Connection
22
+ attr_accessor self.server_builder: serverBuilder
23
+ attr_writer self.logger: Logger
24
+ attr_writer self.rpc_handler: RPC::Handler
25
+ attr_accessor self.middleware: MiddlewareChain
26
+
27
+ def self.logger: () -> Logger
28
+ def self.config: () -> Config
29
+ def self.configure: () { (Config) -> void } -> void
30
+ def self.capture_exception: () { (StandardError) -> void } -> void
31
+ def self.configure_server: () { () -> void } -> void
32
+ def self.server_callbacks: () -> Array[^() -> void]
33
+ def self.broadcast_adapter: () -> _BroadcastAdapter
34
+ def self.broadcast_adapter=: (untyped adapter) -> void
35
+ def self.broadcast: (String channel, String payload) -> void
36
+ def self.rpc_handler: () -> RPC::Handler
37
+ end
@@ -0,0 +1,5 @@
1
+ module AnyCable
2
+ module BroadcastAdapters
3
+ def self?.lookup_adapter: (untyped args) -> untyped
4
+ end
5
+ end
@@ -0,0 +1,40 @@
1
+ module AnyCable
2
+ class CLI
3
+ APP_CANDIDATES: Array[String]
4
+ WAIT_PROCESS: Integer
5
+ attr_reader server: _Server
6
+ attr_reader health_server: HealthServer
7
+ attr_reader embedded: bool
8
+
9
+ alias embedded? embedded
10
+
11
+ def initialize: (?embedded: bool embedded) -> void
12
+ def run: (?untyped args) -> void
13
+ def shutdown: () -> void
14
+
15
+ private
16
+
17
+ attr_reader boot_file: String?
18
+ attr_reader server_command: String?
19
+
20
+ def config: () -> Config
21
+ def logger: () -> Logger
22
+ def at_stop: () { () -> void } -> Array[^() -> void]
23
+ def wait_till_terminated: () -> void
24
+ def setup_signals: () -> void
25
+ def print_version!: () -> void
26
+ def boot_app!: () -> void
27
+ def try_detect_app: () -> String?
28
+ def configure_server!: () -> void
29
+ def start_health_server!: () -> void
30
+ def start_pubsub!: () -> void
31
+ def run_custom_server_command!: () -> void
32
+ def log_errors!: () -> void
33
+ def verify_connection_factory!: () -> void
34
+ def verify_server_builder!: () -> void
35
+ def parse_gem_options!: (untyped args) -> void
36
+ def parse_cli_options!: (untyped args) -> void
37
+ def build_cli_parser: () -> untyped
38
+ def usage: () -> String
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ module AnyCable
2
+ interface _Config
3
+ def broadcast_adapter: () -> Symbol
4
+ def broadcast_adapter=: (Symbol) -> void
5
+ def redis_url: () -> String
6
+ def redis_url=: (String) -> void
7
+ def redis_sentinels: () -> Array[String | Hash[untyped, untyped]]?
8
+ def redis_sentinels=: (Array[String]) -> void
9
+ def redis_channel: () -> String
10
+ def redis_channel=: (String) -> void
11
+ def http_broadcast_url: () -> String
12
+ def http_broadcast_url=: (String) -> void
13
+ def http_broadcast_secret: () -> String?
14
+ def http_broadcast_secret=: (String) -> void
15
+ def log_file: () -> String?
16
+ def log_file=: (String) -> void
17
+ def log_level: () -> String
18
+ def log_level=: (String) -> void
19
+ def debug: () -> bool
20
+ def debug=: (bool) -> void
21
+ def http_health_port: () -> Integer?
22
+ def http_health_port=: (Integer) -> void
23
+ def http_health_path: () -> String
24
+ def http_health_path=: (String) -> void
25
+ def version_check_enabled: () -> bool
26
+ def version_check_enabled=: (bool) -> void
27
+ end
28
+
29
+ class Config < Anyway::Config
30
+ def self.usage: (String txt) -> void
31
+ def self.usages: () -> Array[String]
32
+
33
+ include _Config
34
+
35
+ alias debug? debug
36
+ alias version_check_enabled? version_check_enabled
37
+
38
+ def http_health_port_provided?: () -> bool
39
+ def to_redis_params: () -> { url: String, sentinels: Array[untyped]?, ssl_params: Hash[Symbol, untyped]? }
40
+ def to_http_health_params: () -> { port: Integer?, path: String }
41
+
42
+ private
43
+
44
+ def parse_sentinel: ((String | Hash[untyped, untyped]) sentinel) -> Hash[Symbol, untyped]
45
+ end
46
+ end
@@ -0,0 +1,14 @@
1
+ module AnyCable
2
+ module ExceptionsHandling
3
+ def self.add_handler: (untyped block) -> untyped
4
+
5
+ alias self.<< self.add_handler
6
+
7
+ def self.notify: (untyped exp, untyped method_name, untyped message) -> untyped
8
+
9
+ private
10
+
11
+ def self.procify: (untyped block) -> untyped
12
+ def self.handlers: () -> untyped
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module AnyCable
2
+ class HealthServer
3
+ SUCCESS_RESPONSE: Array[Integer | String]
4
+ FAILURE_RESPONSE: Array[Integer | String]
5
+
6
+ attr_reader server: _Server
7
+ attr_reader port: Integer
8
+ attr_reader path: String
9
+ attr_reader http_server: untyped
10
+
11
+ def initialize: (_Server server, port: Integer port, ?logger: Logger logger, ?path: String path) -> void
12
+ def start: () -> void
13
+ def stop: () -> void
14
+ def running?: () -> bool
15
+
16
+ private
17
+
18
+ def logger: () -> Logger
19
+ def build_server: () -> untyped
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ module AnyCable
2
+ class Middleware
3
+ def call: (Symbol, rpcRequest) { (Symbol, rpcRequest) -> rpcResponse } -> rpcResponse
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ module AnyCable
2
+ class MiddlewareChain
3
+ type rpcHandlerBlock = ^(Symbol, rpcRequest) -> rpcResponse
4
+
5
+ def initialize: () -> void
6
+ def use: (singleton(Middleware) | Middleware middleware) -> void
7
+ def freeze: () -> void
8
+ def to_a: () -> Array[Middleware]
9
+ def call: (Symbol, rpcRequest) { (Symbol, rpcRequest) -> rpcResponse } -> rpcResponse
10
+
11
+ private
12
+
13
+ def execute_next_middleware: (Integer ind, Symbol, rpcRequest, rpcHandlerBlock block) -> rpcResponse
14
+
15
+ attr_reader mu: untyped
16
+ attr_reader registry: Array[Middleware]
17
+
18
+ def sync: () { () -> untyped } -> untyped
19
+ def check_frozen!: () -> untyped
20
+ def build_middleware: (untyped middleware) -> untyped
21
+ end
22
+ end
@@ -0,0 +1,143 @@
1
+ module AnyCable
2
+ PROTO_VERSION: ::String
3
+ SESSION_KEY: ::String
4
+
5
+ type rpcStatus = 0 | 1 | 2
6
+ type protoMap = Hash[String, String]
7
+
8
+ interface _WithEnvState
9
+ def cstate: () -> protoMap?
10
+ def cstate=: (protoMap) -> void
11
+ def istate: () -> protoMap?
12
+ def istate=: (protoMap) -> void
13
+ end
14
+
15
+ class Env
16
+ include _WithEnvState
17
+
18
+ attr_accessor url: String
19
+ attr_accessor headers: protoMap
20
+
21
+ def initialize: (?url: String, ?headers: protoMap, ?cstate: protoMap, ?istate: protoMap) -> void
22
+ end
23
+
24
+ class EnvResponse
25
+ include _WithEnvState
26
+
27
+ def initialize: (?cstate: protoMap, ?istate: protoMap) -> void
28
+ end
29
+
30
+ interface _ProtoMessage
31
+ def initialize: (**untyped) -> void
32
+ end
33
+
34
+ interface _WithEnv
35
+ def env: () -> Env
36
+ def env=: (Env) -> void
37
+ end
38
+
39
+ module WithConnectionState : _WithEnv, _ProtoMessage
40
+ def initialize: (?session: untyped? session, **untyped other) -> untyped
41
+
42
+ def session=: (untyped val) -> untyped
43
+ def session: () -> untyped
44
+
45
+ def cstate: () -> protoMap?
46
+ def cstate=: (protoMap val) -> protoMap
47
+
48
+ def istate: () -> protoMap?
49
+ def istate=: (protoMap val) -> protoMap
50
+ end
51
+
52
+ module StatusPredicates
53
+ def status: () -> rpcStatus
54
+ def success?: () -> bool
55
+ def failure?: () -> bool
56
+ def error?: () -> bool
57
+ end
58
+
59
+ class ConnectionRequest
60
+ include _WithEnv
61
+
62
+ def initialize: (?env: Env) -> void
63
+ end
64
+
65
+ class ConnectionResponse
66
+ include StatusPredicates
67
+
68
+ attr_accessor status: rpcStatus
69
+ attr_accessor identifiers: String
70
+ attr_accessor transmissions: Array[String]
71
+ attr_accessor error_msg: String?
72
+ attr_accessor env: EnvResponse
73
+
74
+ def initialize: (
75
+ status: rpcStatus,
76
+ ?identifiers: String,
77
+ ?transmissions: Array[String],
78
+ ?error_msg: String,
79
+ ?env: EnvResponse
80
+ ) -> void
81
+ end
82
+
83
+ class CommandMessage
84
+ include _WithEnv
85
+
86
+ attr_accessor command: String
87
+ attr_accessor identifier: String
88
+ attr_accessor connection_identifiers: String
89
+ attr_accessor data: String
90
+
91
+ def initialize: (
92
+ command: String,
93
+ identifier: String,
94
+ ?connection_identifiers: String,
95
+ ?env: Env
96
+ ) -> void
97
+ end
98
+
99
+ class CommandResponse
100
+ include StatusPredicates
101
+
102
+ attr_accessor status: rpcStatus
103
+ attr_accessor disconnect: bool
104
+ attr_accessor stop_streams: bool
105
+ attr_accessor streams: Array[String]
106
+ attr_accessor transmissions: Array[String]
107
+ attr_accessor error_msg: String?
108
+ attr_accessor env: EnvResponse
109
+ attr_accessor stopped_streams: Array[String]
110
+
111
+ def initialize: (
112
+ status: rpcStatus,
113
+ ?disconnect: bool,
114
+ ?stop_streams: bool,
115
+ ?streams: Array[String],
116
+ ?stopped_streams: Array[String],
117
+ ?transmissions: Array[String],
118
+ ?error_msg: String,
119
+ ?env: EnvResponse
120
+ ) -> void
121
+ end
122
+
123
+ class DisconnectRequest
124
+ include _WithEnv
125
+
126
+ attr_accessor identifiers: String
127
+ attr_accessor subscriptions: Array[String]
128
+
129
+ def initialize: (identifiers: String, ?subscriptions: Array[String], ?env: Env) -> void
130
+ end
131
+
132
+ class DisconnectResponse
133
+ include StatusPredicates
134
+
135
+ attr_accessor status: rpcStatus
136
+ attr_accessor error_msg: String?
137
+
138
+ def initialize: (status: rpcStatus, ?error_msg: String) -> void
139
+ end
140
+
141
+ type rpcRequest = ConnectionRequest | DisconnectRequest | CommandMessage
142
+ type rpcResponse = ConnectionResponse | DisconnectResponse | CommandResponse
143
+ end
@@ -0,0 +1,40 @@
1
+ module AnyCable
2
+ class Socket
3
+ class State
4
+ attr_reader dirty_keys: Array[String]?
5
+ attr_reader source: protoMap
6
+
7
+ def initialize: (protoMap) -> void
8
+ def read: (String key) -> untyped
9
+ def write: (String key, String val) -> void
10
+ def changed_fields: () -> protoMap?
11
+
12
+ alias [] read
13
+ alias []= write
14
+ end
15
+
16
+ attr_reader transmissions: Array[String]
17
+ attr_reader request_env: Env
18
+
19
+ def initialize: (env: Env) -> void
20
+ def transmit: (String) -> void
21
+ def subscribe: (String, String) -> void
22
+ def unsubscribe: (String, String) -> void
23
+ def unsubscribe_from_all: (String) -> void
24
+ def streams: () -> { start: Array[String], stop: Array[String] }
25
+ def close: () -> void
26
+ def closed?: () -> bool
27
+ def stop_streams?: () -> bool
28
+ def session: () -> untyped
29
+ def session=: (untyped val) -> untyped
30
+ def env: () -> Hash[String, untyped]
31
+ def cstate: () -> State
32
+ def istate: () -> State
33
+
34
+ private
35
+
36
+ def build_rack_env: () -> rackEnv
37
+ def base_rack_env: () -> rackEnv
38
+ def build_headers: (untyped headers) -> Hash[String, String]
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module AnyCable
2
+ VERSION: String
3
+ end
metadata ADDED
@@ -0,0 +1,237 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: anycable-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0.pre1
5
+ platform: ruby
6
+ authors:
7
+ - palkan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: anyway_config
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: google-protobuf
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.13'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: redis
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '13.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '3.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '3.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.8'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.8'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webrick
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: steep
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: AnyCable core RPC implementation not depenending on a particular server
154
+ type (e.g., gRPC or whatever)
155
+ email:
156
+ - dementiev.vm@gmail.com
157
+ executables:
158
+ - anycable
159
+ - anycabled
160
+ extensions: []
161
+ extra_rdoc_files: []
162
+ files:
163
+ - CHANGELOG.md
164
+ - MIT-LICENSE
165
+ - README.md
166
+ - bin/anycable
167
+ - bin/anycabled
168
+ - bin/console
169
+ - bin/setup
170
+ - lib/anycable.rb
171
+ - lib/anycable/broadcast_adapters.rb
172
+ - lib/anycable/broadcast_adapters/base.rb
173
+ - lib/anycable/broadcast_adapters/http.rb
174
+ - lib/anycable/broadcast_adapters/redis.rb
175
+ - lib/anycable/cli.rb
176
+ - lib/anycable/config.rb
177
+ - lib/anycable/exceptions_handling.rb
178
+ - lib/anycable/grpc.rb
179
+ - lib/anycable/grpc/check_version.rb
180
+ - lib/anycable/grpc/config.rb
181
+ - lib/anycable/grpc/handler.rb
182
+ - lib/anycable/grpc/rpc_services_pb.rb
183
+ - lib/anycable/grpc/server.rb
184
+ - lib/anycable/health_server.rb
185
+ - lib/anycable/middleware.rb
186
+ - lib/anycable/middleware_chain.rb
187
+ - lib/anycable/middlewares/exceptions.rb
188
+ - lib/anycable/protos/rpc_pb.rb
189
+ - lib/anycable/rpc.rb
190
+ - lib/anycable/rpc/handler.rb
191
+ - lib/anycable/rpc/handlers/command.rb
192
+ - lib/anycable/rpc/handlers/connect.rb
193
+ - lib/anycable/rpc/handlers/disconnect.rb
194
+ - lib/anycable/rspec.rb
195
+ - lib/anycable/rspec/rpc_command_context.rb
196
+ - lib/anycable/socket.rb
197
+ - lib/anycable/version.rb
198
+ - sig/anycable.rbs
199
+ - sig/anycable/broadcast_adapters.rbs
200
+ - sig/anycable/cli.rbs
201
+ - sig/anycable/config.rbs
202
+ - sig/anycable/exceptions_handling.rbs
203
+ - sig/anycable/health_server.rbs
204
+ - sig/anycable/middleware.rbs
205
+ - sig/anycable/middleware_chain.rbs
206
+ - sig/anycable/rpc.rbs
207
+ - sig/anycable/socket.rbs
208
+ - sig/anycable/version.rbs
209
+ homepage: http://github.com/anycable/anycable
210
+ licenses:
211
+ - MIT
212
+ metadata:
213
+ bug_tracker_uri: http://github.com/anycable/anycable/issues
214
+ changelog_uri: https://github.com/anycable/anycable/blob/master/CHANGELOG.md
215
+ documentation_uri: https://docs.anycable.io/
216
+ homepage_uri: https://anycable.io/
217
+ source_code_uri: http://github.com/anycable/anycable
218
+ post_install_message:
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: 2.6.0
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">"
230
+ - !ruby/object:Gem::Version
231
+ version: 1.3.1
232
+ requirements: []
233
+ rubygems_version: 3.2.15
234
+ signing_key:
235
+ specification_version: 4
236
+ summary: AnyCable core RPC implementation
237
+ test_files: []