celluloid_pubsub_redis_adapter 0.3.0 → 0.4.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 +4 -4
- data/.travis.yml +17 -5
- data/celluloid_pubsub_redis_adapter.gemspec +1 -1
- data/lib/celluloid_pubsub_redis_adapter/redis_reactor.rb +4 -4
- data/lib/celluloid_pubsub_redis_adapter/version.rb +1 -1
- data/spec/lib/celluloid_pubsub/reactor_spec.rb +66 -43
- data/spec/spec_helper.rb +13 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73b79525e3545c65355fd561620dfb8cd8fad210
|
4
|
+
data.tar.gz: 6b24ec5729c9cb006128e8835ba5eb20e49db228
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 288599af4036a11117a08f7ba90e8967db0c0fd81480efd9d7b6715d468215767b25a59d9c1f5dc2443eddbf79c09d570f5cec72ca8a57961259560b8110ede0
|
7
|
+
data.tar.gz: b036226e8d2e32f5a907d7bc45670c02b0faf693c2a556720d8c49e9d149012f7f8918d66f60c76d95da142a11856c417e2d2e737630e3a1fe0af363273d36a2
|
data/.travis.yml
CHANGED
@@ -1,15 +1,27 @@
|
|
1
|
+
language: ruby
|
1
2
|
sudo: false
|
3
|
+
|
2
4
|
cache: bundler
|
3
|
-
|
5
|
+
|
6
|
+
bundler_args: --binstubs=./bin
|
7
|
+
|
4
8
|
before_install:
|
5
9
|
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
|
6
10
|
- gem install bundler
|
11
|
+
- gem update bundler
|
12
|
+
|
13
|
+
before_script:
|
14
|
+
- bundle update
|
15
|
+
|
16
|
+
install:
|
17
|
+
- bundle install --path vendor/bundle
|
18
|
+
|
19
|
+
script: bundle exec rake
|
20
|
+
|
7
21
|
rvm:
|
8
|
-
- 1.9.3
|
9
|
-
- 2.0.0
|
10
|
-
- 2.1.5
|
11
22
|
- 2.2.2
|
12
|
-
- 2.2.
|
23
|
+
- 2.2.5
|
24
|
+
- 2.3.1
|
13
25
|
env:
|
14
26
|
- RAILS_ENV=test RACK_ENV=test
|
15
27
|
notifications:
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = s.files.grep(/^(spec)/)
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
|
19
|
-
s.add_runtime_dependency 'celluloid_pubsub', '~> 1.0', '>= 1.0.
|
19
|
+
s.add_runtime_dependency 'celluloid_pubsub', '~> 1.0', '>= 1.0.3'
|
20
20
|
s.add_runtime_dependency 'em-hiredis', '~> 0.3', '>= 0.3.0'
|
21
21
|
|
22
22
|
s.add_development_dependency 'rspec', '~> 3.4', '>= 3.4'
|
@@ -28,7 +28,7 @@ module CelluloidPubsub
|
|
28
28
|
# @return [void]
|
29
29
|
#
|
30
30
|
# @api public
|
31
|
-
def unsubscribe(channel)
|
31
|
+
def unsubscribe(channel, data)
|
32
32
|
super
|
33
33
|
async.redis_action('unsubscribe', channel)
|
34
34
|
end
|
@@ -61,7 +61,7 @@ module CelluloidPubsub
|
|
61
61
|
# @return [void]
|
62
62
|
#
|
63
63
|
# @api public
|
64
|
-
def unsubscribe_all
|
64
|
+
def unsubscribe_all(channel, data)
|
65
65
|
info 'clearing connections'
|
66
66
|
shutdown
|
67
67
|
end
|
@@ -74,7 +74,7 @@ module CelluloidPubsub
|
|
74
74
|
# @api public
|
75
75
|
def shutdown
|
76
76
|
@channels.dup.each do |channel|
|
77
|
-
redis_action('unsubscribe', channel)
|
77
|
+
redis_action('unsubscribe', channel) unless ENV['RACK_ENV'] == 'test'
|
78
78
|
end if @channels.present?
|
79
79
|
super
|
80
80
|
end
|
@@ -84,7 +84,7 @@ module CelluloidPubsub
|
|
84
84
|
# @return [void]
|
85
85
|
#
|
86
86
|
# @api public
|
87
|
-
def
|
87
|
+
def server_pusblish_event(topic, data)
|
88
88
|
return if topic.blank? || data.blank?
|
89
89
|
connect_to_redis do |connection|
|
90
90
|
connection.publish(topic, data)
|
@@ -5,6 +5,7 @@ require 'spec_helper'
|
|
5
5
|
describe CelluloidPubsub::RedisReactor do
|
6
6
|
let(:websocket) { mock }
|
7
7
|
let(:server) { mock }
|
8
|
+
let(:mutex) { mock }
|
8
9
|
|
9
10
|
before(:each) do
|
10
11
|
subject.stubs(:async).returns(subject)
|
@@ -13,6 +14,7 @@ describe CelluloidPubsub::RedisReactor do
|
|
13
14
|
server.stubs(:handle_dispatched_message)
|
14
15
|
server.stubs(:subscribers).returns({})
|
15
16
|
server.stubs(:redis_enabled?).returns(false)
|
17
|
+
server.stubs(:adapter).returns(CelluloidPubsub::RedisReactor)
|
16
18
|
websocket.stubs(:read)
|
17
19
|
websocket.stubs(:url)
|
18
20
|
websocket.stubs(:close)
|
@@ -22,6 +24,8 @@ describe CelluloidPubsub::RedisReactor do
|
|
22
24
|
subject.stubs(:run)
|
23
25
|
subject.work(websocket, server)
|
24
26
|
subject.stubs(:unsubscribe_from_channel).returns(true)
|
27
|
+
server.stubs(:mutex).returns(mutex)
|
28
|
+
mutex.stubs(:synchronize).yields(server)
|
25
29
|
Celluloid::Actor.stubs(:kill).returns(true)
|
26
30
|
end
|
27
31
|
|
@@ -76,47 +80,46 @@ describe CelluloidPubsub::RedisReactor do
|
|
76
80
|
|
77
81
|
describe '#handle_parsed_websocket_message' do
|
78
82
|
it 'handle_websocket_message with a hash' do
|
79
|
-
data = { 'client_action' => '
|
83
|
+
data = { 'client_action' => 'subscribe' }
|
80
84
|
data.expects(:stringify_keys).returns(data)
|
81
85
|
subject.expects(:delegate_action).with(data)
|
82
86
|
subject.handle_parsed_websocket_message(data)
|
83
87
|
end
|
84
88
|
|
85
89
|
it 'handle_websocket_message with something else than a hash' do
|
86
|
-
data = 'some message'
|
87
|
-
subject.expects(:handle_unknown_action).with(data)
|
90
|
+
data = { 'message'=> 'some message' }
|
91
|
+
subject.expects(:handle_unknown_action).with(data['channel'], data)
|
88
92
|
subject.handle_parsed_websocket_message(data)
|
89
93
|
end
|
90
94
|
end
|
91
95
|
|
92
96
|
describe '#delegate_action' do
|
97
|
+
before(:each) do
|
98
|
+
subject.stubs(:unsubscribe_clients).returns(true)
|
99
|
+
subject.stubs(:shutdown).returns(true)
|
100
|
+
end
|
101
|
+
|
93
102
|
it 'unsubscribes all' do
|
94
|
-
data = { 'client_action' => 'unsubscribe_all' }
|
95
|
-
subject.expects(:
|
103
|
+
data = { 'client_action' => 'unsubscribe_all', 'channel' => '' }
|
104
|
+
subject.expects(:send).with(data['client_action'], data['channel'], data).returns('bla')
|
96
105
|
subject.delegate_action(data)
|
97
106
|
end
|
98
107
|
|
99
108
|
it 'unsubscribes all' do
|
100
109
|
data = { 'client_action' => 'unsubscribe', 'channel' => 'some channel' }
|
101
|
-
subject.expects(:
|
110
|
+
subject.expects(:send).with(data['client_action'], data['channel'], data)
|
102
111
|
subject.delegate_action(data)
|
103
112
|
end
|
104
|
-
|
113
|
+
#
|
105
114
|
it 'subscribes to channell' do
|
106
115
|
data = { 'client_action' => 'subscribe', 'channel' => 'some channel' }
|
107
|
-
subject.expects(:
|
116
|
+
subject.expects(:send).with(data['client_action'], data['channel'], data)
|
108
117
|
subject.delegate_action(data)
|
109
118
|
end
|
110
119
|
|
111
120
|
it 'publish' do
|
112
121
|
data = { 'client_action' => 'publish', 'channel' => 'some channel', 'data' => 'some data' }
|
113
|
-
subject.expects(:
|
114
|
-
subject.delegate_action(data)
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'handles unknown' do
|
118
|
-
data = { 'client_action' => 'some action', 'channel' => 'some channel' }
|
119
|
-
subject.expects(:handle_unknown_action).with(data)
|
122
|
+
subject.expects(:send).with(data['client_action'], data['channel'], data)
|
120
123
|
subject.delegate_action(data)
|
121
124
|
end
|
122
125
|
end
|
@@ -124,41 +127,67 @@ describe CelluloidPubsub::RedisReactor do
|
|
124
127
|
describe '#handle_unknown_action' do
|
125
128
|
it 'handles unknown' do
|
126
129
|
data = 'some data'
|
130
|
+
channel = "some_channel"
|
127
131
|
server.expects(:handle_dispatched_message)
|
128
|
-
subject.handle_unknown_action(data)
|
132
|
+
subject.handle_unknown_action(channel, data)
|
129
133
|
end
|
130
134
|
end
|
131
135
|
|
132
136
|
describe '#unsubscribe_client' do
|
133
137
|
let(:channel) { 'some channel' }
|
138
|
+
let(:data) { {'client_action' => 'unsubscribe', 'channel' => channel } }
|
139
|
+
|
140
|
+
before(:each) do
|
141
|
+
subject.stubs(:redis_action).returns(nil)
|
142
|
+
end
|
143
|
+
|
134
144
|
it 'returns nil' do
|
135
|
-
|
145
|
+
|
146
|
+
act = subject.unsubscribe('', data)
|
136
147
|
expect(act).to eq(nil)
|
137
148
|
end
|
138
149
|
|
139
150
|
it 'unsubscribes' do
|
140
|
-
|
141
|
-
subject.
|
142
|
-
|
143
|
-
|
151
|
+
channel.stubs(:present?).returns(true)
|
152
|
+
subject.expects(:forget_channel).with(channel)
|
153
|
+
subject.expects(:delete_server_subscribers).with(channel)
|
154
|
+
act = subject.unsubscribe(channel, data)
|
155
|
+
expect(act).to eq(nil)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#delete_server_subscribers' do
|
160
|
+
let(:channel) { 'some channel' }
|
161
|
+
|
162
|
+
before(:each) do
|
163
|
+
server.stubs(:subscribers).returns("#{channel}" => [{ reactor: subject }])
|
144
164
|
end
|
145
165
|
|
166
|
+
it 'unsubscribes' do
|
167
|
+
act = subject.delete_server_subscribers(channel)
|
168
|
+
expect(server.subscribers[channel]).to eq([])
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '#forget_channel' do
|
173
|
+
let(:channel) { 'some channel' }
|
174
|
+
|
146
175
|
it 'unsubscribes' do
|
147
176
|
subject.channels.stubs(:blank?).returns(true)
|
148
177
|
subject.websocket.expects(:close)
|
149
|
-
act = subject.
|
150
|
-
expect(act).to eq(
|
178
|
+
act = subject.forget_channel(channel)
|
179
|
+
expect(act).to eq(nil)
|
151
180
|
end
|
152
181
|
|
153
182
|
it 'unsubscribes' do
|
154
183
|
subject.channels.stubs(:blank?).returns(false)
|
155
|
-
subject.channels.
|
156
|
-
|
157
|
-
subject.
|
158
|
-
|
184
|
+
subject.channels.expects(:delete).with(channel)
|
185
|
+
# server.stubs(:subscribers).returns("#{channel}" => [{ reactor: subject }])
|
186
|
+
subject.forget_channel(channel)
|
187
|
+
# expect(server.subscribers[channel]).to eq([])
|
159
188
|
end
|
160
189
|
end
|
161
|
-
|
190
|
+
#
|
162
191
|
describe '#shutdown' do
|
163
192
|
it 'shutdowns' do
|
164
193
|
subject.expects(:terminate)
|
@@ -171,26 +200,15 @@ describe CelluloidPubsub::RedisReactor do
|
|
171
200
|
let(:message) { { a: 'b' } }
|
172
201
|
|
173
202
|
it 'subscribes ' do
|
174
|
-
act = subject.
|
203
|
+
act = subject.subscribe('', message)
|
175
204
|
expect(act).to eq(nil)
|
176
205
|
end
|
177
206
|
|
178
207
|
it 'subscribes ' do
|
179
208
|
subject.stubs(:add_subscriber_to_channel).with(channel, message)
|
180
|
-
|
181
|
-
subject.websocket.expects(:<<).with(message.merge('client_action' => 'successful_subscription', 'channel' => channel).to_json)
|
182
|
-
subject.start_subscriber(channel, message)
|
209
|
+
subject.subscribe(channel, message)
|
183
210
|
end
|
184
211
|
|
185
|
-
# it 'raises error' do
|
186
|
-
# subject.stubs(:add_subscriber_to_channel).raises(StandardError)
|
187
|
-
#
|
188
|
-
# expect do
|
189
|
-
# subject.start_subscriber(channel, message)
|
190
|
-
# end.to raise_error(StandardError) { |e|
|
191
|
-
# expect(e.message).to include(channel)
|
192
|
-
# }
|
193
|
-
# end
|
194
212
|
end
|
195
213
|
|
196
214
|
describe '#add_subscriber_to_channel' do
|
@@ -198,6 +216,10 @@ describe CelluloidPubsub::RedisReactor do
|
|
198
216
|
let(:message) { { a: 'b' } }
|
199
217
|
let(:subscribers) { mock }
|
200
218
|
|
219
|
+
before(:each) do
|
220
|
+
subject.stubs(:redis_action).returns(nil)
|
221
|
+
end
|
222
|
+
|
201
223
|
it 'adds subscribed' do
|
202
224
|
CelluloidPubsub::Registry.channels.stubs(:include?).with(channel).returns(false)
|
203
225
|
CelluloidPubsub::Registry.channels.expects(:<<).with(channel)
|
@@ -213,9 +235,10 @@ describe CelluloidPubsub::RedisReactor do
|
|
213
235
|
let(:message) { { a: 'b' } }
|
214
236
|
|
215
237
|
it 'adds subscribed' do
|
238
|
+
subject.stubs(:shutdown).returns(true)
|
216
239
|
CelluloidPubsub::Registry.stubs(:channels).returns([channel])
|
217
|
-
|
218
|
-
subject.unsubscribe_all
|
240
|
+
# subject.expects(:unsubscribe_clients)
|
241
|
+
subject.unsubscribe_all(channel, message)
|
219
242
|
end
|
220
243
|
end
|
221
244
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -14,7 +14,7 @@ formatters << Coveralls::SimpleCov::Formatter # if ENV['TRAVIS']
|
|
14
14
|
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[*formatters]
|
15
15
|
|
16
16
|
Coveralls.wear!
|
17
|
-
SimpleCov.start
|
17
|
+
SimpleCov.start do
|
18
18
|
add_filter 'spec'
|
19
19
|
|
20
20
|
at_exit {}
|
@@ -45,3 +45,15 @@ RSpec.configure do |config|
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
49
|
+
unless defined?(silence_stream) # Rails 5
|
50
|
+
def silence_stream(stream)
|
51
|
+
old_stream = stream.dup
|
52
|
+
stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
|
53
|
+
stream.sync = true
|
54
|
+
yield
|
55
|
+
ensure
|
56
|
+
stream.reopen(old_stream)
|
57
|
+
old_stream.close
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid_pubsub_redis_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bogdanRada
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '1.0'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.0.
|
22
|
+
version: 1.0.3
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '1.0'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.0.
|
32
|
+
version: 1.0.3
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: em-hiredis
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|