celluloid_pubsub 0.0.22 → 0.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
  SHA1:
3
- metadata.gz: fe9b479edc8ae87669502df2e243351d4e1ed661
4
- data.tar.gz: 9334f13ffee94e5a64a849a079fdea00883e1964
3
+ metadata.gz: 81bb4bf2f3f59d8e2cea33053a7f89efb5af637d
4
+ data.tar.gz: 640efba60772877db2fdd2839b1359cc84578b19
5
5
  SHA512:
6
- metadata.gz: c27edb339198ab3c647ae1421be96d3a1df46db3675907a8003d376d9176eafc8a0c17ef94235301c7ca19e0e18025f79cdc593346f205a20e0419d4f418152b
7
- data.tar.gz: 208896557d1b7f8fe364a721bf9a49460853754470d491426d61fe067c03cb1a768632235d4066a98b9e1a8ebf7ac5faee8c927144e03296df90b3a762010220
6
+ metadata.gz: 70f8af8310490d573cbdb09b457da8695f91a7581e274e6793e0945a3f16a5021cad452f69165d874ae2714fe74d24545c775ed0a61dfaf856630700cd47bf8d
7
+ data.tar.gz: d4ff8d15ddbf405e136bbc0b17f502dc6ec4843f7e1ac7170711d45f57b3484762b7ed458a89392ed9fd2c330aa2f18fdff41784e7bbd53e8968d86e4de4fe73
@@ -16,11 +16,11 @@ 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', '~> 0.16', '~> 0.16.0'
19
+ s.add_runtime_dependency 'celluloid', '~> 0.16', '~> 0.16.0' # TODO: upgrade to version 0.17 - work in progress
20
20
  s.add_runtime_dependency 'celluloid-io', '~> 0.16', '>= 0.16.2'
21
21
  s.add_runtime_dependency 'reel', '~> 0.5', '>= 0.5.0'
22
- s.add_runtime_dependency 'http', '~> 0.9.8', '>= 0.9.8' # TODO: remove this once fixed in reel gem
23
- s.add_runtime_dependency 'celluloid-websocket-client', '0.0.1'
22
+ s.add_runtime_dependency 'http', '~> 0.9.8', '>= 0.9.8' # TODO: remove this once fixed in reel gem ( waiting for version 0.6.0 of reel to be stable)
23
+ s.add_runtime_dependency 'celluloid-websocket-client', '~> 0.0', '>= 0.0.1'
24
24
  s.add_runtime_dependency 'activesupport', '~> 4.1', '>= 4.1.0'
25
25
 
26
26
  s.add_development_dependency 'rspec-rails', '~> 3.3', '>= 3.3'
@@ -19,7 +19,7 @@ class Subscriber
19
19
  include Celluloid::Logger
20
20
 
21
21
  def initialize(options = {})
22
- @client = CelluloidPubsub::Client.connect({ actor: Actor.current, channel: 'test_channel' }.merge(options))
22
+ @client = CelluloidPubsub::Client.new({ actor: Actor.current, channel: 'test_channel' }.merge(options))
23
23
  end
24
24
 
25
25
  def on_message(message)
@@ -44,7 +44,7 @@ class Publisher
44
44
  include Celluloid::Logger
45
45
 
46
46
  def initialize(options = {})
47
- @client = CelluloidPubsub::Client.connect({ actor: Actor.current, channel: 'test_channel2' }.merge(options))
47
+ @client = CelluloidPubsub::Client.new({ actor: Actor.current, channel: 'test_channel2' }.merge(options))
48
48
  @client.publish('test_channel', 'data' => 'my_message') # the message needs to be a Hash
49
49
  end
50
50
 
@@ -1,254 +1,232 @@
1
1
  module CelluloidPubsub
2
- # class used to make a new connection in order to subscribe or publish to a channel
2
+ # worker that subscribes to a channel or publishes to a channel
3
+ # if it used to subscribe to a channel the worker will dispatch the messages to the actor that made the
4
+ # connection in the first place.
5
+ #
6
+ # @!attribute actor
7
+ # @return [Celluloid::Actor] actor to which callbacks will be delegated to
8
+ #
9
+ # @!attribute connect_blk
10
+ # @return [Proc] Block that will execute after the connection is opened
11
+ #
12
+ # @!attribute client
13
+ # @return [Celluloid::WebSocket::Client] A websocket client that is used to chat witht the webserver
14
+ #
15
+ # @!attribute options
16
+ # @return [Hash] the options that can be used to connect to webser and send additional data
17
+ #
18
+ # @!attribute hostname
19
+ # @return [String] The hostname on which the webserver runs on
20
+ #
21
+ # @!attribute port
22
+ # @return [String] The port on which the webserver runs on
23
+ #
24
+ # @!attribute path
25
+ # @return [String] The hostname on which the webserver runs on
3
26
  class Client
4
- # worker that subscribes to a channel or publishes to a channel
5
- # if it used to subscribe to a channel the worker will dispatch the messages to the actor that made the
6
- # connection in the first place.
27
+ include Celluloid
28
+ include Celluloid::Logger
29
+ attr_accessor :actor, :client, :options, :hostname, :port, :path, :channel
30
+
31
+ # receives a list of options that are used to connect to the webserver and an actor to which the callbacks are delegated to
32
+ # when receiving messages from a channel
7
33
  #
8
- # @!attribute actor
9
- # @return [Celluloid::Actor] actor to which callbacks will be delegated to
34
+ # @param [Hash] options the options that can be used to connect to webser and send additional data
35
+ # @option options [String] :actor The actor that made the connection
36
+ # @option options [String]:hostname The hostname on which the webserver runs on
37
+ # @option options [String] :port The port on which the webserver runs on
38
+ # @option options [String] :path The request path that the webserver accepts
10
39
  #
11
- # @!attribute connect_blk
12
- # @return [Proc] Block that will execute after the connection is opened
40
+ # @param [Proc] connect_blk Block that will execute after the connection is opened
13
41
  #
14
- # @!attribute client
15
- # @return [Celluloid::WebSocket::Client] A websocket client that is used to chat witht the webserver
42
+ # @return [void]
16
43
  #
17
- # @!attribute options
18
- # @return [Hash] the options that can be used to connect to webser and send additional data
44
+ # @api public
45
+ def initialize(options)
46
+ parse_options(options)
47
+ raise "#{self}: Please provide an actor in the options list!!!" if @actor.blank?
48
+ raise "#{self}: Please provide an channel in the options list!!!" if @channel.blank?
49
+ @client = Celluloid::WebSocket::Client.new("ws://#{@hostname}:#{@port}#{@path}", Actor.current)
50
+ end
51
+
52
+ # check the options list for values and sets default values if not found
19
53
  #
20
- # @!attribute hostname
21
- # @return [String] The hostname on which the webserver runs on
54
+ # @param [Hash] options the options that can be used to connect to webser and send additional data
55
+ # @option options [String] :actor The actor that made the connection
56
+ # @option options [String]:hostname The hostname on which the webserver runs on
57
+ # @option options [String] :port The port on which the webserver runs on
58
+ # @option options [String] :path The request path that the webserver accepts
22
59
  #
23
- # @!attribute port
24
- # @return [String] The port on which the webserver runs on
60
+ # @return [void]
25
61
  #
26
- # @!attribute path
27
- # @return [String] The hostname on which the webserver runs on
28
- class PubSubWorker
29
- include Celluloid
30
- include Celluloid::Logger
31
- attr_accessor :actor, :client, :options, :hostname, :port, :path, :channel
32
-
33
- # receives a list of options that are used to connect to the webserver and an actor to which the callbacks are delegated to
34
- # when receiving messages from a channel
35
- #
36
- # @param [Hash] options the options that can be used to connect to webser and send additional data
37
- # @option options [String] :actor The actor that made the connection
38
- # @option options [String]:hostname The hostname on which the webserver runs on
39
- # @option options [String] :port The port on which the webserver runs on
40
- # @option options [String] :path The request path that the webserver accepts
41
- #
42
- # @param [Proc] connect_blk Block that will execute after the connection is opened
43
- #
44
- # @return [void]
45
- #
46
- # @api public
47
- def initialize(options)
48
- parse_options(options)
49
- raise "#{self}: Please provide an actor in the options list!!!" if @actor.blank?
50
- raise "#{self}: Please provide an channel in the options list!!!" if @channel.blank?
51
- @client = Celluloid::WebSocket::Client.new("ws://#{@hostname}:#{@port}#{@path}", Actor.current)
52
- end
53
-
54
- # check the options list for values and sets default values if not found
55
- #
56
- # @param [Hash] options the options that can be used to connect to webser and send additional data
57
- # @option options [String] :actor The actor that made the connection
58
- # @option options [String]:hostname The hostname on which the webserver runs on
59
- # @option options [String] :port The port on which the webserver runs on
60
- # @option options [String] :path The request path that the webserver accepts
61
- #
62
- # @return [void]
63
- #
64
- # @api public
65
- def parse_options(options)
66
- raise 'Options is not a hash' unless options.is_a?(Hash)
67
- @options = options.stringify_keys!
68
- @actor = @options.fetch('actor', nil)
69
- @channel = @options.fetch('channel', nil)
70
- @hostname = @options.fetch('hostname', CelluloidPubsub::WebServer::HOST)
71
- @port = @options.fetch('port', CelluloidPubsub::WebServer::PORT)
72
- @path = @options.fetch('path', CelluloidPubsub::WebServer::PATH)
73
- end
74
-
75
- # checks if debug is enabled
76
- #
77
- #
78
- # @return [boolean]
79
- #
80
- # @api public
81
- def debug_enabled?
82
- @options.fetch('enable_debug', false).to_s == 'true'
83
- end
62
+ # @api public
63
+ def parse_options(options)
64
+ raise 'Options is not a hash' unless options.is_a?(Hash)
65
+ @options = options.stringify_keys!
66
+ @actor = @options.fetch('actor', nil)
67
+ @channel = @options.fetch('channel', nil)
68
+ @hostname = @options.fetch('hostname', CelluloidPubsub::WebServer::HOST)
69
+ @port = @options.fetch('port', CelluloidPubsub::WebServer::PORT)
70
+ @path = @options.fetch('path', CelluloidPubsub::WebServer::PATH)
71
+ end
84
72
 
85
- # subscribes to a channel . need to be used inside the connect block passed to the actor
86
- #
87
- # @param [string] channel
88
- #
89
- # @return [void]
90
- #
91
- # @api public
92
- def subscribe(channel)
93
- subscription_data = { 'client_action' => 'subscribe', 'channel' => channel }
94
- debug("#{self.class} tries to subscribe #{subscription_data}") if debug_enabled?
95
- async.chat(subscription_data)
96
- end
73
+ # checks if debug is enabled
74
+ #
75
+ #
76
+ # @return [boolean]
77
+ #
78
+ # @api public
79
+ def debug_enabled?
80
+ @options.fetch('enable_debug', false).to_s == 'true'
81
+ end
97
82
 
98
- # checks if the message has the successfull subscription action
99
- #
100
- # @param [string] message
101
- #
102
- # @return [void]
103
- #
104
- # @api public
105
- def succesfull_subscription?(message)
106
- message.present? && message['client_action'].present? && message['client_action'] == 'successful_subscription'
107
- end
83
+ # subscribes to a channel . need to be used inside the connect block passed to the actor
84
+ #
85
+ # @param [string] channel
86
+ #
87
+ # @return [void]
88
+ #
89
+ # @api public
90
+ def subscribe(channel)
91
+ subscription_data = { 'client_action' => 'subscribe', 'channel' => channel }
92
+ debug("#{self.class} tries to subscribe #{subscription_data}") if debug_enabled?
93
+ async.chat(subscription_data)
94
+ end
108
95
 
109
- # publishes to a channel some data (can be anything)
110
- #
111
- # @param [string] channel
112
- # @param [#to_s] data
113
- #
114
- # @return [void]
115
- #
116
- # @api public
117
- def publish(channel, data)
118
- send_action('publish', channel, data)
119
- end
96
+ # checks if the message has the successfull subscription action
97
+ #
98
+ # @param [string] message
99
+ #
100
+ # @return [void]
101
+ #
102
+ # @api public
103
+ def succesfull_subscription?(message)
104
+ message.present? && message['client_action'].present? && message['client_action'] == 'successful_subscription'
105
+ end
120
106
 
121
- # unsubscribes current client from a channel
122
- #
123
- # @param [string] channel
124
- #
125
- # @return [void]
126
- #
127
- # @api public
128
- def unsubscribe(channel)
129
- send_action('unsubscribe', channel)
130
- end
107
+ # publishes to a channel some data (can be anything)
108
+ #
109
+ # @param [string] channel
110
+ # @param [#to_s] data
111
+ #
112
+ # @return [void]
113
+ #
114
+ # @api public
115
+ def publish(channel, data)
116
+ send_action('publish', channel, data)
117
+ end
131
118
 
132
- # unsubscribes all clients subscribed to a channel
133
- #
134
- # @param [string] channel
135
- #
136
- # @return [void]
137
- #
138
- # @api public
139
- def unsubscribe_clients(channel)
140
- send_action('unsubscribe_clients', channel)
141
- end
119
+ # unsubscribes current client from a channel
120
+ #
121
+ # @param [string] channel
122
+ #
123
+ # @return [void]
124
+ #
125
+ # @api public
126
+ def unsubscribe(channel)
127
+ send_action('unsubscribe', channel)
128
+ end
142
129
 
143
- # unsubscribes all clients from all channels
144
- #
145
- # @return [void]
146
- #
147
- # @api public
148
- def unsubscribe_all
149
- send_action('unsubscribe_all')
150
- end
130
+ # unsubscribes all clients subscribed to a channel
131
+ #
132
+ # @param [string] channel
133
+ #
134
+ # @return [void]
135
+ #
136
+ # @api public
137
+ def unsubscribe_clients(channel)
138
+ send_action('unsubscribe_clients', channel)
139
+ end
151
140
 
152
- # callback executes after connection is opened and delegates action to actor
153
- #
154
- # @return [void]
155
- #
156
- # @api public
157
- def on_open
158
- debug("#{self.class} websocket connection opened") if debug_enabled?
159
- async.subscribe(@channel)
160
- end
141
+ # unsubscribes all clients from all channels
142
+ #
143
+ # @return [void]
144
+ #
145
+ # @api public
146
+ def unsubscribe_all
147
+ send_action('unsubscribe_all')
148
+ end
161
149
 
162
- # callback executes when actor receives a message from a subscribed channel
163
- # and parses the message using JSON.parse and dispatches the parsed
164
- # message to the original actor that made the connection
165
- #
166
- # @param [JSON] data
167
- #
168
- # @return [void]
169
- #
170
- # @api public
171
- def on_message(data)
172
- debug("#{self.class} received plain #{data}") if debug_enabled?
173
- message = JSON.parse(data)
174
- debug("#{self.class} received JSON #{message}") if debug_enabled?
175
- @actor.async.on_message(message)
176
- end
150
+ # callback executes after connection is opened and delegates action to actor
151
+ #
152
+ # @return [void]
153
+ #
154
+ # @api public
155
+ def on_open
156
+ debug("#{self.class} websocket connection opened") if debug_enabled?
157
+ async.subscribe(@channel)
158
+ end
177
159
 
178
- # callback executes when connection closes
179
- #
180
- # @param [String] code
181
- #
182
- # @param [String] reason
183
- #
184
- # @return [void]
185
- #
186
- # @api public
187
- def on_close(code, reason)
188
- @client.terminate
189
- terminate
190
- debug("#{self.class} dispatching on close #{code} #{reason}") if debug_enabled?
191
- @actor.async.on_close(code, reason)
192
- end
160
+ # callback executes when actor receives a message from a subscribed channel
161
+ # and parses the message using JSON.parse and dispatches the parsed
162
+ # message to the original actor that made the connection
163
+ #
164
+ # @param [JSON] data
165
+ #
166
+ # @return [void]
167
+ #
168
+ # @api public
169
+ def on_message(data)
170
+ debug("#{self.class} received plain #{data}") if debug_enabled?
171
+ message = JSON.parse(data)
172
+ debug("#{self.class} received JSON #{message}") if debug_enabled?
173
+ @actor.async.on_message(message)
174
+ end
193
175
 
194
- private
176
+ # callback executes when connection closes
177
+ #
178
+ # @param [String] code
179
+ #
180
+ # @param [String] reason
181
+ #
182
+ # @return [void]
183
+ #
184
+ # @api public
185
+ def on_close(code, reason)
186
+ @client.terminate
187
+ terminate
188
+ debug("#{self.class} dispatching on close #{code} #{reason}") if debug_enabled?
189
+ @actor.async.on_close(code, reason)
190
+ end
195
191
 
196
- # method used to send an action to the webserver reactor , to a chanel and with data
197
- #
198
- # @param [String] action
199
- # @param [String] channel
200
- # @param [Hash] data
201
- #
202
- # @return [void]
203
- #
204
- # @api private
205
- def send_action(action, channel = nil, data = {})
206
- publishing_data = { 'client_action' => action }
207
- publishing_data = publishing_data.merge('channel' => channel) if channel.present?
208
- publishing_data = publishing_data.merge('data' => data) if data.present?
209
- debug(" #{self.class} sends: #{publishing_data}") if debug_enabled?
210
- async.chat(publishing_data)
211
- end
192
+ private
212
193
 
213
- # method used to send messages to the webserver
214
- # checks too see if the message is a hash and if it is it will transform it to JSON and send it to the webser
215
- # otherwise will construct a JSON object that will have the key action with the value 'message" and the key message witth the parameter's value
216
- #
217
- # @param [Hash] message
218
- #
219
- # @return [void]
220
- #
221
- # @api private
222
- def chat(message)
223
- final_message = nil
224
- if message.is_a?(Hash)
225
- debug("#{self.class} sends #{message.to_json}") if debug_enabled?
226
- final_message = message.to_json
227
- else
228
- text_messsage = JSON.dump(action: 'message', message: message)
229
- debug("#{self.class} sends JSON #{text_messsage}") if debug_enabled?
230
- final_message = text_messsage
231
- end
232
- @client.text final_message
233
- end
194
+ # method used to send an action to the webserver reactor , to a chanel and with data
195
+ #
196
+ # @param [String] action
197
+ # @param [String] channel
198
+ # @param [Hash] data
199
+ #
200
+ # @return [void]
201
+ #
202
+ # @api private
203
+ def send_action(action, channel = nil, data = {})
204
+ publishing_data = { 'client_action' => action }
205
+ publishing_data = publishing_data.merge('channel' => channel) if channel.present?
206
+ publishing_data = publishing_data.merge('data' => data) if data.present?
207
+ debug(" #{self.class} sends: #{publishing_data}") if debug_enabled?
208
+ async.chat(publishing_data)
234
209
  end
235
210
 
236
- # method used to make a new connection to the webserver
237
- # after the connection is opened it will execute the block that is passed as argument
211
+ # method used to send messages to the webserver
212
+ # checks too see if the message is a hash and if it is it will transform it to JSON and send it to the webser
213
+ # otherwise will construct a JSON object that will have the key action with the value 'message" and the key message witth the parameter's value
238
214
  #
239
- # @param [Hash] options the options that can be used to connect to webser and send additional data
240
- # @option options [String] :actor The actor that made the connection
241
- # @option options [String]:hostname The hostname on which the webserver runs on
242
- # @option options [String] :port The port on which the webserver runs on
243
- # @option options [String] :path The request path that the webserver accepts
244
- #
245
- # @param [Proc] connect_blk Block that will execute after the connection is opened
215
+ # @param [Hash] message
246
216
  #
247
- # @return [CelluloidPubsub::Client::PubSubWorker]
217
+ # @return [void]
248
218
  #
249
- # @api public
250
- def self.connect(options = {})
251
- CelluloidPubsub::Client::PubSubWorker.new(options)
219
+ # @api private
220
+ def chat(message)
221
+ final_message = nil
222
+ if message.is_a?(Hash)
223
+ final_message = message.to_json
224
+ debug("#{self.class} sends #{message.to_json}") if debug_enabled?
225
+ else
226
+ final_message = JSON.dump(action: 'message', message: message)
227
+ debug("#{self.class} sends JSON #{final_message}") if debug_enabled?
228
+ end
229
+ @client.text final_message
252
230
  end
253
231
  end
254
232
  end
@@ -15,9 +15,9 @@ module CelluloidPubsub
15
15
  # major release version
16
16
  MAJOR = 0
17
17
  # minor release version
18
- MINOR = 0
18
+ MINOR = 1
19
19
  # tiny release version
20
- TINY = 22
20
+ TINY = 0
21
21
  # prelease version ( set this only if it is a prelease)
22
22
  PRE = nil
23
23
 
@@ -3,32 +3,23 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe CelluloidPubsub::Client do
6
- let(:options) { {} }
7
- let(:blk) { proc { |a| puts a } }
8
-
9
- it 'runs the connect method' do
10
- expected = nil
11
- CelluloidPubsub::Client::PubSubWorker.stubs(:new).returns(expected)
12
- res = CelluloidPubsub::Client.connect(options, &blk)
13
- expect(res).to eq expected
14
- end
15
- end
16
-
17
- describe CelluloidPubsub::Client::PubSubWorker do
18
6
  let(:blk) { proc { |a| puts a } }
19
7
  let(:options) { {} }
20
8
  let(:socket) { mock }
21
9
  let(:actor) { mock }
10
+ let(:connection) { mock }
22
11
  let(:channel) { 'some_channel' }
23
12
 
24
13
  before(:each) do
25
- Celluloid::WebSocket::Client.stubs(:new).returns(socket)
26
- socket.stubs(:text)
27
- @worker = CelluloidPubsub::Client::PubSubWorker.new({ 'actor' => actor, channel: channel, enable_debug: true }, &blk)
14
+ Celluloid::WebSocket::Client.stubs(:new).returns(connection)
15
+ @worker = CelluloidPubsub::Client.new({ 'actor' => actor, channel: channel, enable_debug: true }, &blk)
28
16
  @worker.stubs(:client).returns(socket)
29
- @worker.stubs(:debug)
17
+ @worker.stubs(:debug).returns(true)
30
18
  @worker.stubs(:async).returns(@worker)
31
19
  actor.stubs(:async).returns(actor)
20
+ socket.stubs(:terminate).returns(true)
21
+ connection.stubs(:terminate).returns(true)
22
+ connection.stubs(:text).returns(true)
32
23
  end
33
24
 
34
25
  describe '#initialize' do
@@ -132,12 +123,11 @@ describe CelluloidPubsub::Client::PubSubWorker do
132
123
 
133
124
  describe '#on_close' do
134
125
  let(:channel) { 'some_channel' }
135
- let(:code) { 'some_message' }
136
- let(:reason) { 'some reason' }
126
+ let(:code) { 'some_code' }
127
+ let(:reason) { 'some_reason' }
137
128
 
138
129
  it 'chats with the server' do
139
- @worker.client.expects(:terminate)
140
- @worker.actor.expects(:on_close).with(code, reason)
130
+ actor.expects(:on_close).with(code, reason).returns(true)
141
131
  @worker.on_close(code, reason)
142
132
  end
143
133
  end
@@ -149,12 +139,12 @@ describe CelluloidPubsub::Client::PubSubWorker do
149
139
  let(:json) { { action: 'message', message: data } }
150
140
  it 'chats witout hash' do
151
141
  JSON.expects(:dump).with(json).returns(json)
152
- @worker.client.expects(:text).with(json)
142
+ connection.expects(:text).with(json)
153
143
  @worker.send(:chat, data)
154
144
  end
155
145
 
156
146
  it 'chats with a hash' do
157
- @worker.client.expects(:text).with(data_hash.to_json)
147
+ connection.expects(:text).with(data_hash.to_json)
158
148
  @worker.send(:chat, data_hash)
159
149
  end
160
150
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: celluloid_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.22
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bogdanRada
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-07 00:00:00.000000000 Z
11
+ date: 2015-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -94,14 +94,20 @@ dependencies:
94
94
  name: celluloid-websocket-client
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '='
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '0.0'
100
+ - - ">="
98
101
  - !ruby/object:Gem::Version
99
102
  version: 0.0.1
100
103
  type: :runtime
101
104
  prerelease: false
102
105
  version_requirements: !ruby/object:Gem::Requirement
103
106
  requirements:
104
- - - '='
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.0'
110
+ - - ">="
105
111
  - !ruby/object:Gem::Version
106
112
  version: 0.0.1
107
113
  - !ruby/object:Gem::Dependency