celluloid_pubsub 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  require_relative './registry'
2
+ require_relative './helper'
2
3
  module CelluloidPubsub
3
- # rubocop:disable ClassLength
4
4
  # The reactor handles new connections. Based on what the client sends it either subscribes to a channel
5
5
  # or will publish to a channel or just dispatch to the server if command is neither subscribe, publish or unsubscribe
6
6
  #
@@ -16,6 +16,7 @@ module CelluloidPubsub
16
16
  include Celluloid
17
17
  include Celluloid::IO
18
18
  include Celluloid::Logger
19
+ include CelluloidPubsub::Helper
19
20
 
20
21
  attr_accessor :websocket, :server, :channels
21
22
  finalizer :shutdown
@@ -31,10 +32,14 @@ module CelluloidPubsub
31
32
  @server = server
32
33
  @channels = []
33
34
  @websocket = websocket
34
- info "#{self.class} Streaming changes for #{websocket.url}" if @server.debug_enabled?
35
+ log_debug "#{self.class} Streaming changes for #{websocket.url}"
35
36
  async.run
36
37
  end
37
38
 
39
+ def debug_enabled?
40
+ @server.debug_enabled?
41
+ end
42
+
38
43
  # reads from the socket the message
39
44
  # and dispatches it to the handle_websocket_message method
40
45
  # @see #handle_websocket_message
@@ -45,8 +50,10 @@ module CelluloidPubsub
45
50
  #
46
51
  # :nocov:
47
52
  def run
48
- while Actor.current.alive? && !@websocket.closed? && message = try_read_websocket
49
- handle_websocket_message(message)
53
+ loop do
54
+ break if !Actor.current.alive? || @websocket.closed? || !@server.alive?
55
+ message = try_read_websocket
56
+ handle_websocket_message(message) if message.present?
50
57
  end
51
58
  end
52
59
 
@@ -59,13 +66,13 @@ module CelluloidPubsub
59
66
  #
60
67
  # :nocov:
61
68
  def try_read_websocket
62
- message = nil
63
- begin
64
- message = @websocket.read
65
- rescue => e
66
- debug(e)
67
- end
68
- message
69
+ @websocket.closed? ? nil : @websocket.read
70
+ rescue Reel::SocketError
71
+ nil
72
+ end
73
+
74
+ def reactor_class
75
+ self.class
69
76
  end
70
77
 
71
78
  # :nocov:
@@ -78,16 +85,10 @@ module CelluloidPubsub
78
85
  #
79
86
  # @api public
80
87
  def parse_json_data(message)
81
- debug "#{self.class} read message #{message}" if @server.debug_enabled?
82
- json_data = nil
83
- begin
84
- json_data = JSON.parse(message)
85
- rescue => e
86
- debug "#{self.class} could not parse #{message} because of #{e.inspect}" if @server.debug_enabled?
87
- # do nothing
88
- end
89
- json_data = message if json_data.nil?
90
- json_data
88
+ JSON.parse(message)
89
+ rescue => exception
90
+ log_debug "#{reactor_class} could not parse #{message} because of #{exception.inspect}"
91
+ message
91
92
  end
92
93
 
93
94
  # method that handles the message received from the websocket connection
@@ -104,6 +105,7 @@ module CelluloidPubsub
104
105
  #
105
106
  # @api public
106
107
  def handle_websocket_message(message)
108
+ log_debug "#{reactor_class} read message #{message}"
107
109
  json_data = parse_json_data(message)
108
110
  handle_parsed_websocket_message(json_data)
109
111
  end
@@ -124,7 +126,7 @@ module CelluloidPubsub
124
126
  def handle_parsed_websocket_message(json_data)
125
127
  if json_data.is_a?(Hash)
126
128
  json_data = json_data.stringify_keys
127
- debug "#{self.class} finds actions for #{json_data}" if @server.debug_enabled?
129
+ log_debug "#{self.class} finds actions for #{json_data}"
128
130
  delegate_action(json_data) if json_data['client_action'].present?
129
131
  else
130
132
  handle_unknown_action(json_data)
@@ -153,17 +155,18 @@ module CelluloidPubsub
153
155
  #
154
156
  # @api public
155
157
  def delegate_action(json_data)
158
+ channel = json_data.fetch('channel', nil)
156
159
  case json_data['client_action']
157
160
  when 'unsubscribe_all'
158
161
  unsubscribe_all
159
162
  when 'unsubscribe_clients'
160
- async.unsubscribe_clients(json_data['channel'])
163
+ async.unsubscribe_clients(channel)
161
164
  when 'unsubscribe'
162
- async.unsubscribe(json_data['channel'])
165
+ async.unsubscribe(channel)
163
166
  when 'subscribe'
164
- async.start_subscriber(json_data['channel'], json_data)
167
+ async.start_subscriber(channel, json_data)
165
168
  when 'publish'
166
- @server.publish_event(json_data['channel'], json_data['data'].to_json)
169
+ @server.publish_event(channel, json_data['data'].to_json)
167
170
  else
168
171
  handle_unknown_action(json_data)
169
172
  end
@@ -178,10 +181,17 @@ module CelluloidPubsub
178
181
  #
179
182
  # @api public
180
183
  def handle_unknown_action(json_data)
181
- debug "Trying to dispatch to server #{json_data}" if @server.debug_enabled?
184
+ log_debug "Trying to dispatch to server #{json_data}"
182
185
  @server.async.handle_dispatched_message(Actor.current, json_data)
183
186
  end
184
187
 
188
+ def forget_channel
189
+ if @channels.blank?
190
+ @websocket.close
191
+ else
192
+ @channels.delete(channel)
193
+ end
194
+ end
185
195
  # the method will unsubscribe a client by closing the websocket connection if has unscribed from all channels
186
196
  # and deleting the reactor from the channel list on the server
187
197
  #
@@ -191,13 +201,12 @@ module CelluloidPubsub
191
201
  #
192
202
  # @api public
193
203
  def unsubscribe(channel)
194
- debug "#{self.class} runs 'unsubscribe' method with #{channel}" if @server.debug_enabled?
204
+ log_debug "#{self.class} runs 'unsubscribe' method with #{channel}"
195
205
  return unless channel.present?
196
- @channels.delete(channel) unless @channels.blank?
197
- @websocket.close if @channels.blank?
198
- @server.subscribers[channel].delete_if do |hash|
206
+ forget_channel
207
+ (@server.subscribers[channel] || []).delete_if do |hash|
199
208
  hash[:reactor] == Actor.current
200
- end if @server.subscribers[channel].present?
209
+ end
201
210
  end
202
211
 
203
212
  # the method will unsubscribe all clients subscribed to a channel by closing the
@@ -208,8 +217,8 @@ module CelluloidPubsub
208
217
  #
209
218
  # @api public
210
219
  def unsubscribe_clients(channel)
211
- debug "#{self.class} runs 'unsubscribe_clients' method with #{channel}" if @server.debug_enabled?
212
- return if channel.blank? || @server.subscribers[channel].blank?
220
+ log_debug "#{self.class} runs 'unsubscribe_clients' method with #{channel}"
221
+ return if channel.blank?
213
222
  unsubscribe_from_channel(channel)
214
223
  @server.subscribers[channel] = []
215
224
  end
@@ -222,6 +231,7 @@ module CelluloidPubsub
222
231
  # @api public
223
232
  def shutdown
224
233
  debug "#{self.class} tries to 'shudown'"
234
+ @websocket.close if @websocket.present? && !@websocket.closed?
225
235
  terminate
226
236
  end
227
237
 
@@ -239,10 +249,14 @@ module CelluloidPubsub
239
249
  def start_subscriber(channel, message)
240
250
  return unless channel.present?
241
251
  add_subscriber_to_channel(channel, message)
242
- debug "#{self.class} subscribed to #{channel} with #{message}" if @server.debug_enabled?
252
+ log_debug "#{self.class} subscribed to #{channel} with #{message}"
243
253
  @websocket << message.merge('client_action' => 'successful_subscription', 'channel' => channel).to_json unless @server.redis_enabled?
244
254
  end
245
255
 
256
+ def channel_subscribers(channel)
257
+ @server.subscribers[channel] || []
258
+ end
259
+
246
260
  # adds the curent actor the list of the subscribers for a particular channel
247
261
  # and registers the new channel
248
262
  #
@@ -253,11 +267,10 @@ module CelluloidPubsub
253
267
  #
254
268
  # @api public
255
269
  def add_subscriber_to_channel(channel, message)
270
+ registry_channels = CelluloidPubsub::Registry.channels
256
271
  @channels << channel
257
- CelluloidPubsub::Registry.channels << channel unless CelluloidPubsub::Registry.channels.include?(channel)
258
- @server.subscribers[channel] ||= []
259
- @server.subscribers[channel] << { reactor: Actor.current, message: message }
260
-
272
+ registry_channels << channel unless registry_channels.include?(channel)
273
+ @server.subscribers[channel] = channel_subscribers(channel).push(reactor: Actor.current, message: message)
261
274
  end
262
275
 
263
276
  # unsubscribes all actors from all channels and terminates the curent actor
@@ -266,13 +279,11 @@ module CelluloidPubsub
266
279
  #
267
280
  # @api public
268
281
  def unsubscribe_all
269
- debug "#{self.class} runs 'unsubscribe_all' method" if @server.debug_enabled?
282
+ log_debug "#{self.class} runs 'unsubscribe_all' method"
270
283
  CelluloidPubsub::Registry.channels.map do |channel|
271
- unsubscribe_from_channel(channel)
272
- @server.subscribers[channel] = []
284
+ unsubscribe_clients(channel)
273
285
  end
274
-
275
- info 'clearing connections' if @server.debug_enabled?
286
+ log_debug 'clearing connections'
276
287
  shutdown
277
288
  end
278
289
 
@@ -283,11 +294,11 @@ module CelluloidPubsub
283
294
  #
284
295
  # @api public
285
296
  def unsubscribe_from_channel(channel)
286
- debug "#{self.class} runs 'unsubscribe_from_channel' method with #{channel}" if @server.debug_enabled?
287
- return if @server.subscribers[channel].blank?
288
- @server.subscribers[channel].each do |hash|
289
- hash[:reactor].websocket.close
290
- Celluloid::Actor.kill(hash[:reactor])
297
+ log_debug "#{self.class} runs 'unsubscribe_from_channel' method with #{channel}"
298
+ (@server.subscribers[channel] || []).each do |hash|
299
+ reactor = hash[:reactor]
300
+ reactor.websocket.close
301
+ Celluloid::Actor.kill(reactor)
291
302
  end
292
303
  end
293
304
  end
@@ -0,0 +1,38 @@
1
+ require_relative '../helper'
2
+ module CelluloidPubsub
3
+ # class that handles redis connection
4
+ class Redis
5
+ class << self
6
+ include Celluloid::Logger
7
+ include CelluloidPubsub::Helper
8
+
9
+ @connected ||= false
10
+ attr_accessor :connected, :connection
11
+
12
+ alias_method :connected?, :connected
13
+
14
+ def connect(&block)
15
+ require 'eventmachine'
16
+ require 'em-hiredis'
17
+ run_the_eventmachine(&block)
18
+ setup_em_exception_handler
19
+ end
20
+
21
+ private
22
+
23
+ def run_the_eventmachine(&block)
24
+ EM.run do
25
+ @connection = EM::Hiredis.connect
26
+ @connected = true
27
+ block.call @connection
28
+ end
29
+ end
30
+
31
+ def setup_em_exception_handler
32
+ EM.error_handler do |error|
33
+ debug error unless filtered_error?(error)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,97 @@
1
+ require_relative '../reactor'
2
+ module CelluloidPubsub
3
+ # reactor used for redis pubsub
4
+ class RedisReactor < CelluloidPubsub::Reactor
5
+ include Celluloid
6
+ include Celluloid::IO
7
+ include Celluloid::Logger
8
+
9
+ def unsubscribe(channel)
10
+ super
11
+ async.redis_action('unsubscribe', channel)
12
+ end
13
+
14
+ def add_subscriber_to_channel(channel, message)
15
+ super
16
+ async.redis_action('subscribe', channel, message)
17
+ end
18
+
19
+ def unsubscribe_from_channel(channel)
20
+ super
21
+ async.redis_action('unsubscribe', channel)
22
+ end
23
+
24
+ def unsubscribe_all
25
+ CelluloidPubsub::Registry.channels.map do |channel|
26
+ async.redis_action('unsubscribe', channel)
27
+ end
28
+ info 'clearing connections'
29
+ shutdown
30
+ end
31
+
32
+ def shutdown
33
+ @channels.each do |channel|
34
+ redis_action('unsubscribe', channel)
35
+ end if @channels.present?
36
+ super
37
+ end
38
+
39
+ private
40
+
41
+ def fetch_pubsub
42
+ CelluloidPubsub::Redis.connect do |connection|
43
+ yield connection.pubsub
44
+ end
45
+ end
46
+
47
+ def action_subscribe?(action)
48
+ action == 'subscribe'
49
+ end
50
+
51
+ def action_success(action, channel, message)
52
+ action_subscribe?(action) ? message.merge('client_action' => 'successful_subscription', 'channel' => channel) : nil
53
+ end
54
+
55
+ def redis_action(action, channel = nil, message = {})
56
+ fetch_pubsub do |pubsub|
57
+ callback = prepare_redis_action(action)
58
+ success_message = action_success(action, channel, message)
59
+ subscription = pubsub.send(action, channel, callback)
60
+ handle_redis_action(subscription, action, success_message)
61
+ end
62
+ end
63
+
64
+
65
+ def prepare_redis_action(action)
66
+ log_unsubscriptions(pubsub)
67
+ proc do |subscribed_message|
68
+ action_subscribe?(action) ? (@websocket << subscribed_message) : log_debug(message)
69
+ end
70
+ end
71
+
72
+ def log_unsubscriptions(pubsub)
73
+ pubsub.on(:unsubscribe) do |subscribed_channel, remaining_subscriptions|
74
+ log_debug [:unsubscribe_happened, subscribed_channel, remaining_subscriptions].inspect
75
+ end
76
+ end
77
+
78
+ def handle_redis_action(subscription, action, sucess_message = nil)
79
+ register_redis_callback(subscription, sucess_message)
80
+ register_redis_error_callback(subscription, action)
81
+ end
82
+
83
+ def register_redis_callback(subscription, sucess_message = nil)
84
+ subscription.callback do |subscriptions_ids|
85
+ if sucess_message.present?
86
+ @websocket << sucess_message.merge('subscriptions' => subscriptions_ids).to_json
87
+ else
88
+ log_debug "#{action} success #{success_response.inspect}"
89
+ end
90
+ end
91
+ end
92
+
93
+ def register_redis_error_callback(subscription, action)
94
+ subscription.errback { |reply| log_debug "#{action} error #{reply.inspect}" }
95
+ end
96
+ end
97
+ end
@@ -15,7 +15,7 @@ module CelluloidPubsub
15
15
  # major release version
16
16
  MAJOR = 0
17
17
  # minor release version
18
- MINOR = 2
18
+ MINOR = 3
19
19
  # tiny release version
20
20
  TINY = 0
21
21
  # prelease version ( set this only if it is a prelease)
@@ -1,4 +1,5 @@
1
1
  require_relative './reactor'
2
+ require_relative './helper'
2
3
  module CelluloidPubsub
3
4
  # webserver to which socket connects should connect to .
4
5
  # the server will dispatch each request into a new Reactor
@@ -30,6 +31,7 @@ module CelluloidPubsub
30
31
  # @return [Boolean] Enable this only if you want to enable debugging for the webserver
31
32
  class WebServer < Reel::Server::HTTP
32
33
  include Celluloid::Logger
34
+ include CelluloidPubsub::Helper
33
35
 
34
36
  # The hostname on which the webserver runs on by default
35
37
  HOST = '0.0.0.0'
@@ -54,11 +56,21 @@ module CelluloidPubsub
54
56
  #
55
57
  # :nocov:
56
58
  def initialize(options = {})
57
- options = options.is_a?(Array) ? options.first : options
58
- parse_options(options)
59
+ Celluloid.boot unless Celluloid.running?
60
+ @options = parse_options(options)
59
61
  @subscribers = {}
60
- info "CelluloidPubsub::WebServer example starting on #{@hostname}:#{@port}" if debug_enabled?
61
- super(@hostname, @port, { spy: @spy, backlog: @backlog }, &method(:on_connection))
62
+ setup_celluloid_logger
63
+ log_debug "CelluloidPubsub::WebServer example starting on #{hostname}:#{port}"
64
+ super(hostname, port, { spy: spy, backlog: backlog }, &method(:on_connection))
65
+ end
66
+
67
+ def use_redis
68
+ @use_redis ||= @options.fetch('use_redis', false)
69
+ end
70
+
71
+ def debug_enabled?
72
+ @debug_enabled = @options.fetch('enable_debug', false)
73
+ @debug_enabled == true
62
74
  end
63
75
 
64
76
  # the method will terminate the current actor
@@ -72,44 +84,34 @@ module CelluloidPubsub
72
84
  terminate
73
85
  end
74
86
 
75
- # :nocov:
87
+ def log_file_path
88
+ @log_file_path ||= @options.fetch('log_file_path', nil)
89
+ end
76
90
 
77
- # receives a list of options that are used to configure the webserver
78
- #
79
- # @param [Hash] options the options that can be used to connect to webser and send additional data
80
- # @option options [String]:hostname The hostname on which the webserver runs on
81
- # @option options [Integer] :port The port on which the webserver runs on
82
- # @option options [String] :path The request path that the webserver accepts
83
- # @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
84
- # @option options [Integer]:backlog How many connections the server accepts
85
- #
86
- # @return [void]
87
- #
88
- # @api public
89
- def parse_options(options)
90
- options = options.is_a?(Hash) ? options : {}
91
- @options = options.stringify_keys
92
- debug @options if debug_enabled?
93
- @backlog = @options.fetch('backlog', 1024)
94
- @hostname = @options.fetch('hostname', CelluloidPubsub::WebServer::HOST)
95
- @port = @options.fetch('port', CelluloidPubsub::WebServer::PORT)
96
- @path = @options.fetch('path', CelluloidPubsub::WebServer::PATH)
97
- @spy = @options.fetch('spy', false)
98
- @use_redis = @options.fetch('use_redis', false)
99
- @debug_enabled = @options.fetch('enable_debug', false)
91
+ def hostname
92
+ @hostname ||= @options.fetch('hostname', CelluloidPubsub::WebServer::HOST)
100
93
  end
101
94
 
102
- # checks if debug is enabled
103
- #
104
- # @return [boolean]
105
- #
106
- # @api public
107
- def debug_enabled?
108
- @debug_enabled.to_s == 'true'
95
+ def port
96
+ @port ||= @options.fetch('port', CelluloidPubsub::WebServer::PORT)
97
+ end
98
+
99
+ def path
100
+ @path ||= @options.fetch('path', CelluloidPubsub::WebServer::PATH)
101
+ end
102
+
103
+ def spy
104
+ @spy ||= @options.fetch('spy', false)
105
+ end
106
+
107
+ def backlog
108
+ @backlog = @options.fetch('backlog', 1024)
109
109
  end
110
110
 
111
+ # :nocov:
112
+
111
113
  def redis_enabled?
112
- @use_redis.to_s.downcase == 'true'
114
+ use_redis.to_s.downcase == 'true'
113
115
  end
114
116
 
115
117
  # method for publishing data to a channel
@@ -121,16 +123,27 @@ module CelluloidPubsub
121
123
  #
122
124
  # @api public
123
125
  def publish_event(current_topic, message)
124
- return if current_topic.blank? || message.blank?
125
126
  if redis_enabled?
126
- CelluloidPubsub::Redis.connection.publish(current_topic, message)
127
- elsif @subscribers[current_topic].present?
128
- @subscribers[current_topic].each do |hash|
129
- hash[:reactor].websocket << message
130
- end
127
+ publish_redis_event(current_topic, message)
128
+ else
129
+ publish_clasic_event(current_topic, message)
130
+ end
131
+ rescue => exception
132
+ log_debug("could not publish message #{message} into topic #{current_topic} because of #{exception.inspect}")
133
+ end
134
+
135
+ def publish_redis_event(topic, data)
136
+ return if !redis_enabled? || topic.blank? || data.blank?
137
+ CelluloidPubsub::Redis.connect do |connection|
138
+ connection.publish(topic, data)
139
+ end
140
+ end
141
+
142
+ def publish_clasic_event(channel, data)
143
+ return if channel.blank? || data.blank?
144
+ (@subscribers[channel] || []).each do |hash|
145
+ hash[:reactor].websocket << data
131
146
  end
132
- rescue => e
133
- debug("could not publish message #{message} into topic #{current_topic} because of #{e.inspect}") if debug_enabled?
134
147
  end
135
148
 
136
149
  # callback that will execute when receiving new conections
@@ -149,7 +162,7 @@ module CelluloidPubsub
149
162
  def on_connection(connection)
150
163
  while request = connection.request
151
164
  if request.websocket?
152
- info "#{self.class} Received a WebSocket connection" if debug_enabled?
165
+ log_debug "#{self.class} Received a WebSocket connection"
153
166
 
154
167
  # We're going to hand off this connection to another actor (Writer/Reader)
155
168
  # However, initially Reel::Connections are "attached" to the
@@ -159,7 +172,7 @@ module CelluloidPubsub
159
172
  # If we want to hand this connection off to another actor, we first
160
173
  # need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
161
174
  connection.detach
162
- route_websocket(request.websocket)
175
+ dispatch_websocket_request(request)
163
176
  return
164
177
  else
165
178
  route_request connection, request
@@ -167,6 +180,16 @@ module CelluloidPubsub
167
180
  end
168
181
  end
169
182
 
183
+ def reactor_class
184
+ redis_enabled? ? CelluloidPubsub::RedisReactor : CelluloidPubsub::Reactor
185
+ end
186
+
187
+ def dispatch_websocket_request(request)
188
+ reactor = reactor_class.new
189
+ Actor.current.link reactor
190
+ route_websocket(reactor, request.websocket)
191
+ end
192
+
170
193
  # HTTP connections are not accepted so this method will show 404 message "Not Found"
171
194
  #
172
195
  # @param [Reel::WebSocket] connection The HTTP connection that was received
@@ -176,7 +199,7 @@ module CelluloidPubsub
176
199
  #
177
200
  # @api public
178
201
  def route_request(connection, request)
179
- info "404 Not Found: #{request.path}" if debug_enabled?
202
+ log_debug "404 Not Found: #{request.path}"
180
203
  connection.respond :not_found, 'Not found'
181
204
  end
182
205
 
@@ -190,14 +213,12 @@ module CelluloidPubsub
190
213
  # @return [void]
191
214
  #
192
215
  # @api public
193
- def route_websocket(socket)
194
- if socket.url == @path
195
- reactor = redis_enabled? ? CelluloidPubsub::RedisReactor.new : CelluloidPubsub::Reactor.new
196
- info "#{reactor.class} handles new socket connection" if debug_enabled?
197
- Actor.current.link reactor
216
+ def route_websocket(reactor, socket)
217
+ url = socket.url
218
+ if url == path
198
219
  reactor.async.work(socket, Actor.current)
199
220
  else
200
- info "Received invalid WebSocket request for: #{socket.url}" if debug_enabled?
221
+ log_debug "Received invalid WebSocket request for: #{url}"
201
222
  socket.close
202
223
  end
203
224
  end
@@ -212,14 +233,14 @@ module CelluloidPubsub
212
233
  #
213
234
  # @api public
214
235
  def handle_dispatched_message(reactor, data)
215
- debug "#{self.class} trying to dispatch message #{data.inspect}" if debug_enabled?
236
+ log_debug "#{self.class} trying to dispatch message #{data.inspect}"
216
237
  message = reactor.parse_json_data(data)
217
238
  if message.present? && message.is_a?(Hash)
218
- reactor.websocket << message.to_json
239
+ final_data = message.to_json
219
240
  else
220
- reactor.websocket << data.to_json
241
+ final_data data.to_json
221
242
  end
243
+ reactor.websocket << final_data
222
244
  end
223
-
224
245
  end
225
246
  end
@@ -5,19 +5,19 @@ require 'spec_helper'
5
5
  describe CelluloidPubsub::Client do
6
6
  let(:blk) { proc { |a| puts a } }
7
7
  let(:options) { {} }
8
- let(:socket) { mock }
9
8
  let(:actor) { mock }
10
9
  let(:connection) { mock }
11
10
  let(:channel) { 'some_channel' }
12
11
 
13
12
  before(:each) do
14
- Celluloid::WebSocket::Client.stubs(:new).returns(connection)
15
- @worker = CelluloidPubsub::Client.new({ 'actor' => actor, channel: channel, enable_debug: true }, &blk)
16
- @worker.stubs(:client).returns(socket)
13
+ CelluloidPubsub::Client.any_instance.stubs(:supervise_actors).returns(true)
14
+ CelluloidPubsub::Client.any_instance.stubs(:connection).returns(connection)
15
+ @worker = CelluloidPubsub::Client.new(actor: actor, channel: channel, enable_debug: false)
17
16
  @worker.stubs(:debug).returns(true)
18
17
  @worker.stubs(:async).returns(@worker)
19
18
  actor.stubs(:async).returns(actor)
20
- socket.stubs(:terminate).returns(true)
19
+ actor.stubs(:respond_to?).returns(false)
20
+ actor.stubs(:terminate).returns(true)
21
21
  connection.stubs(:terminate).returns(true)
22
22
  connection.stubs(:text).returns(true)
23
23
  end
@@ -56,7 +56,7 @@ describe CelluloidPubsub::Client do
56
56
  describe '#debug_enabled?' do
57
57
  it 'checks if debug is enabled' do
58
58
  act = @worker.debug_enabled?
59
- expect(act).to eq(true)
59
+ expect(act).to eq(false)
60
60
  end
61
61
  end
62
62
 
@@ -12,7 +12,9 @@ describe CelluloidPubsub::Reactor do
12
12
  server.stubs(:async).returns(server)
13
13
  server.stubs(:handle_dispatched_message)
14
14
  server.stubs(:subscribers).returns({})
15
+ server.stubs(:redis_enabled?).returns(false)
15
16
  websocket.stubs(:read)
17
+ websocket.stubs(:url)
16
18
  subject.stubs(:inspect).returns(subject)
17
19
  subject.stubs(:run)
18
20
  subject.work(websocket, server)
data/spec/spec_helper.rb CHANGED
@@ -44,11 +44,3 @@ RSpec.configure do |config|
44
44
  end
45
45
  end
46
46
  end
47
-
48
- # class used for testing actions
49
- class TestActor
50
- include Celluloid
51
- include Celluloid::Logger
52
- end
53
-
54
- TestActor.supervise_as(:test_actor)