anycable 0.5.2 → 0.6.0.rc1

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +25 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +31 -0
  4. data/.rubocop.yml +22 -22
  5. data/.travis.yml +1 -2
  6. data/CHANGELOG.md +92 -0
  7. data/README.md +10 -58
  8. data/anycable.gemspec +10 -7
  9. data/benchmarks/.gitignore +1 -0
  10. data/benchmarks/2018-10-27.md +181 -0
  11. data/benchmarks/assets/2018-10-27-action-cable-rss.png +0 -0
  12. data/benchmarks/assets/2018-10-27-action-cable-rtt.png +0 -0
  13. data/benchmarks/assets/2018-10-27-anycable-rss.png +0 -0
  14. data/benchmarks/assets/2018-10-27-anycable-rtt.png +0 -0
  15. data/benchmarks/assets/2018-10-27-async-rss.png +0 -0
  16. data/benchmarks/assets/2018-10-27-async-rtt.png +0 -0
  17. data/benchmarks/assets/2018-10-27-falcon-cable-rss.png +0 -0
  18. data/benchmarks/assets/2018-10-27-falcon-cable-rtt.png +0 -0
  19. data/benchmarks/assets/2018-10-27-iodine-cable-rss.png +0 -0
  20. data/benchmarks/assets/2018-10-27-iodine-cable-rtt.png +0 -0
  21. data/benchmarks/assets/2018-10-27-plezi-rss.png +0 -0
  22. data/benchmarks/assets/2018-10-27-plezi-rtt.png +0 -0
  23. data/benchmarks/bench.png +0 -0
  24. data/benchmarks/benchmark.yml +12 -10
  25. data/benchmarks/hosts +2 -2
  26. data/benchmarks/rtt_plot.py +74 -0
  27. data/benchmarks/rtt_plot_test.py +16 -0
  28. data/benchmarks/servers.yml +25 -3
  29. data/bin/anycable +13 -0
  30. data/etc/bug_report_template.rb +1 -1
  31. data/lib/anycable.rb +53 -16
  32. data/lib/anycable/broadcast_adapters.rb +33 -0
  33. data/lib/anycable/broadcast_adapters/redis.rb +42 -0
  34. data/lib/anycable/cli.rb +323 -0
  35. data/lib/anycable/config.rb +91 -17
  36. data/lib/anycable/exceptions_handling.rb +31 -0
  37. data/lib/anycable/handler/capture_exceptions.rb +39 -0
  38. data/lib/anycable/health_server.rb +53 -31
  39. data/lib/anycable/middleware.rb +19 -0
  40. data/lib/anycable/middleware_chain.rb +58 -0
  41. data/lib/anycable/rpc/rpc_pb.rb +1 -1
  42. data/lib/anycable/rpc/rpc_services_pb.rb +1 -1
  43. data/lib/anycable/rpc_handler.rb +28 -26
  44. data/lib/anycable/server.rb +114 -39
  45. data/lib/anycable/socket.rb +1 -1
  46. data/lib/anycable/version.rb +2 -2
  47. metadata +45 -26
  48. data/lib/anycable/handler/exceptions_handling.rb +0 -43
  49. data/lib/anycable/pubsub.rb +0 -26
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anycable
3
+ module AnyCable
4
4
  # Socket mock to be used with application connection
5
5
  class Socket
6
6
  attr_reader :transmissions, :env
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anycable
4
- VERSION = "0.5.2"
3
+ module AnyCable
4
+ VERSION = "0.6.0.rc1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anycable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-06 00:00:00.000000000 Z
11
+ date: 2018-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anyway_config
@@ -16,48 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.1.1
19
+ version: 1.4.1
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.1'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.1.1
26
+ version: 1.4.1
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: grpc
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '1.6'
33
+ version: '1.15'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '1.6'
40
+ version: '1.15'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: redis
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: '3.2'
54
- type: :runtime
47
+ version: '4.0'
48
+ type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - ">="
59
53
  - !ruby/object:Gem::Version
60
- version: '3.2'
54
+ version: '4.0'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: bundler
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,14 +114,14 @@ dependencies:
120
114
  requirements:
121
115
  - - "~>"
122
116
  - !ruby/object:Gem::Version
123
- version: 0.58.0
117
+ version: 0.60.0
124
118
  type: :development
125
119
  prerelease: false
126
120
  version_requirements: !ruby/object:Gem::Requirement
127
121
  requirements:
128
122
  - - "~>"
129
123
  - !ruby/object:Gem::Version
130
- version: 0.58.0
124
+ version: 0.60.0
131
125
  - !ruby/object:Gem::Dependency
132
126
  name: simplecov
133
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,13 +150,16 @@ dependencies:
156
150
  - - ">="
157
151
  - !ruby/object:Gem::Version
158
152
  version: '0'
159
- description: Polyglot replacement for ActionCable server
153
+ description: AnyCable is a polyglot replacement for ActionCable-compatible servers
160
154
  email:
161
155
  - dementiev.vm@gmail.com
162
- executables: []
156
+ executables:
157
+ - anycable
163
158
  extensions: []
164
159
  extra_rdoc_files: []
165
160
  files:
161
+ - ".github/ISSUE_TEMPLATE.md"
162
+ - ".github/PULL_REQUEST_TEMPLATE.md"
166
163
  - ".gitignore"
167
164
  - ".hound.yml"
168
165
  - ".rubocop.yml"
@@ -189,20 +186,42 @@ files:
189
186
  - benchmarks/2017-02-12.md
190
187
  - benchmarks/2018-03-04.md
191
188
  - benchmarks/2018-05-27-rpc-bench.md
189
+ - benchmarks/2018-10-27.md
192
190
  - benchmarks/HowTo.md
193
191
  - benchmarks/ansible.cfg
192
+ - benchmarks/assets/2018-10-27-action-cable-rss.png
193
+ - benchmarks/assets/2018-10-27-action-cable-rtt.png
194
+ - benchmarks/assets/2018-10-27-anycable-rss.png
195
+ - benchmarks/assets/2018-10-27-anycable-rtt.png
196
+ - benchmarks/assets/2018-10-27-async-rss.png
197
+ - benchmarks/assets/2018-10-27-async-rtt.png
198
+ - benchmarks/assets/2018-10-27-falcon-cable-rss.png
199
+ - benchmarks/assets/2018-10-27-falcon-cable-rtt.png
200
+ - benchmarks/assets/2018-10-27-iodine-cable-rss.png
201
+ - benchmarks/assets/2018-10-27-iodine-cable-rtt.png
202
+ - benchmarks/assets/2018-10-27-plezi-rss.png
203
+ - benchmarks/assets/2018-10-27-plezi-rtt.png
204
+ - benchmarks/bench.png
194
205
  - benchmarks/benchmark.yml
195
206
  - benchmarks/hosts
207
+ - benchmarks/rtt_plot.py
208
+ - benchmarks/rtt_plot_test.py
196
209
  - benchmarks/servers.yml
210
+ - bin/anycable
197
211
  - bin/console
198
212
  - bin/setup
199
213
  - circle.yml
200
214
  - etc/bug_report_template.rb
201
215
  - lib/anycable.rb
216
+ - lib/anycable/broadcast_adapters.rb
217
+ - lib/anycable/broadcast_adapters/redis.rb
218
+ - lib/anycable/cli.rb
202
219
  - lib/anycable/config.rb
203
- - lib/anycable/handler/exceptions_handling.rb
220
+ - lib/anycable/exceptions_handling.rb
221
+ - lib/anycable/handler/capture_exceptions.rb
204
222
  - lib/anycable/health_server.rb
205
- - lib/anycable/pubsub.rb
223
+ - lib/anycable/middleware.rb
224
+ - lib/anycable/middleware_chain.rb
206
225
  - lib/anycable/rpc/rpc_pb.rb
207
226
  - lib/anycable/rpc/rpc_services_pb.rb
208
227
  - lib/anycable/rpc_handler.rb
@@ -222,16 +241,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
241
  requirements:
223
242
  - - ">="
224
243
  - !ruby/object:Gem::Version
225
- version: '0'
244
+ version: 2.4.0
226
245
  required_rubygems_version: !ruby/object:Gem::Requirement
227
246
  requirements:
228
- - - ">="
247
+ - - ">"
229
248
  - !ruby/object:Gem::Version
230
- version: '0'
249
+ version: 1.3.1
231
250
  requirements: []
232
251
  rubyforge_project:
233
- rubygems_version: 2.7.6
252
+ rubygems_version: 2.7.7
234
253
  signing_key:
235
254
  specification_version: 4
236
- summary: Polyglot replacement for ActionCable server
255
+ summary: AnyCable is a polyglot replacement for ActionCable-compatible servers
237
256
  test_files: []
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Anycable
4
- module Handler # :nodoc:
5
- # Handle app-level errors
6
- module ExceptionsHandling
7
- def connect(*)
8
- super
9
- rescue StandardError => ex
10
- handle_exception(ex)
11
- Anycable::ConnectionResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
12
- end
13
-
14
- def disconnect(*)
15
- super
16
- rescue StandardError => ex
17
- handle_exception(ex)
18
- Anycable::DisconnectResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
19
- end
20
-
21
- def command(*)
22
- super
23
- rescue StandardError => ex
24
- handle_exception(ex)
25
- Anycable::CommandResponse.new(status: Anycable::Status::ERROR, error_msg: ex.message)
26
- end
27
-
28
- def handle_exception(ex)
29
- Anycable.error_handlers.each do |handler|
30
- begin
31
- handler.call(ex)
32
- rescue StandardError => ex
33
- Anycable.logger.error "!!! ERROR HANDLER THREW AN ERROR !!!"
34
- Anycable.logger.error ex
35
- Anycable.logger.error ex.backtrace.join("\n") unless ex.backtrace.nil?
36
- end
37
- end
38
- end
39
- end
40
-
41
- Anycable.error_handlers << proc { |e| Anycable.logger.error(e.message) }
42
- end
43
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "redis"
4
- require "json"
5
-
6
- module Anycable
7
- # PubSub for broadcasting
8
- class PubSub
9
- attr_reader :redis_conn
10
-
11
- def initialize
12
- redis_config = { url: Anycable.config.redis_url }
13
- unless Anycable.config.redis_sentinels.empty?
14
- redis_config[:sentinels] = Anycable.config.redis_sentinels
15
- end
16
- @redis_conn = Redis.new(redis_config)
17
- end
18
-
19
- def broadcast(channel, payload)
20
- redis_conn.publish(
21
- Anycable.config.redis_channel,
22
- { stream: channel, data: payload }.to_json
23
- )
24
- end
25
- end
26
- end