dripdrop 0.8.1 → 0.9.2

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.
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