solid_cable 4.0.0 → 4.0.1

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: 82d0f5f6a07f329cf8365e30926b72879b22300fab4c7520d18c865dc184156a
4
- data.tar.gz: 7e9bd94004f0111b403b31b30f9aa6eb489173f523af656a2db76f771fc7a7c0
3
+ metadata.gz: 10e383ae37ea3643b84e98e513c1123340c94db2d3c0d9683c6bbd1f86f6b3dc
4
+ data.tar.gz: b883a4c70ca58c0bada49bc4ee0b42e3cac9e5c4260c42a6a2ffb2ade678ee26
5
5
  SHA512:
6
- metadata.gz: adc3ddc71a3033b4bea6fdd5cc94cf54ca29c39d527d763c0476cd0a99639f94fea18f7a4dd43729da1a20bcb179f900cc95167ac3ea3b95e7186dcd9b048e30
7
- data.tar.gz: 96ac0c12361e6a9e39a1f5fe0c33975d437e3f6dc1e9038ddda243eef49390bf7078a03d7da7901a4b286f1bd3fc50d9a5edb3caf3877ab887af3ee51d238b64
6
+ metadata.gz: c7a8924daed8e0b78e9955bad3cc800f33bb917f0fab735ea1e892af037aa51f1e5ab64fc14f363d077f3ae748e977be192d36f42c86730119e1f21729dbc508
7
+ data.tar.gz: 412baa21c8913721f097d49ceeddc9b893634c3412936fd7f8b9bfbd1d454ed5343b2677a76c785aac6ef72cf8b8edb70bae23631fcc02622a72fdd4ee3bceb0
@@ -12,6 +12,13 @@ module ActionCable
12
12
 
13
13
  def initialize(*)
14
14
  super
15
+ @mutex =
16
+ if defined?(@server)
17
+ @server.mutex
18
+ else
19
+ Mutex.new
20
+ end
21
+
15
22
  @listener = nil
16
23
  end
17
24
 
@@ -33,11 +40,20 @@ module ActionCable
33
40
 
34
41
  private
35
42
  def listener
36
- @listener || @server.mutex.synchronize do
37
- @listener ||= Listener.new(@server.event_loop)
43
+ @listener || @mutex.synchronize do
44
+ @listener ||= Listener.new(self, pubsub_executor)
38
45
  end
39
46
  end
40
47
 
48
+ def pubsub_executor
49
+ @pubsub_executor ||=
50
+ if respond_to?(:executor, true)
51
+ executor
52
+ else
53
+ @server.event_loop
54
+ end
55
+ end
56
+
41
57
  class Listener < ::ActionCable::SubscriptionAdapter::SubscriberMap
42
58
  CONNECTION_ERRORS = [
43
59
  ActiveRecord::ConnectionFailed,
@@ -46,10 +62,12 @@ module ActionCable
46
62
  ]
47
63
  Stop = Class.new(Exception)
48
64
 
49
- def initialize(event_loop)
50
- super()
65
+ delegate :logger, to: :@adapter
51
66
 
52
- @event_loop = event_loop
67
+ def initialize(adapter, executor)
68
+ super()
69
+ @adapter = adapter
70
+ @executor = executor
53
71
 
54
72
  # Critical section begins with 0 permits. It can be understood as
55
73
  # being "normally held" by the listener thread. It is released
@@ -105,7 +123,7 @@ module ActionCable
105
123
 
106
124
  def add_channel(channel, on_success)
107
125
  channels[channel] = last_message_id
108
- event_loop.post(&on_success) if on_success
126
+ on_success.call if on_success
109
127
  end
110
128
 
111
129
  def remove_channel(channel)
@@ -113,11 +131,11 @@ module ActionCable
113
131
  end
114
132
 
115
133
  def invoke_callback(*)
116
- event_loop.post { super }
134
+ executor.post { super }
117
135
  end
118
136
 
119
137
  private
120
- attr_reader :event_loop, :thread
138
+ attr_reader :executor, :thread
121
139
  attr_accessor :last_id, :reconnect_attempt
122
140
 
123
141
  def last_message_id
@@ -143,6 +161,7 @@ module ActionCable
143
161
  end
144
162
 
145
163
  broadcast(message.channel, message.payload) if should_broadcast_message
164
+ self.reconnect_attempt = 0
146
165
  self.last_id = message.id
147
166
  end
148
167
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidCable
4
- VERSION = "4.0.0"
4
+ VERSION = "4.0.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_cable
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pezza
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  requirements: []
128
- rubygems_version: 4.0.10
128
+ rubygems_version: 4.0.15
129
129
  specification_version: 4
130
130
  summary: Database-backed Action Cable backend.
131
131
  test_files: []