dripdrop 0.8.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -14,9 +14,9 @@ begin
14
14
  gem.add_dependency('eventmachine')
15
15
  gem.add_dependency('em-websocket')
16
16
  gem.add_dependency('thin')
17
- gem.add_dependency('zmqmachine')
17
+ gem.add_dependency('em-zeromq')
18
18
  gem.add_dependency('msgpack')
19
- gem.add_dependency('json')
19
+ gem.add_dependency('yajl-ruby')
20
20
  end
21
21
  Jeweler::GemcutterTasks.new
22
22
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.1
1
+ 0.9.2
data/dripdrop.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dripdrop}
8
- s.version = "0.8.1"
8
+ s.version = "0.9.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Cholakian"]
12
- s.date = %q{2011-01-30}
12
+ s.date = %q{2011-02-01}
13
13
  s.description = %q{Evented framework for ZeroMQ and EventMachine Apps. }
14
14
  s.email = %q{andrew@andrewvc.com}
15
15
  s.extra_rdoc_files = [
@@ -88,26 +88,26 @@ Gem::Specification.new do |s|
88
88
  s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
89
89
  s.add_runtime_dependency(%q<em-websocket>, [">= 0"])
90
90
  s.add_runtime_dependency(%q<thin>, [">= 0"])
91
- s.add_runtime_dependency(%q<zmqmachine>, [">= 0"])
91
+ s.add_runtime_dependency(%q<em-zeromq>, [">= 0"])
92
92
  s.add_runtime_dependency(%q<msgpack>, [">= 0"])
93
- s.add_runtime_dependency(%q<json>, [">= 0"])
93
+ s.add_runtime_dependency(%q<yajl-ruby>, [">= 0"])
94
94
  else
95
95
  s.add_dependency(%q<ffi-rzmq>, [">= 0"])
96
96
  s.add_dependency(%q<eventmachine>, [">= 0"])
97
97
  s.add_dependency(%q<em-websocket>, [">= 0"])
98
98
  s.add_dependency(%q<thin>, [">= 0"])
99
- s.add_dependency(%q<zmqmachine>, [">= 0"])
99
+ s.add_dependency(%q<em-zeromq>, [">= 0"])
100
100
  s.add_dependency(%q<msgpack>, [">= 0"])
101
- s.add_dependency(%q<json>, [">= 0"])
101
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
102
102
  end
103
103
  else
104
104
  s.add_dependency(%q<ffi-rzmq>, [">= 0"])
105
105
  s.add_dependency(%q<eventmachine>, [">= 0"])
106
106
  s.add_dependency(%q<em-websocket>, [">= 0"])
107
107
  s.add_dependency(%q<thin>, [">= 0"])
108
- s.add_dependency(%q<zmqmachine>, [">= 0"])
108
+ s.add_dependency(%q<em-zeromq>, [">= 0"])
109
109
  s.add_dependency(%q<msgpack>, [">= 0"])
110
- s.add_dependency(%q<json>, [">= 0"])
110
+ s.add_dependency(%q<yajl-ruby>, [">= 0"])
111
111
  end
112
112
  end
113
113
 
data/example/pushpull.rb CHANGED
@@ -13,7 +13,7 @@ DripDrop::Node.new do
13
13
  push = zmq_push(z_addr, :bind)
14
14
 
15
15
  i = 0
16
- zm_reactor.periodical_timer(800) do
16
+ EM::PeriodicTimer.new(1) do
17
17
  i += 1
18
18
  puts i
19
19
  push.send_message(:name => 'test', :body => "Test Payload #{i}")
data/example/xreq_xrep.rb CHANGED
@@ -11,7 +11,7 @@ DripDrop::Node.new do
11
11
  end
12
12
 
13
13
  i = 0; k = 0
14
- zm_reactor.periodical_timer(1000) do
14
+ EM::PeriodicTimer.new(1) do
15
15
  i += 1; k += 1
16
16
 
17
17
  xreq_client.send_message(:name => 'test', :body => "Test Payload i#{i}") do |message|
@@ -1,6 +1,5 @@
1
1
  require 'thin'
2
2
  require 'thin_parser'
3
- require 'json'
4
3
 
5
4
  class DripDrop
6
5
  class HTTPDeferrableBody < BaseHandler
@@ -1,6 +1,8 @@
1
1
  require 'ffi-rzmq'
2
+ require 'em-zeromq'
2
3
 
3
4
  class DripDrop
5
+
4
6
  #Setup the default message class handler first
5
7
  class << self
6
8
  attr_accessor :default_message_class
@@ -9,26 +11,12 @@ class DripDrop
9
11
  end
10
12
 
11
13
  class ZMQBaseHandler < BaseHandler
12
- attr_reader :address, :socket_ctype, :socket
13
-
14
- def initialize(zaddress,zm_reactor,socket_ctype,opts={})
15
- @zaddress = zaddress
16
- @address = @zaddress.to_s
17
- @zm_reactor = zm_reactor
18
- @socket_ctype = socket_ctype # :bind or :connect
19
- @debug = opts[:debug] # TODO: Start actually using this
20
- @opts = opts
21
- end
14
+ attr_accessor :connection
22
15
 
23
- def on_attach(socket)
24
- @socket = socket
25
- if @socket_ctype == :bind
26
- socket.bind(@zaddress)
27
- elsif @socket_ctype == :connect
28
- socket.connect(@zaddress)
29
- else
30
- EM.next_tick { raise "Unsupported socket ctype '#{@socket_ctype}'. Expected :bind or :connect" }
31
- end
16
+ def initialize(opts={})
17
+ @opts = opts
18
+ @connection = nil
19
+ @msg_format = opts[:msg_format] || :dripdrop
32
20
  end
33
21
 
34
22
  def on_recv(msg_format=:dripdrop,&block)
@@ -36,6 +24,13 @@ class DripDrop
36
24
  @recv_cbak = block
37
25
  self
38
26
  end
27
+
28
+ def address
29
+ self.connection.address
30
+ end
31
+
32
+ #Triggered after a handler is setup
33
+ def post_setup; end
39
34
  end
40
35
 
41
36
  module ZMQWritableHandler
@@ -51,20 +46,20 @@ class DripDrop
51
46
  num_parts = message.length
52
47
  message.each_with_index do |part,i|
53
48
  # Set the multi-part flag unless this is the last message
54
- multipart_flag = i + 1 < num_parts ? true : false
49
+ multipart_flag = i + 1 < num_parts ? ZMQ::SNDMORE : 0
55
50
 
56
51
  if part.class == ZMQ::Message
57
- socket.send_message(part, multipart_flag)
52
+ socket.send(part, multipart_flag)
58
53
  else
59
54
  if part.class == String
60
- socket.send_message_string(part, multipart_flag)
55
+ socket.send_string(part, multipart_flag)
61
56
  else
62
57
  $stderr.write "Can only send Strings, not #{part.class}: #{part}" if @debug
63
58
  end
64
59
  end
65
60
  end
66
61
  else
67
- @zm_reactor.deregister_writable(socket)
62
+ @connection.deregister_writable
68
63
  end
69
64
  end
70
65
 
@@ -81,7 +76,7 @@ class DripDrop
81
76
  else
82
77
  @send_queue.push([message])
83
78
  end
84
- @zm_reactor.register_writable(@socket)
79
+ @connection.register_writable
85
80
  end
86
81
  end
87
82
 
@@ -98,18 +93,16 @@ class DripDrop
98
93
  end
99
94
 
100
95
  def on_readable(socket, messages)
101
- EM.next_tick {
102
- case @msg_format
103
- when :raw
104
- @recv_cbak.call(messages)
105
- when :dripdrop
106
- raise "Expected message in one part" if messages.length > 1
107
- body = messages.shift.copy_out_string
108
- @recv_cbak.call(decode_message(body))
109
- else
110
- raise "Unknown message format '#{@msg_format}'"
111
- end
112
- }
96
+ case @msg_format
97
+ when :raw
98
+ @recv_cbak.call(messages)
99
+ when :dripdrop
100
+ raise "Expected message in one part" if messages.length > 1
101
+ body = messages.shift.copy_out_string
102
+ @recv_cbak.call(decode_message(body))
103
+ else
104
+ raise "Unknown message format '#{@msg_format}'"
105
+ end
113
106
  end
114
107
  end
115
108
 
@@ -123,27 +116,23 @@ class DripDrop
123
116
  self.topic_filter = @opts[:topic_filter]
124
117
  end
125
118
 
126
- def on_attach(socket)
127
- super(socket)
128
- socket.subscribe('')
129
- end
130
-
131
119
  def on_readable(socket, messages)
132
- EM.next_tick {
133
- if @msg_format == :dripdrop
134
- unless messages.length == 2
135
- puts "Expected pub/sub message to come in two parts, not #{messages.length}: #{messages.inspect}"
136
- return false
137
- end
138
- topic = messages.shift.copy_out_string
139
- if @topic_filter.nil? || topic.match(@topic_filter)
140
- body = messages.shift.copy_out_string
141
- @recv_cbak.call(decode_message(body))
142
- end
143
- else
144
- super(socket,messages)
120
+ if @msg_format == :dripdrop
121
+ unless messages.length == 2
122
+ return false
123
+ end
124
+ topic = messages.shift.copy_out_string
125
+ if @topic_filter.nil? || topic.match(@topic_filter)
126
+ body = messages.shift.copy_out_string
127
+ @recv_cbak.call(decode_message(body))
145
128
  end
146
- }
129
+ else
130
+ super(socket,messages)
131
+ end
132
+ end
133
+
134
+ def post_setup
135
+ @connection.socket.setsockopt(ZMQ::SUBSCRIBE, '')
147
136
  end
148
137
  end
149
138
 
@@ -180,18 +169,16 @@ class DripDrop
180
169
  end
181
170
 
182
171
  def on_readable(socket,messages)
183
- EM.next_tick {
184
- if @msg_format == :dripdrop
185
- identities = messages[0..-2].map {|m| m.copy_out_string}
186
- body = messages.last.copy_out_string
187
- message = decode_message(body)
188
- seq = message.head['_dripdrop/x_seq_counter']
189
- response = ZMQXRepHandler::Response.new(self, identities,seq)
190
- @recv_cbak.call(message,response)
191
- else
192
- super(socket,messages)
193
- end
194
- }
172
+ if @msg_format == :dripdrop
173
+ identities = messages[0..-2].map {|m| m.copy_out_string}
174
+ body = messages.last.copy_out_string
175
+ message = decode_message(body)
176
+ seq = message.head['_dripdrop/x_seq_counter']
177
+ response = ZMQXRepHandler::Response.new(self, identities,seq)
178
+ @recv_cbak.call(message,response)
179
+ else
180
+ super(socket,messages)
181
+ end
195
182
  end
196
183
 
197
184
  def send_message(message,identities,seq)
@@ -230,12 +217,10 @@ class DripDrop
230
217
  @promises = {}
231
218
 
232
219
  self.on_recv do |message|
233
- EM.next_tick {
234
- seq = message.head['_dripdrop/x_seq_counter']
235
- raise "Missing Seq Counter" unless seq
236
- promise = @promises.delete(seq)
237
- promise.call(message) if promise
238
- }
220
+ seq = message.head['_dripdrop/x_seq_counter']
221
+ raise "Missing Seq Counter" unless seq
222
+ promise = @promises.delete(seq)
223
+ promise.call(message) if promise
239
224
  end
240
225
  end
241
226
 
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'msgpack'
3
- require 'json'
3
+ require 'yajl'
4
4
 
5
5
  class DripDrop
6
6
  # DripDrop::Message messages are exchanged between all tiers in the architecture
@@ -19,6 +19,7 @@ class DripDrop
19
19
  # head should be used for metadata, body for the actual data.
20
20
  # These definitions are intentionally loose, because protocols tend to be used loosely.
21
21
  class Message
22
+
22
23
  attr_accessor :name, :head, :body
23
24
 
24
25
  # Creates a new message.
@@ -43,7 +44,7 @@ class DripDrop
43
44
 
44
45
  # Encodes the hash represntation of the message to JSON
45
46
  def json_encoded
46
- self.to_hash.to_json
47
+ Yajl::Encoder.encode self.to_hash
47
48
  end
48
49
  # (Deprecated, use json_encoded)
49
50
  def encode_json; json_encoded; end
@@ -94,8 +95,8 @@ class DripDrop
94
95
  # Decodes a string containing a JSON representation of a message
95
96
  def self.decode_json(str)
96
97
  begin
97
- json_hash = JSON.parse(str)
98
- rescue JSON::ParserError => e
98
+ json_hash = Yajl::Parser.parse(str)
99
+ rescue Yajl::ParserError => e
99
100
  puts "Could not parse msg '#{str}': #{e.message}"
100
101
  return nil
101
102
  end
data/lib/dripdrop/node.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'ffi-rzmq'
3
- require 'zmqmachine'
4
3
  require 'eventmachine'
5
4
  require 'uri'
6
5
  require 'resolv'
@@ -15,11 +14,12 @@ require 'dripdrop/handlers/http'
15
14
 
16
15
  class DripDrop
17
16
  class Node
17
+ ZCTX = ZMQ::Context.new 1
18
+
18
19
  attr_reader :zm_reactor, :routing, :nodelets
19
20
  attr_accessor :debug
20
21
 
21
22
  def initialize(opts={},&block)
22
- @zm_reactor = nil # The instance of the zmq_machine reactor
23
23
  @block = block
24
24
  @thread = nil # Thread containing the reactors
25
25
  @routing = {} # Routing table
@@ -27,6 +27,7 @@ class DripDrop
27
27
  @recipients_for = {}
28
28
  @handler_default_opts = {:debug => @debug}
29
29
  @nodelets = {} # Cache of registered nodelets
30
+ @zctx = ZCTX
30
31
  end
31
32
 
32
33
  # Starts the reactors and runs the block passed to initialize.
@@ -35,15 +36,12 @@ class DripDrop
35
36
  @thread = Thread.new do
36
37
  EM.error_handler {|e| self.error_handler e}
37
38
  EM.run do
38
- ZM::Reactor.new(:my_reactor).run do |zm_reactor|
39
- @zm_reactor = zm_reactor
40
- if @block
41
- self.instance_eval(&@block)
42
- elsif self.respond_to?(:action)
43
- self.action
44
- else
45
- raise "Could not start, no block or action specified"
46
- end
39
+ if @block
40
+ self.instance_eval(&@block)
41
+ elsif self.respond_to?(:action)
42
+ self.action
43
+ else
44
+ raise "Could not start, no block or action specified"
47
45
  end
48
46
  end
49
47
  end
@@ -68,7 +66,6 @@ class DripDrop
68
66
 
69
67
  # Stops the reactors. If you were blocked on #join, that will unblock.
70
68
  def stop
71
- @zm_reactor.stop
72
69
  EM.stop
73
70
  end
74
71
 
@@ -153,22 +150,22 @@ class DripDrop
153
150
  # zmq_subscribe sockets have a +topic_filter+ option, which restricts which
154
151
  # messages they can receive. It takes a regexp as an option.
155
152
  def zmq_subscribe(address,socket_ctype,opts={},&block)
156
- zmq_handler(DripDrop::ZMQSubHandler,:sub_socket,address,socket_ctype,opts)
153
+ zmq_handler(DripDrop::ZMQSubHandler,ZMQ::SUB,address,socket_ctype,opts)
157
154
  end
158
155
 
159
156
  # Creates a ZMQ::PUB type socket, can only send messages via +send_message+
160
157
  def zmq_publish(address,socket_ctype,opts={})
161
- zmq_handler(DripDrop::ZMQPubHandler,:pub_socket,address,socket_ctype,opts)
158
+ zmq_handler(DripDrop::ZMQPubHandler,ZMQ::PUB,address,socket_ctype,opts)
162
159
  end
163
160
 
164
161
  # Creates a ZMQ::PULL type socket. Can only receive messages via +on_recv+
165
162
  def zmq_pull(address,socket_ctype,opts={},&block)
166
- zmq_handler(DripDrop::ZMQPullHandler,:pull_socket,address,socket_ctype,opts)
163
+ zmq_handler(DripDrop::ZMQPullHandler,ZMQ::PULL,address,socket_ctype,opts)
167
164
  end
168
165
 
169
166
  # Creates a ZMQ::PUSH type socket, can only send messages via +send_message+
170
167
  def zmq_push(address,socket_ctype,opts={})
171
- zmq_handler(DripDrop::ZMQPushHandler,:push_socket,address,socket_ctype,opts)
168
+ zmq_handler(DripDrop::ZMQPushHandler,ZMQ::PUSH,address,socket_ctype,opts)
172
169
  end
173
170
 
174
171
  # Creates a ZMQ::XREP type socket, both sends and receivesc XREP sockets are extremely
@@ -184,12 +181,12 @@ class DripDrop
184
181
  # end
185
182
  #
186
183
  def zmq_xrep(address,socket_ctype,opts={})
187
- zmq_handler(DripDrop::ZMQXRepHandler,:xrep_socket,address,socket_ctype,opts)
184
+ zmq_handler(DripDrop::ZMQXRepHandler,ZMQ::XREP,address,socket_ctype,opts)
188
185
  end
189
186
 
190
187
  # See the documentation for +zmq_xrep+ for more info
191
188
  def zmq_xreq(address,socket_ctype,opts={})
192
- zmq_handler(DripDrop::ZMQXReqHandler,:xreq_socket,address,socket_ctype,opts)
189
+ zmq_handler(DripDrop::ZMQXReqHandler,ZMQ::XREQ,address,socket_ctype,opts)
193
190
  end
194
191
 
195
192
  # Binds an EM websocket connection to +address+. takes blocks for
@@ -275,18 +272,24 @@ class DripDrop
275
272
  end
276
273
 
277
274
  private
278
-
279
- def zmq_handler(klass, zm_sock_type, address, socket_ctype, opts={})
275
+
276
+ def zmq_handler(klass, sock_type, address, socket_ctype, opts={})
280
277
  addr_uri = URI.parse(address)
281
-
282
- host = Resolv.getaddresses(addr_uri.host).first
283
- host_addr = Resolv.getaddresses('localhost').map {|a| IPAddr.new(a)}.find {|a| a.ipv4?}
284
- host_str = host_addr.ipv6? ? "[#{host_addr.to_s}]" : host_addr.to_s
278
+
279
+ if addr_uri.scheme == 'tcp'
280
+ host = Resolv.getaddresses(addr_uri.host).first
281
+ host_addr = Resolv.getaddresses('localhost').map {|a| IPAddr.new(a)}.find {|a| a.ipv4?}
282
+ host_str = host_addr.ipv6? ? "[#{host_addr.to_s}]" : host_addr.to_s
283
+ else
284
+ host_str = addr_uri.host
285
+ end
285
286
 
286
- zm_addr = ZM::Address.new(host_str,addr_uri.port.to_i,addr_uri.scheme.to_sym)
287
- h_opts = handler_opts_given(opts)
288
- handler = klass.new(zm_addr,@zm_reactor,socket_ctype,h_opts)
289
- @zm_reactor.send(zm_sock_type,handler)
287
+ z_addr = "#{addr_uri.scheme}://#{host_str}:#{addr_uri.port.to_i}"
288
+ h_opts = handler_opts_given(opts)
289
+ connection = EM::ZeroMQ.create @zctx, sock_type, socket_ctype, address, klass.new
290
+ handler = connection.handler
291
+ handler.connection = connection
292
+ handler.post_setup
290
293
  handler
291
294
  end
292
295
 
@@ -24,7 +24,6 @@ describe "routing" do
24
24
  @expected_routing.each do |route_name,expected_props|
25
25
  handler = @node.send(route_name)
26
26
  handler.class.should == expected_props[:class]
27
- handler.socket_ctype.should == expected_props[:socket_ctype]
28
27
  end
29
28
  end
30
29
  end
@@ -32,9 +31,9 @@ describe "routing" do
32
31
  context "with no groups" do
33
32
  before(:all) do
34
33
  @expected_routing = {
35
- :distributor => {:class => DripDrop::ZMQPushHandler, :socket_ctype => :bind},
36
- :worker1 => {:class => DripDrop::ZMQPullHandler, :socket_ctype => :connect},
37
- :worker2 => {:class => DripDrop::ZMQPullHandler, :socket_ctype => :connect}
34
+ :distributor => {:class => DripDrop::ZMQPushHandler},
35
+ :worker1 => {:class => DripDrop::ZMQPullHandler},
36
+ :worker2 => {:class => DripDrop::ZMQPullHandler}
38
37
  }
39
38
  @node = run_reactor do
40
39
  route :distributor, :zmq_push, rand_addr, :bind
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'set'
2
3
 
3
4
  describe "zmq push/pull" do
4
5
  def pp_send_messages(to_send)
@@ -7,7 +7,7 @@ describe "zmq xreq/xrep" do
7
7
  req = nil
8
8
  rep = nil
9
9
 
10
- @node = run_reactor do
10
+ @node = run_reactor(0.5) do
11
11
  addr = rand_addr
12
12
 
13
13
  rep = zmq_xrep(addr, :bind)
@@ -74,7 +74,7 @@ describe "zmq xreq/xrep" do
74
74
  it "should send responses back to the proper xreq sender" do
75
75
  received_count = 0
76
76
 
77
- run_reactor(0.2) do
77
+ run_reactor(0.5) do
78
78
  addr = rand_addr
79
79
 
80
80
  rep = zmq_xrep(addr, :bind)
@@ -89,14 +89,14 @@ describe "zmq xreq/xrep" do
89
89
  r2_msg = DripDrop::Message.new("REQ2 Message")
90
90
 
91
91
  10.times do
92
- req1.send_message(r1_msg) do |message|
93
- received_count += 1
94
- message.name.should == r1_msg.name
95
- end
96
- req2.send_message(r2_msg) do |message|
97
- received_count += 1
98
- message.name.should == r2_msg.name
99
- end
92
+ req1.send_message(r1_msg) do |message|
93
+ received_count += 1
94
+ message.name.should == r1_msg.name
95
+ end
96
+ req2.send_message(r2_msg) do |message|
97
+ received_count += 1
98
+ message.name.should == r2_msg.name
99
+ end
100
100
  end
101
101
  end
102
102
 
data/spec/node_spec.rb CHANGED
@@ -56,9 +56,7 @@ describe DripDrop::Node do
56
56
 
57
57
  describe "shutdown" do
58
58
  before do
59
- @ddn = DripDrop::Node.new {
60
- zmq_subscribe(rand_addr,:bind) #Keeps ZMQMachine Happy
61
- }
59
+ @ddn = DripDrop::Node.new {}
62
60
  @ddn.start
63
61
  sleep 0.1
64
62
  @ddn.stop rescue nil
@@ -68,10 +66,6 @@ describe DripDrop::Node do
68
66
  it "should stop EventMachine" do
69
67
  EM.reactor_running?.should be_false
70
68
  end
71
-
72
- it "should stop ZMQMachine" do
73
- @ddn.zm_reactor.running?.should be_false
74
- end
75
69
  end
76
70
 
77
71
  describe "exceptions in EM reactor" do
data/spec/spec_helper.rb CHANGED
@@ -16,5 +16,3 @@ def run_reactor(time=0.2,opts={},&block)
16
16
  sleep 0.1
17
17
  ddn
18
18
  end
19
-
20
-
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dripdrop
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 8
9
- - 1
10
- version: 0.8.1
8
+ - 9
9
+ - 2
10
+ version: 0.9.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Cholakian
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-30 00:00:00 -08:00
18
+ date: 2011-02-01 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -75,7 +75,7 @@ dependencies:
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
77
  - !ruby/object:Gem::Dependency
78
- name: zmqmachine
78
+ name: em-zeromq
79
79
  prerelease: false
80
80
  requirement: &id005 !ruby/object:Gem::Requirement
81
81
  none: false
@@ -103,7 +103,7 @@ dependencies:
103
103
  type: :runtime
104
104
  version_requirements: *id006
105
105
  - !ruby/object:Gem::Dependency
106
- name: json
106
+ name: yajl-ruby
107
107
  prerelease: false
108
108
  requirement: &id007 !ruby/object:Gem::Requirement
109
109
  none: false