anycable-core 1.4.2 → 1.4.4
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/anycable/broadcast_adapters/base.rb +51 -2
- data/lib/anycable/version.rb +1 -1
- data/lib/anycable.rb +2 -2
- data/sig/anycable/broadcast_adapters/base.rbs +11 -1
- data/sig/anycable.rbs +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b02bcc10302bdd445b92e77c0ce354734e82a0ba124c9e88b2997b87013bbf3d
|
4
|
+
data.tar.gz: dadf0fdc856292e614f39ebd43b996da49ce4e9771408429ba75fae7ace9877b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 918addcfda8aea6f57eb7fd4872a4b93eeafc18862e93d75221d55f13ded38c218c231a47fbf1b803ca717618a518a05b0c6bf86b080000aa566281842033167
|
7
|
+
data.tar.gz: f96deb1656000ce9d2089f94da40860bb9820598a5afb002a7ae5c2bc28f71f799dad6efeeea824e7bf306ceb8b76aad109b824c675391d4f218a81f90d9e491
|
data/CHANGELOG.md
CHANGED
@@ -7,8 +7,31 @@ module AnyCable
|
|
7
7
|
raise NotImplementedError
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
10
|
+
def batching(enabled = true)
|
11
|
+
self.batching_enabled = enabled
|
12
|
+
yield
|
13
|
+
ensure
|
14
|
+
maybe_flush_batch
|
15
|
+
end
|
16
|
+
|
17
|
+
def start_batching
|
18
|
+
self.batching_enabled = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def finish_batching
|
22
|
+
maybe_flush_batch
|
23
|
+
end
|
24
|
+
|
25
|
+
def batching?
|
26
|
+
Thread.current[:anycable_batching]&.last
|
27
|
+
end
|
28
|
+
|
29
|
+
def broadcast(stream, payload, options = nil)
|
30
|
+
if batching?
|
31
|
+
current_batch << {stream: stream, data: payload, meta: options}.compact
|
32
|
+
else
|
33
|
+
raw_broadcast({stream: stream, data: payload, meta: options}.compact.to_json)
|
34
|
+
end
|
12
35
|
end
|
13
36
|
|
14
37
|
def broadcast_command(command, **payload)
|
@@ -21,6 +44,32 @@ module AnyCable
|
|
21
44
|
|
22
45
|
private
|
23
46
|
|
47
|
+
def batching_enabled=(val)
|
48
|
+
# The stack must start with the true value,
|
49
|
+
# so we can check for emptiness to decide whether to flush
|
50
|
+
stack = batching_enabled_stack
|
51
|
+
stack << val if val || !stack.empty?
|
52
|
+
end
|
53
|
+
|
54
|
+
def batching_enabled_stack
|
55
|
+
Thread.current[:anycable_batching] ||= []
|
56
|
+
end
|
57
|
+
|
58
|
+
def current_batch
|
59
|
+
Thread.current[:anycable_batch] ||= []
|
60
|
+
end
|
61
|
+
|
62
|
+
def maybe_flush_batch
|
63
|
+
batching_enabled_stack.pop
|
64
|
+
return unless batching_enabled_stack.empty?
|
65
|
+
|
66
|
+
batch = current_batch
|
67
|
+
unless batch.empty?
|
68
|
+
raw_broadcast(batch.to_json)
|
69
|
+
end
|
70
|
+
current_batch.clear
|
71
|
+
end
|
72
|
+
|
24
73
|
def logger
|
25
74
|
AnyCable.logger
|
26
75
|
end
|
data/lib/anycable/version.rb
CHANGED
data/lib/anycable.rb
CHANGED
@@ -92,8 +92,8 @@ module AnyCable
|
|
92
92
|
|
93
93
|
# Raw broadcast message to the channel, sends only string!
|
94
94
|
# To send hash or object use ActionCable.server.broadcast instead!
|
95
|
-
def broadcast(
|
96
|
-
broadcast_adapter.broadcast(
|
95
|
+
def broadcast(...)
|
96
|
+
broadcast_adapter.broadcast(...)
|
97
97
|
end
|
98
98
|
|
99
99
|
def rpc_handler
|
@@ -1,7 +1,13 @@
|
|
1
1
|
module AnyCable
|
2
|
+
type broadcastOptions = {exclude_socket: String}
|
3
|
+
|
2
4
|
interface _BroadcastAdapter
|
3
5
|
def raw_broadcast: (String _data) -> void
|
4
|
-
def
|
6
|
+
def batching: (?bool enabled) { () -> untyped } -> untyped
|
7
|
+
def start_batching: () -> void
|
8
|
+
def finish_batching: () -> void
|
9
|
+
def batching?: () -> (bool | NilClass)
|
10
|
+
def broadcast: (String stream, String payload, ?broadcastOptions options) -> void
|
5
11
|
def broadcast_command: (String command, **untyped payload) -> void
|
6
12
|
def announce!: () -> void
|
7
13
|
end
|
@@ -13,6 +19,10 @@ module AnyCable
|
|
13
19
|
private
|
14
20
|
|
15
21
|
def logger: () -> Logger
|
22
|
+
def current_batch: () -> Array[untyped]
|
23
|
+
def maybe_flush_batch: () -> void
|
24
|
+
def batching_enabled_stack: () -> Array[bool]
|
25
|
+
def batching_enabled=: (bool) -> void
|
16
26
|
end
|
17
27
|
end
|
18
28
|
end
|
data/sig/anycable.rbs
CHANGED
@@ -36,6 +36,6 @@ module AnyCable
|
|
36
36
|
def self.server_callbacks: () -> Array[^() -> void]
|
37
37
|
def self.broadcast_adapter: () -> _BroadcastAdapter
|
38
38
|
def self.broadcast_adapter=: (untyped adapter) -> void
|
39
|
-
def self.broadcast: (String channel, String payload) -> void
|
39
|
+
def self.broadcast: (String channel, String payload, ?broadcastOptions options) -> void
|
40
40
|
def self.rpc_handler: () -> RPC::Handler
|
41
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anycable-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- palkan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: google-protobuf
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.25'
|
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: '3.
|
40
|
+
version: '3.25'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: redis
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -286,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
286
286
|
- !ruby/object:Gem::Version
|
287
287
|
version: '0'
|
288
288
|
requirements: []
|
289
|
-
rubygems_version: 3.4.
|
289
|
+
rubygems_version: 3.4.20
|
290
290
|
signing_key:
|
291
291
|
specification_version: 4
|
292
292
|
summary: AnyCable core RPC implementation
|