anycable 1.0.1 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90f8b0fc45d4659234b7defd755b818c19dde55779a64cbdec794fc68441bf45
4
- data.tar.gz: 2184541660e683c2206593636434b4a24578376936eb0bb63d4600602829c736
3
+ metadata.gz: e3121508f979e1e2a60dd831f3f1478a99e486afdc40708961f1881db8ab75fb
4
+ data.tar.gz: dd9d1c80ae0759133edc613d0977a70d5edc79760f33b5337b6d10bed358ca1b
5
5
  SHA512:
6
- metadata.gz: bddcd49f2e31f8a1c0fcf202e44779abe0fcf4092bc3358f3b4efe7b86e4db1454e083e2c352e651ff38fafcf0d4f3b1907a019fba5e262aaeba0b7fd6a09abb
7
- data.tar.gz: fa7586b9a059dfb9584894d1f5540fd33dff26411f8199a0f837cf26d0d0c9c2af150602ebbadc775af3f2b9393ed5c2de0f7435a2d403f11081166ddcae88df
6
+ metadata.gz: 825c3f19f44df803d4f1f61deeded9a38a915f19c045940330d3e5b25cfedff1ed92803b4563dc92b0536ec236042b66356437454d589e7f15bd414d5818b8aa
7
+ data.tar.gz: 1577c03e455d87ea59da2237de2b57bf79bf2411c751ef2c42b1b59ef9b94cbbbfd40926b80bbb73ae0f68ff15c7b595f6c5fa944a7c8a059306ec4b7ad15525
data/CHANGELOG.md CHANGED
@@ -2,6 +2,37 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.1.0 🚸 (2021-06-01)
6
+
7
+ - No changes since 1.1.0.rc1.
8
+
9
+ ## 1.1.0.rc1 (2021-05-12)
10
+
11
+ - **BREAKING** Move middlewares from gRPC interceptors to custom implementation. ([@palkan][])
12
+
13
+ That allowed us to have _real_ middlewares with ability to modify responses, intercept exceptions, etc.
14
+ The API changed a bit:
15
+
16
+ ```diff
17
+ class SomeMiddleware < AnyCable::Middleware
18
+ - def call(request, rpc_call, rpc_handler)
19
+ + def call(rpc_method_name, request, metadata)
20
+ yield
21
+ end
22
+ end
23
+ ```
24
+
25
+ - **Ruby >= 2.6** is required.
26
+ - **Anyway Config >= 2.1** is required.
27
+
28
+ ## 1.0.3 (2021-03-05)
29
+
30
+ - Ruby 3.0 compatibility. ([@palkan][])
31
+
32
+ ## 1.0.2 (2021-01-05)
33
+
34
+ - Handle TLS Redis connections by using VERIFY_NONE mode. ([@palkan][])
35
+
5
36
  ## 1.0.1 (2020-07-07)
6
37
 
7
38
  - Support providing passwords for Redis Sentinels. ([@palkan][])
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2017-2020 Vladimir Dementyev
1
+ Copyright 2017-2021 Vladimir Dementyev
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-07 00:00:00.000000000 Z
11
+ date: 2021-06-01 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.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: 1.4.2
26
+ version: 1.1.0
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