anycable 1.0.2 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd11b4e0403da1e162132375055bc2815c48ee57c3554a04ed72683d91fb0fde
4
- data.tar.gz: '0568d54349b5e0a452f00119678b37964bb8c0102f512010e015c0b836a2ef6f'
3
+ metadata.gz: 42e49d876d5678d5ed8317b68e7adc99f3d8132839e8222ed2c17eacec2f37c8
4
+ data.tar.gz: 3483a826915249135874620e736badb75e3a34b5b05f6a99b946b25d86423fa7
5
5
  SHA512:
6
- metadata.gz: 22ded17aa347fe2c26d0d0aa6ceeb4958244a0d82a9d50f358f0c6c0b8433004ea71f62810bd757e9cf11c896596896c31859e6af62716b218f61f72b6d4d3fe
7
- data.tar.gz: 3f52eade080b1de1ecdc39624a87b6840239392ebcf30bada85e44706cbd7c819cecc566a1eb5b7e8fa9cff5c567ab5929c3ec2189c4fb300e94357cbbb4ca42
6
+ metadata.gz: 99914cf8acc4861257e9a028fe94f430b36b2009985008f46dd73ecf38f8d028b358c8316f7359472669d766243d15f76ee2760fd2269a525e8931949d22ceb9
7
+ data.tar.gz: 4ebe3ebaf11b9fddad7c34d86a4069eebbbe914f8aaf001ea86fdcb3f0c2fc9bd7bc5cbf9448e9f8ff13a597886207af386d814a1c1071db01f87f641079ef8f
data/CHANGELOG.md CHANGED
@@ -2,7 +2,40 @@
2
2
 
3
3
  ## master
4
4
 
5
- ## 1.0.2
5
+ ## 1.1.1 (2021-06-05)
6
+
7
+ - Fixed error message when RPC implementation is missing. ([@palkan][])
8
+
9
+ We haven't extracted `anycable-grpc` yet.
10
+
11
+ ## 1.1.0 🚸 (2021-06-01)
12
+
13
+ - No changes since 1.1.0.rc1.
14
+
15
+ ## 1.1.0.rc1 (2021-05-12)
16
+
17
+ - **BREAKING** Move middlewares from gRPC interceptors to custom implementation. ([@palkan][])
18
+
19
+ That allowed us to have _real_ middlewares with ability to modify responses, intercept exceptions, etc.
20
+ The API changed a bit:
21
+
22
+ ```diff
23
+ class SomeMiddleware < AnyCable::Middleware
24
+ - def call(request, rpc_call, rpc_handler)
25
+ + def call(rpc_method_name, request, metadata)
26
+ yield
27
+ end
28
+ end
29
+ ```
30
+
31
+ - **Ruby >= 2.6** is required.
32
+ - **Anyway Config >= 2.1** is required.
33
+
34
+ ## 1.0.3 (2021-03-05)
35
+
36
+ - Ruby 3.0 compatibility. ([@palkan][])
37
+
38
+ ## 1.0.2 (2021-01-05)
6
39
 
7
40
  - Handle TLS Redis connections by using VERIFY_NONE mode. ([@palkan][])
8
41
 
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
- [![GitPitch](https://gitpitch.com/assets/badge.svg)](https://gitpitch.com/anycable/anycable/master?grs=github)
2
1
  [![Gem Version](https://badge.fury.io/rb/anycable.svg)](https://rubygems.org/gems/anycable)
3
2
  [![Build](https://github.com/anycable/anycable/workflows/Build/badge.svg)](https://github.com/anycable/anycable/actions)
4
3
  [![Gitter](https://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg)](https://gitter.im/anycable/Lobby)
@@ -13,14 +12,12 @@ AnyCable allows you to use any WebSocket server (written in any language) as a r
13
12
 
14
13
  AnyCable uses the same protocol as ActionCable, so you can use its [JavaScript client](https://www.npmjs.com/package/actioncable) without any monkey-patching.
15
14
 
16
- **Important** This is a readme for the upcoming v1.0 release. For v0.6.x see the readme from the [0-6-stable](https://github.com/anycable/anycable/tree/0-6-stable) branch.
17
-
18
15
  <a href="https://evilmartians.com/">
19
16
  <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg" alt="Sponsored by Evil Martians" width="236" height="54"></a>
20
17
 
21
18
  ## Requirements
22
19
 
23
- - Ruby >= 2.5
20
+ - Ruby >= 2.6
24
21
  - Redis (for broadcasting **in production**, [discuss other options](https://github.com/anycable/anycable/issues/2) with us!)
25
22
 
26
23
  ## Usage
metadata CHANGED
@@ -1,166 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anycable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-05 00:00:00.000000000 Z
11
+ date: 2021-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: anyway_config
14
+ name: anycable-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.4.2
19
+ version: 1.1.1
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: 1.4.2
26
+ version: 1.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: grpc
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.17'
33
+ version: '1.37'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.17'
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'
40
+ version: '1.37'
125
41
  description: AnyCable is a polyglot replacement for ActionCable-compatible servers
126
42
  email:
127
43
  - dementiev.vm@gmail.com
128
- executables:
129
- - anycable
130
- - anycabled
44
+ executables: []
131
45
  extensions: []
132
46
  extra_rdoc_files: []
133
47
  files:
134
48
  - CHANGELOG.md
135
49
  - MIT-LICENSE
136
50
  - README.md
137
- - bin/anycable
138
- - bin/anycabled
139
- - bin/console
140
- - bin/setup
141
- - lib/anycable.rb
142
- - lib/anycable/broadcast_adapters.rb
143
- - lib/anycable/broadcast_adapters/base.rb
144
- - lib/anycable/broadcast_adapters/http.rb
145
- - lib/anycable/broadcast_adapters/redis.rb
146
- - lib/anycable/cli.rb
147
- - lib/anycable/config.rb
148
- - lib/anycable/exceptions_handling.rb
149
- - lib/anycable/health_server.rb
150
- - lib/anycable/middleware.rb
151
- - lib/anycable/middleware_chain.rb
152
- - lib/anycable/middlewares/check_version.rb
153
- - lib/anycable/rpc.rb
154
- - lib/anycable/rpc/rpc_pb.rb
155
- - lib/anycable/rpc/rpc_services_pb.rb
156
- - lib/anycable/rpc_handler.rb
157
- - lib/anycable/rspec.rb
158
- - lib/anycable/rspec/rpc_command_context.rb
159
- - lib/anycable/rspec/rpc_stub_context.rb
160
- - lib/anycable/rspec/with_grpc_server.rb
161
- - lib/anycable/server.rb
162
- - lib/anycable/socket.rb
163
- - lib/anycable/version.rb
164
51
  homepage: http://github.com/anycable/anycable
165
52
  licenses:
166
53
  - MIT
@@ -170,7 +57,8 @@ metadata:
170
57
  documentation_uri: https://docs.anycable.io/
171
58
  homepage_uri: https://anycable.io/
172
59
  source_code_uri: http://github.com/anycable/anycable
173
- post_install_message:
60
+ funding_uri: https://github.com/sponsors/anycable
61
+ post_install_message:
174
62
  rdoc_options: []
175
63
  require_paths:
176
64
  - lib
@@ -178,15 +66,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
178
66
  requirements:
179
67
  - - ">="
180
68
  - !ruby/object:Gem::Version
181
- version: 2.5.0
69
+ version: 2.6.0
182
70
  required_rubygems_version: !ruby/object:Gem::Requirement
183
71
  requirements:
184
72
  - - ">="
185
73
  - !ruby/object:Gem::Version
186
74
  version: '0'
187
75
  requirements: []
188
- rubygems_version: 3.0.6
189
- signing_key:
76
+ rubygems_version: 3.2.15
77
+ signing_key:
190
78
  specification_version: 4
191
79
  summary: AnyCable is a polyglot replacement for ActionCable-compatible servers
192
80
  test_files: []
data/bin/anycable DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "anycable/cli"
4
-
5
- begin
6
- cli = AnyCable::CLI.new
7
- cli.run(ARGV)
8
- rescue => e
9
- raise e if $DEBUG
10
- STDERR.puts e.message
11
- STDERR.puts e.backtrace.join("\n")
12
- exit 1
13
- end
data/bin/anycabled DELETED
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "anycable/cli"
4
-
5
- begin
6
- require "daemons"
7
- rescue LoadError
8
- raise <<~MSG
9
- You need to add gem 'daemons' to your Gemfile if you want to use `anycabled`:
10
-
11
- # Gemfile
12
- gem "daemons", "~> 1.3", require: false
13
- MSG
14
- end
15
-
16
- options = {
17
- dir: "tmp/pids",
18
- log_output: false
19
- }
20
-
21
- # Preserve current directory. We need it inside the server.
22
- current_dir = Dir.pwd
23
-
24
- # Clean ARGV from daemon command and args
25
- _, _, args = Daemons::Controller.split_argv(ARGV)
26
-
27
- Daemons.run_proc("anycable", options) do
28
- Dir.chdir current_dir
29
- AnyCable::CLI.new.run(args)
30
- end
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "anycable"
5
-
6
- require "pry"
7
- Pry.start
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/bin/sh
2
-
3
- set -e
4
-
5
- gem install bundler --conservative
6
- bundle check || bundle install
data/lib/anycable.rb DELETED
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "anycable/version"
4
- require "logger"
5
-
6
- require "anycable/exceptions_handling"
7
- require "anycable/broadcast_adapters"
8
-
9
- require "anycable/middleware_chain"
10
-
11
- require "anycable/server"
12
-
13
- # AnyCable allows to use any websocket service (written in any language) as a replacement
14
- # for ActionCable server.
15
- #
16
- # AnyCable includes a gRPC server, which is used by external WS server to execute commands
17
- # (authentication, subscription authorization, client-to-server messages).
18
- #
19
- # Broadcasting messages to WS is done through _broadcast adapter_ (Redis Pub/Sub by default).
20
- module AnyCable
21
- class << self
22
- # Provide connection factory which
23
- # is a callable object with build
24
- # a Connection object
25
- attr_accessor :connection_factory
26
-
27
- attr_writer :logger
28
-
29
- attr_reader :middleware
30
-
31
- def logger
32
- return @logger if instance_variable_defined?(:@logger)
33
-
34
- log_output = AnyCable.config.log_file || $stdout
35
- @logger = Logger.new(log_output).tap do |logger|
36
- logger.level = AnyCable.config.log_level
37
- end
38
- end
39
-
40
- def config
41
- @config ||= begin
42
- # Load anyway_config as later as possible
43
- # to make sure all framework-dependent patches are loaded
44
- require "anycable/config"
45
- Config.new
46
- end
47
- end
48
-
49
- def configure
50
- yield(config) if block_given?
51
- end
52
-
53
- # Register a custom block that will be called
54
- # when an exception is raised during gRPC call
55
- def capture_exception(&block)
56
- ExceptionsHandling << block
57
- end
58
-
59
- # Register a callback to be invoked before
60
- # the server starts
61
- def configure_server(&block)
62
- server_callbacks << block
63
- end
64
-
65
- def server_callbacks
66
- @server_callbacks ||= []
67
- end
68
-
69
- def broadcast_adapter
70
- self.broadcast_adapter = AnyCable.config.broadcast_adapter.to_sym unless instance_variable_defined?(:@broadcast_adapter)
71
- @broadcast_adapter
72
- end
73
-
74
- def broadcast_adapter=(adapter)
75
- if adapter.is_a?(Symbol) || adapter.is_a?(Array)
76
- adapter = BroadcastAdapters.lookup_adapter(adapter)
77
- end
78
-
79
- unless adapter.respond_to?(:broadcast)
80
- raise ArgumentError, "BroadcastAdapter must implement #broadcast method. " \
81
- "#{adapter.class} doesn't implement it."
82
- end
83
-
84
- @broadcast_adapter = adapter
85
- end
86
-
87
- # Raw broadcast message to the channel, sends only string!
88
- # To send hash or object use ActionCable.server.broadcast instead!
89
- def broadcast(channel, payload)
90
- broadcast_adapter.broadcast(channel, payload)
91
- end
92
-
93
- private
94
-
95
- attr_writer :middleware
96
- end
97
-
98
- require "anycable/middlewares/check_version"
99
-
100
- self.middleware = MiddlewareChain.new
101
- end