ffi-rzmq 0.9.0 → 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/.gitignore +7 -0
- data/Gemfile +3 -0
- data/History.txt +31 -0
- data/README.rdoc +21 -11
- data/Rakefile +2 -34
- data/examples/README.rdoc +1 -1
- data/examples/v2api/latency_measurement.rb +139 -0
- data/examples/v2api/xreqxrep_poll.rb +93 -0
- data/examples/v3api/latency_measurement.rb +139 -0
- data/examples/v3api/xreqxrep_poll.rb +93 -0
- data/ffi-rzmq.gemspec +17 -26
- data/lib/ffi-rzmq/constants.rb +4 -37
- data/lib/ffi-rzmq/libzmq.rb +174 -161
- data/lib/ffi-rzmq/poll.rb +27 -10
- data/lib/ffi-rzmq/socket.rb +116 -85
- data/lib/ffi-rzmq/util.rb +22 -1
- data/lib/ffi-rzmq/version.rb +3 -0
- data/spec/nonblocking_recv_spec.rb +46 -40
- data/spec/poll_spec.rb +84 -0
- data/spec/pushpull_spec.rb +35 -2
- data/spec/socket_spec.rb +0 -2
- data/spec/spec_helper.rb +3 -7
- metadata +117 -95
- data/version.txt +0 -1
@@ -16,14 +16,24 @@ module ZMQ
|
|
16
16
|
|
17
17
|
shared_examples_for "any socket" do
|
18
18
|
|
19
|
-
it "returns -1
|
19
|
+
it "returns -1 when there are no messages to read" do
|
20
20
|
array = []
|
21
21
|
rc = @receiver.recvmsgs(array, NonBlockingFlag)
|
22
22
|
Util.resultcode_ok?(rc).should be_false
|
23
|
-
|
23
|
+
end
|
24
|
+
|
25
|
+
it "gets EAGAIN when there are no messages to read" do
|
26
|
+
array = []
|
27
|
+
rc = @receiver.recvmsgs(array, NonBlockingFlag)
|
24
28
|
ZMQ::Util.errno.should == ZMQ::EAGAIN
|
25
29
|
end
|
26
30
|
|
31
|
+
it "returns the given array unmodified when there are no messages to read" do
|
32
|
+
array = []
|
33
|
+
rc = @receiver.recvmsgs(array, NonBlockingFlag)
|
34
|
+
array.size.should be_zero
|
35
|
+
end
|
36
|
+
|
27
37
|
end
|
28
38
|
|
29
39
|
shared_examples_for "sockets without exposed envelopes" do
|
@@ -222,55 +232,51 @@ module ZMQ
|
|
222
232
|
end # PUSH
|
223
233
|
|
224
234
|
|
225
|
-
|
226
|
-
|
227
|
-
context "DEALER" do
|
228
|
-
|
229
|
-
describe "non-blocking #recvmsgs where sender connects & receiver binds" do
|
230
|
-
include APIHelper
|
235
|
+
context "DEALER" do
|
231
236
|
|
232
|
-
|
233
|
-
|
234
|
-
port = bind_to_random_tcp_port(@receiver)
|
235
|
-
@sender = @ctx.socket ZMQ::DEALER
|
236
|
-
assert_ok(@sender.connect("tcp://127.0.0.1:#{port}"))
|
237
|
-
sleep 0.1
|
238
|
-
end
|
237
|
+
describe "non-blocking #recvmsgs where sender connects & receiver binds" do
|
238
|
+
include APIHelper
|
239
239
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
240
|
+
before(:each) do
|
241
|
+
@receiver = @ctx.socket ZMQ::ROUTER
|
242
|
+
port = bind_to_random_tcp_port(@receiver)
|
243
|
+
@sender = @ctx.socket ZMQ::DEALER
|
244
|
+
assert_ok(@sender.connect("tcp://127.0.0.1:#{port}"))
|
245
|
+
sleep 0.1
|
246
|
+
end
|
244
247
|
|
245
|
-
|
246
|
-
|
248
|
+
after(:each) do
|
249
|
+
@receiver.close
|
250
|
+
@sender.close
|
251
|
+
end
|
247
252
|
|
248
|
-
|
253
|
+
it_behaves_like "any socket"
|
254
|
+
it_behaves_like "sockets with exposed envelopes"
|
249
255
|
|
250
|
-
|
251
|
-
include APIHelper
|
256
|
+
end # describe 'non-blocking recvmsgs'
|
252
257
|
|
253
|
-
|
254
|
-
|
255
|
-
port = connect_to_random_tcp_port(@receiver)
|
256
|
-
@sender = @ctx.socket ZMQ::DEALER
|
257
|
-
assert_ok(@sender.bind("tcp://127.0.0.1:#{port}"))
|
258
|
-
sleep 0.1
|
259
|
-
end
|
258
|
+
describe "non-blocking #recvmsgs where sender binds & receiver connects" do
|
259
|
+
include APIHelper
|
260
260
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
261
|
+
before(:each) do
|
262
|
+
@receiver = @ctx.socket ZMQ::ROUTER
|
263
|
+
port = connect_to_random_tcp_port(@receiver)
|
264
|
+
@sender = @ctx.socket ZMQ::DEALER
|
265
|
+
assert_ok(@sender.bind("tcp://127.0.0.1:#{port}"))
|
266
|
+
sleep 0.1
|
267
|
+
end
|
265
268
|
|
266
|
-
|
267
|
-
|
269
|
+
after(:each) do
|
270
|
+
@receiver.close
|
271
|
+
@sender.close
|
272
|
+
end
|
268
273
|
|
269
|
-
|
274
|
+
it_behaves_like "any socket"
|
275
|
+
it_behaves_like "sockets with exposed envelopes"
|
270
276
|
|
271
|
-
end #
|
277
|
+
end # describe 'non-blocking recvmsgs'
|
272
278
|
|
273
|
-
end #
|
279
|
+
end # DEALER
|
274
280
|
|
275
281
|
|
276
282
|
context "XREQ" do
|
data/spec/poll_spec.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
$: << "." # added for ruby 1.9.2 compatibilty; it doesn't include the current directory on the load path anymore
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), %w[spec_helper])
|
4
|
+
|
5
|
+
module ZMQ
|
6
|
+
|
7
|
+
|
8
|
+
describe Poller do
|
9
|
+
|
10
|
+
context "when initializing" do
|
11
|
+
include APIHelper
|
12
|
+
|
13
|
+
it "should allocate a PollItems instance" do
|
14
|
+
PollItems.should_receive(:new)
|
15
|
+
|
16
|
+
Poller.new
|
17
|
+
end
|
18
|
+
|
19
|
+
end # context initializing
|
20
|
+
|
21
|
+
|
22
|
+
context "#register" do
|
23
|
+
|
24
|
+
let(:poller) { Poller.new }
|
25
|
+
let(:socket) { mock('socket') }
|
26
|
+
|
27
|
+
it "should return false when given a nil socket and no file descriptor" do
|
28
|
+
poller.register(nil, ZMQ::POLLIN, 0).should be_false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return false when given 0 for +events+ (e.g. no registration)" do
|
32
|
+
poller.register(socket, 0).should be_false
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return the registered event value when given a nil socket and a valid non-zero file descriptor" do
|
36
|
+
poller.register(nil, ZMQ::POLLIN, 1).should == ZMQ::POLLIN
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return the default registered event value when given a valid socket" do
|
40
|
+
poller.register(socket).should == (ZMQ::POLLIN | ZMQ::POLLOUT)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should access the raw 0mq socket" do
|
44
|
+
raw_socket = FFI::MemoryPointer.new(4)
|
45
|
+
socket.should_receive(:kind_of?).with(ZMQ::Socket).and_return(true)
|
46
|
+
socket.should_receive(:socket).and_return(raw_socket)
|
47
|
+
|
48
|
+
poller.register(socket)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
context "#delete" do
|
54
|
+
let(:poller) { Poller.new }
|
55
|
+
let(:socket) { mock('socket') }
|
56
|
+
let(:context) { Context.new }
|
57
|
+
|
58
|
+
it "should return false for an unregistered socket (i.e. not found)" do
|
59
|
+
poller.delete(socket).should be_false
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns true for a sucessfully deleted socket when only 1 is registered" do
|
63
|
+
socket1 = context.socket ZMQ::REP
|
64
|
+
|
65
|
+
poller.register socket1
|
66
|
+
poller.delete(socket1).should be_true
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns true for a sucessfully deleted socket when more than 1 is registered" do
|
70
|
+
socket1 = context.socket ZMQ::REP
|
71
|
+
socket2 = context.socket ZMQ::REP
|
72
|
+
|
73
|
+
poller.register socket1
|
74
|
+
poller.register socket2
|
75
|
+
poller.delete(socket2).should be_true
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
end # describe Poll
|
82
|
+
|
83
|
+
|
84
|
+
end # module ZMQ
|
data/spec/pushpull_spec.rb
CHANGED
@@ -17,6 +17,7 @@ module ZMQ
|
|
17
17
|
@pull.setsockopt ZMQ::LINGER, 0
|
18
18
|
port = connect_to_random_tcp_port(@pull)
|
19
19
|
@link = "tcp://127.0.0.1:#{port}"
|
20
|
+
#@link = "inproc://push_pull_test" # can't connect to inproc *before* bind
|
20
21
|
@push.bind @link
|
21
22
|
end
|
22
23
|
|
@@ -30,6 +31,7 @@ module ZMQ
|
|
30
31
|
@push.send_string string
|
31
32
|
received = ''
|
32
33
|
rc = @pull.recv_string received
|
34
|
+
assert_ok(rc)
|
33
35
|
received.should == string
|
34
36
|
end
|
35
37
|
|
@@ -63,11 +65,12 @@ module ZMQ
|
|
63
65
|
|
64
66
|
if version2?
|
65
67
|
|
66
|
-
it "should receive a single message for each message sent on each socket listening, when an equal number pulls to messages" do
|
68
|
+
it "should receive a single message for each message sent on each socket listening, when an equal number pulls to messages and a unique socket per thread" do
|
67
69
|
received = []
|
68
70
|
threads = []
|
69
71
|
count = 4
|
70
72
|
@pull.close # close this one since we aren't going to use it below and we don't want it to receive a message
|
73
|
+
mutex = Mutex.new
|
71
74
|
|
72
75
|
count.times do |i|
|
73
76
|
threads << Thread.new do
|
@@ -78,7 +81,7 @@ module ZMQ
|
|
78
81
|
buffer = ''
|
79
82
|
rc = pull.recv_string buffer
|
80
83
|
rc.should == 0
|
81
|
-
received << buffer
|
84
|
+
mutex.synchronize { received << buffer }
|
82
85
|
pull.close
|
83
86
|
end
|
84
87
|
sleep 0.01 # give each thread time to spin up
|
@@ -91,6 +94,36 @@ module ZMQ
|
|
91
94
|
received.find_all {|r| r == string}.length.should == count
|
92
95
|
end
|
93
96
|
|
97
|
+
it "should receive a single message for each message sent on each socket listening, when an equal number pulls to messages and a single shared socket protected by a mutex" do
|
98
|
+
received = []
|
99
|
+
threads = []
|
100
|
+
count = 4
|
101
|
+
@pull.close # close this one since we aren't going to use it below and we don't want it to receive a message
|
102
|
+
pull = @context.socket ZMQ::PULL
|
103
|
+
rc = pull.setsockopt ZMQ::LINGER, 0
|
104
|
+
rc = pull.connect @link
|
105
|
+
rc.should == 0
|
106
|
+
mutex = Mutex.new
|
107
|
+
|
108
|
+
count.times do |i|
|
109
|
+
threads << Thread.new do
|
110
|
+
buffer = ''
|
111
|
+
rc = 0
|
112
|
+
mutex.synchronize { rc = pull.recv_string buffer }
|
113
|
+
rc.should == 0
|
114
|
+
mutex.synchronize { received << buffer }
|
115
|
+
end
|
116
|
+
sleep 0.01 # give each thread time to spin up
|
117
|
+
end
|
118
|
+
|
119
|
+
count.times { @push.send_string(string) }
|
120
|
+
|
121
|
+
threads.each {|t| t.join}
|
122
|
+
pull.close
|
123
|
+
|
124
|
+
received.find_all {|r| r == string}.length.should == count
|
125
|
+
end
|
126
|
+
|
94
127
|
else # version3 or 4
|
95
128
|
|
96
129
|
it "should receive a single message for each message sent on each socket listening, when an equal number pulls to messages" do
|
data/spec/socket_spec.rb
CHANGED
@@ -10,8 +10,6 @@ module ZMQ
|
|
10
10
|
[ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR]
|
11
11
|
elsif LibZMQ.version3?
|
12
12
|
[ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR, ZMQ::XPUB, ZMQ::XSUB]
|
13
|
-
elsif LibZMQ.version4?
|
14
|
-
[ZMQ::REQ, ZMQ::REP, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR, ZMQ::XPUB, ZMQ::XSUB]
|
15
13
|
end
|
16
14
|
|
17
15
|
context "when initializing" do
|
data/spec/spec_helper.rb
CHANGED
@@ -10,19 +10,15 @@ Thread.abort_on_exception = true
|
|
10
10
|
# define some version guards so we can turn on/off specs based upon
|
11
11
|
# the version of the 0mq library that is loaded
|
12
12
|
def version2?
|
13
|
-
LibZMQ.version2?
|
13
|
+
ZMQ::LibZMQ.version2?
|
14
14
|
end
|
15
15
|
|
16
16
|
def version3?
|
17
|
-
LibZMQ.version3?
|
18
|
-
end
|
19
|
-
|
20
|
-
def version4?
|
21
|
-
LibZMQ.version4?
|
17
|
+
ZMQ::LibZMQ.version3?
|
22
18
|
end
|
23
19
|
|
24
20
|
|
25
|
-
NonBlockingFlag = (LibZMQ.version2? ? ZMQ::NOBLOCK : ZMQ::DONTWAIT) unless defined?(NonBlockingFlag)
|
21
|
+
NonBlockingFlag = (ZMQ::LibZMQ.version2? ? ZMQ::NOBLOCK : ZMQ::DONTWAIT) unless defined?(NonBlockingFlag)
|
26
22
|
|
27
23
|
|
28
24
|
module APIHelper
|
metadata
CHANGED
@@ -1,134 +1,156 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-rzmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 9
|
8
|
-
- 0
|
9
|
-
version: 0.9.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.9.2
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
|
-
- Chuck Remes
|
8
|
+
- Chuck Remes
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-11-30 00:00:00 -06:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: ffi
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.0.9
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "2.6"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rake
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
35
49
|
description: |-
|
36
50
|
This gem wraps the ZeroMQ networking library using the ruby FFI (foreign
|
37
51
|
function interface). It's a pure ruby wrapper so this gem can be loaded
|
38
52
|
and run by any ruby runtime that supports FFI. That's all of them:
|
39
53
|
MRI 1.9.x, Rubinius and JRuby.
|
40
|
-
email:
|
54
|
+
email:
|
55
|
+
- cremes@mac.com
|
41
56
|
executables: []
|
42
57
|
|
43
58
|
extensions: []
|
44
59
|
|
45
|
-
extra_rdoc_files:
|
46
|
-
|
47
|
-
- History.txt
|
48
|
-
- README.rdoc
|
49
|
-
- examples/README.rdoc
|
50
|
-
- version.txt
|
60
|
+
extra_rdoc_files: []
|
61
|
+
|
51
62
|
files:
|
52
|
-
- .bnsignore
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
- examples/
|
60
|
-
- examples/v2api/
|
61
|
-
- examples/v2api/
|
62
|
-
- examples/v2api/
|
63
|
-
- examples/v2api/
|
64
|
-
- examples/v2api/
|
65
|
-
- examples/v2api/
|
66
|
-
- examples/
|
67
|
-
- examples/
|
68
|
-
- examples/
|
69
|
-
- examples/
|
70
|
-
- examples/
|
71
|
-
- examples/v3api/
|
72
|
-
- examples/v3api/
|
73
|
-
- examples/v3api/
|
74
|
-
- examples/v3api/
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
- lib/ffi-rzmq
|
85
|
-
- lib/ffi-rzmq/
|
86
|
-
- lib/ffi-rzmq/
|
87
|
-
- lib/ffi-rzmq/
|
88
|
-
- lib/ffi-rzmq/
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
- spec/
|
98
|
-
-
|
99
|
-
-
|
63
|
+
- .bnsignore
|
64
|
+
- .gitignore
|
65
|
+
- AUTHORS.txt
|
66
|
+
- Gemfile
|
67
|
+
- History.txt
|
68
|
+
- README.rdoc
|
69
|
+
- Rakefile
|
70
|
+
- examples/README.rdoc
|
71
|
+
- examples/v2api/latency_measurement.rb
|
72
|
+
- examples/v2api/local_lat.rb
|
73
|
+
- examples/v2api/local_lat_poll.rb
|
74
|
+
- examples/v2api/local_throughput.rb
|
75
|
+
- examples/v2api/publish_subscribe.rb
|
76
|
+
- examples/v2api/remote_lat.rb
|
77
|
+
- examples/v2api/remote_throughput.rb
|
78
|
+
- examples/v2api/reqrep_poll.rb
|
79
|
+
- examples/v2api/request_response.rb
|
80
|
+
- examples/v2api/throughput_measurement.rb
|
81
|
+
- examples/v2api/xreqxrep_poll.rb
|
82
|
+
- examples/v3api/latency_measurement.rb
|
83
|
+
- examples/v3api/local_lat.rb
|
84
|
+
- examples/v3api/local_lat_poll.rb
|
85
|
+
- examples/v3api/local_throughput.rb
|
86
|
+
- examples/v3api/publish_subscribe.rb
|
87
|
+
- examples/v3api/remote_lat.rb
|
88
|
+
- examples/v3api/remote_throughput.rb
|
89
|
+
- examples/v3api/reqrep_poll.rb
|
90
|
+
- examples/v3api/request_response.rb
|
91
|
+
- examples/v3api/throughput_measurement.rb
|
92
|
+
- examples/v3api/xreqxrep_poll.rb
|
93
|
+
- ext/README
|
94
|
+
- ffi-rzmq.gemspec
|
95
|
+
- lib/ffi-rzmq.rb
|
96
|
+
- lib/ffi-rzmq/constants.rb
|
97
|
+
- lib/ffi-rzmq/context.rb
|
98
|
+
- lib/ffi-rzmq/device.rb
|
99
|
+
- lib/ffi-rzmq/exceptions.rb
|
100
|
+
- lib/ffi-rzmq/libc.rb
|
101
|
+
- lib/ffi-rzmq/libzmq.rb
|
102
|
+
- lib/ffi-rzmq/message.rb
|
103
|
+
- lib/ffi-rzmq/poll.rb
|
104
|
+
- lib/ffi-rzmq/poll_items.rb
|
105
|
+
- lib/ffi-rzmq/socket.rb
|
106
|
+
- lib/ffi-rzmq/util.rb
|
107
|
+
- lib/ffi-rzmq/version.rb
|
108
|
+
- spec/context_spec.rb
|
109
|
+
- spec/device_spec.rb
|
110
|
+
- spec/message_spec.rb
|
111
|
+
- spec/multipart_spec.rb
|
112
|
+
- spec/nonblocking_recv_spec.rb
|
113
|
+
- spec/poll_spec.rb
|
114
|
+
- spec/pushpull_spec.rb
|
115
|
+
- spec/reqrep_spec.rb
|
116
|
+
- spec/socket_spec.rb
|
117
|
+
- spec/spec_helper.rb
|
100
118
|
has_rdoc: true
|
101
119
|
homepage: http://github.com/chuckremes/ffi-rzmq
|
102
120
|
licenses: []
|
103
121
|
|
104
122
|
post_install_message:
|
105
|
-
rdoc_options:
|
106
|
-
|
107
|
-
- README.rdoc
|
123
|
+
rdoc_options: []
|
124
|
+
|
108
125
|
require_paths:
|
109
|
-
- lib
|
126
|
+
- lib
|
110
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
128
|
none: false
|
112
129
|
requirements:
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
- 0
|
117
|
-
version: "0"
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: "0"
|
118
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
134
|
none: false
|
120
135
|
requirements:
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
- 0
|
125
|
-
version: "0"
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: "0"
|
126
139
|
requirements: []
|
127
140
|
|
128
141
|
rubyforge_project: ffi-rzmq
|
129
|
-
rubygems_version: 1.
|
142
|
+
rubygems_version: 1.5.1
|
130
143
|
signing_key:
|
131
144
|
specification_version: 3
|
132
145
|
summary: This gem wraps the ZeroMQ (0mq) networking library using Ruby FFI (foreign function interface).
|
133
|
-
test_files:
|
134
|
-
|
146
|
+
test_files:
|
147
|
+
- spec/context_spec.rb
|
148
|
+
- spec/device_spec.rb
|
149
|
+
- spec/message_spec.rb
|
150
|
+
- spec/multipart_spec.rb
|
151
|
+
- spec/nonblocking_recv_spec.rb
|
152
|
+
- spec/poll_spec.rb
|
153
|
+
- spec/pushpull_spec.rb
|
154
|
+
- spec/reqrep_spec.rb
|
155
|
+
- spec/socket_spec.rb
|
156
|
+
- spec/spec_helper.rb
|