ffi-rxs 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ doc/*
7
7
 
8
8
  *.rbc
9
9
  .redcar/
10
+ *~
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ = Version 1.2.0
2
+
3
+ * Add new surveyor socket types
4
+ * Add new xs_shutdown function and Socket#shutdown method
5
+ * Add UTF-8 encoding string to spec files
6
+ * Amend description to refer to Crossroads I/O as a messaging library
7
+ * XS::Util is now a singleton class
8
+ * Util.error_check method is now public
9
+ * Handle return codes from xs_connect and xs_bind that are > 0 or < -1
10
+
1
11
  = Version 1.1.0
2
12
 
3
13
  * Version number bumped to reflect addition of new features in v1.0.1
data/README.textile CHANGED
@@ -1,8 +1,10 @@
1
1
  h1. About ffi-rxs
2
2
 
3
- This gem wraps the "Crossroads I/O":http://crossroads.io networking library using the Ruby FFI (foreign function interface). It's a pure Ruby wrapper so this gem can be loaded and run by any Ruby runtime that supports FFI. That's all of them: MRI 1.9.x, Rubinius and JRuby.
3
+ "!https://secure.travis-ci.org/celldee/ffi-rxs.png!":http://travis-ci.org/celldee/ffi-rxs
4
4
 
5
- Crossroads I/O is a fork of ZeroMQ. This gem is a re-working of the ffi-rzmq gem created by Chuck Remes to provide bindings for the Crossroads I/O libxs C library instead of the ZeroMQ libzmq library. The gem auto-configures itself to expose the API conforming to the loaded C library.
5
+ This gem wraps the "Crossroads I/O":http://crossroads.io messaging library (libxs) using the Ruby FFI (foreign function interface). It's a pure Ruby wrapper so this gem can be loaded and run by any Ruby runtime that supports FFI. That's all of them: MRI 1.9.x, Rubinius and JRuby.
6
+
7
+ Crossroads I/O is a fork of ZeroMQ. This gem is a re-working of the "ffi-rzmq":http://github.com/chuckremes/ffi-rzmq gem created by Chuck Remes to provide bindings for the libxs library instead of the ZeroMQ libzmq library.
6
8
 
7
9
  h2. Features/Problems
8
10
 
@@ -15,10 +17,15 @@ h2. Requirements
15
17
  * Crossroads I/O version 1.0.0 or later.
16
18
  * ffi (>= 1.0.0)
17
19
 
18
- The Crossroads I/O library must be installed on your system in a well-known location like /usr/local/lib. This is the default for new Crossroads I/O installs. Future releases may include the library as a C extension built at time of installation.
19
-
20
- Do *not* run this gem under MRI with an old 'ffi' gem. It will crash randomly and you will be sad.
20
+ The libxs library must be installed on your system in a well-known location like '/usr/local/lib'.
21
+
22
+ Do *not* run this gem under MRI with an old 'ffi' gem. It will not work as expected.
21
23
 
24
+ *NOTE*
25
+ The master GitHub repository contains a copy of the libxs library in the 'ext' directory. This is so that the "Travis CI":http://travis-ci.org continuous integration build platform can be used. The .gemspec file excludes the 'ext' directory from the gem build.
26
+
27
+ If you want to build a gem using a version of libxs other than your current system version, then you can include the library in the 'ext' directory. *Do not forget* to change the .gemspec file so that it does not exclude the library from the gem build.
28
+
22
29
  h2. Installation
23
30
 
24
31
  A full gem has been released to Rubygems.org as of release 1.0.0. Make sure the Crossroads I/O library is already installed on your system.
@@ -48,7 +55,7 @@ ctx = XS::Context.create()
48
55
  socket = ctx.socket(XS::REQ)
49
56
  socket.connect("tcp://127.0.0.1:5000")
50
57
 
51
- for i in 1..10
58
+ (1..10).each do |i|
52
59
  msg = "msg #{i.to_s}"
53
60
  socket.send_string(msg)
54
61
  puts "Sending: " + msg
data/examples/request.rb CHANGED
@@ -15,7 +15,7 @@ ctx = XS::Context.create()
15
15
  socket = ctx.socket(XS::REQ)
16
16
  socket.connect("tcp://127.0.0.1:5000")
17
17
 
18
- for i in 1..10
18
+ (1..10).each do |i|
19
19
  msg = "msg #{i.to_s}"
20
20
  socket.send_string(msg)
21
21
  puts "Sending: " + msg
data/ffi-rxs.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Chris Duncan"]
9
9
  s.email = ["celldee@gmail.com"]
10
10
  s.homepage = "http://github.com/celldee/ffi-rxs"
11
- s.summary = %q{Ruby FFI bindings for Crossroads I/O networking library.}
12
- s.description = %q{Ruby FFI bindings for Crossroads I/O networking library.}
11
+ s.summary = %q{Ruby FFI bindings for Crossroads I/O messaging library.}
12
+ s.description = %q{Ruby FFI bindings for Crossroads I/O messaging library.}
13
13
 
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.files = s.files.reject{ |f| f.include?('ext/libxs.so') }
@@ -19,6 +19,11 @@ module XS
19
19
  PUSH = 8
20
20
  XPUB = 9
21
21
  XSUB = 10
22
+ SURVEYOR = 11
23
+ RESPONDENT = 12
24
+ XSURVEYOR = 13
25
+ XRESPONDENT = 14
26
+
22
27
  DEALER = XREQ
23
28
  ROUTER = XREP
24
29
 
@@ -35,7 +40,11 @@ module XS
35
40
  ROUTER => "ROUTER",
36
41
  DEALER => "DEALER",
37
42
  XPUB => "XPUB",
38
- XSUB => "XSUB"
43
+ XSUB => "XSUB",
44
+ SURVEYOR => "SURVEYOR",
45
+ RESPONDENT => "RESPONDENT",
46
+ XSURVEYOR => "XSURVEYOR",
47
+ XRESPONDENT => "XRESPONDENT"
39
48
  }
40
49
 
41
50
  # Socket options
@@ -63,6 +72,8 @@ module XS
63
72
  SNDTIMEO = 28
64
73
  IPV4ONLY = 31
65
74
  KEEPALIVE = 32
75
+ PROTOCOL = 33
76
+ SURVEY_TIMEOUT = 34
66
77
 
67
78
  # Message options
68
79
  MORE = 1
@@ -29,7 +29,6 @@ module XS
29
29
  # STDERR.puts "Context allocation failed"
30
30
  # end
31
31
  class Context
32
- include XS::Util
33
32
 
34
33
  attr_reader :context, :pointer
35
34
 
@@ -43,7 +42,7 @@ module XS
43
42
  @sockets = []
44
43
  @context = LibXS.xs_init()
45
44
  @pointer = @context
46
- error_check 'xs_init', (@context.nil? || @context.null?) ? -1 : 0
45
+ XS::Util.error_check 'xs_init', (@context.nil? || @context.null?) ? -1 : 0
47
46
 
48
47
  define_finalizer
49
48
  end
data/lib/ffi-rxs/libxs.rb CHANGED
@@ -45,6 +45,8 @@ module XS
45
45
  @blocking = true
46
46
  attach_function :xs_setctxopt, [:pointer, :int, :pointer, :int], :int
47
47
  @blocking = true
48
+ attach_function :xs_shutdown, [:pointer, :int], :int
49
+ @blocking = true
48
50
  attach_function :xs_socket, [:pointer, :int], :pointer
49
51
  @blocking = true
50
52
  attach_function :xs_strerror, [:int], :pointer
@@ -84,7 +84,6 @@ module XS
84
84
  # puts "value1 is #{message.value1}"
85
85
  #
86
86
  class Message
87
- include XS::Util
88
87
 
89
88
  # Recommended way to create a standard message.
90
89
  #
data/lib/ffi-rxs/poll.rb CHANGED
@@ -3,7 +3,6 @@
3
3
  module XS
4
4
 
5
5
  class Poller
6
- include XS::Util
7
6
 
8
7
  attr_reader :readables, :writables
9
8
 
@@ -3,7 +3,6 @@
3
3
  module XS
4
4
 
5
5
  module CommonSocketBehavior
6
- include XS::Util
7
6
 
8
7
  attr_reader :socket, :name
9
8
 
@@ -184,6 +183,9 @@ module XS
184
183
  # socket.bind("tcp://127.0.0.1:5555")
185
184
  #
186
185
  # @param address
186
+ #
187
+ # @return 0 or greater if successful
188
+ # @return < 0 if unsuccessful
187
189
  def bind address
188
190
  LibXS.xs_bind @socket, address
189
191
  end
@@ -195,10 +197,10 @@ module XS
195
197
  #
196
198
  # @param address
197
199
  #
198
- # @return 0 if successful
199
- # @return -1 if unsuccessful
200
+ # @return 0 or greater if successful
201
+ # @return < 0 if unsuccessful
200
202
  def connect address
201
- rc = LibXS.xs_connect @socket, address
203
+ LibXS.xs_connect @socket, address
202
204
  end
203
205
 
204
206
  # Closes the socket. Any unprocessed messages in queue are sent or dropped
@@ -333,6 +335,19 @@ module XS
333
335
  message.close
334
336
  rc
335
337
  end
338
+
339
+ # Unbinds/disconnects the socket from an endpoint.
340
+ #
341
+ # @example
342
+ # socket.shutdown(endpoint_id)
343
+ #
344
+ # @param endpoint_id (endpoint id returned from socket.bind/socket.connect)
345
+ #
346
+ # @return 0 if successful
347
+ # @return -1 if unsuccessful
348
+ def shutdown endpoint_id
349
+ LibXS.xs_shutdown @socket, endpoint_id
350
+ end
336
351
 
337
352
  # Dequeues a message from the underlying queue. By default, this is a blocking operation.
338
353
  #
data/lib/ffi-rxs/util.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module XS
4
-
5
- # These methods don't belong to any specific class. They get included
6
- # in the #Context, #Socket and #Poller classes.
7
- module Util
4
+
5
+ # Provides general utility methods
6
+ class Util
8
7
 
9
8
  # @return true when +rc+ is greater than or equal to 0
10
9
  # @return false otherwise
@@ -63,23 +62,13 @@ module XS
63
62
  resultcode_ok?(rc) ? random : nil
64
63
  end
65
64
 
66
-
67
- private
68
-
69
- # Generate a random port between 10_000 and 65534
70
- #
71
- # @return port number
72
- def self.random_port
73
- rand(55534) + 10_000
74
- end
75
-
76
- # Called by most library methods to verify there were no errors during
77
- # operation. If any are found, raise the appropriate #XSError.
65
+ # Called to verify there were no errors during operation. If any are found,
66
+ # raise the appropriate XSError.
78
67
  #
79
68
  # @return true when no error is found which is behavior used internally
80
69
  # by #send and #recv.
81
- def error_check source, result_code
82
- if -1 == result_code
70
+ def self.error_check source, result_code
71
+ if result_code < 0
83
72
  raise_error source, result_code
84
73
  end
85
74
 
@@ -87,25 +76,31 @@ module XS
87
76
  true
88
77
  end
89
78
 
79
+ private
80
+
81
+ # Generate a random port between 10_000 and 65534
82
+ #
83
+ # @return port number
84
+ def self.random_port
85
+ rand(55534) + 10_000
86
+ end
87
+
90
88
  # Raises error
91
89
  #
92
90
  # @param source
93
91
  # @param result_code
94
- def raise_error source, result_code
95
- if 'xs_init' == source || 'xs_socket' == source
92
+ def self.raise_error source, result_code
93
+ case source
94
+ when 'xs_init', 'xs_socket'
96
95
  raise ContextError.new source, result_code, XS::Util.errno, XS::Util.error_string
97
-
98
- elsif ['xs_msg_init', 'xs_msg_init_data', 'xs_msg_copy', 'xs_msg_move'].include?(source)
96
+ when 'xs_msg_init', 'xs_msg_init_data', 'xs_msg_copy', 'xs_msg_move'
99
97
  raise MessageError.new source, result_code, XS::Util.errno, XS::Util.error_string
100
-
101
98
  else
102
- puts "else"
103
- raise XSError.new source, result_code, -1,
104
- "Source [#{source}] does not match any xs_* strings, rc [#{result_code}], errno [#{XS::Util.errno}], error_string [#{XS::Util.error_string}]"
99
+ raise XSError.new source, result_code, XS::Util.errno, XS::Util.error_string
105
100
  end
106
101
  end
107
102
 
108
- def eagain?
103
+ def self.eagain?
109
104
  EAGAIN == XS::Util.errno
110
105
  end
111
106
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module XS
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.0"
5
5
  end
data/spec/context_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- $: << "." # added for ruby 1.9.2 compatibilty; it doesn't include the current directory on the load path anymore
1
+ # encoding: utf-8
2
2
 
3
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
4
4
 
@@ -59,11 +59,10 @@ module XS
59
59
  context "when setting context options" do
60
60
  include APIHelper
61
61
 
62
- it "gets EINVAL when option name is not recognized" do
62
+ it "should return unsuccessful code when option name is not recognized" do
63
63
  ctx = Context.new
64
64
  rc = ctx.setctxopt(XS::IDENTITY, 10)
65
65
  Util.resultcode_ok?(rc).should be_false
66
- XS::Util.errno.should == XS::EINVAL
67
66
  end
68
67
  end
69
68
 
@@ -74,14 +73,12 @@ module XS
74
73
  ctx = Context.new
75
74
  rc = ctx.setctxopt(XS::IO_THREADS, 0)
76
75
  Util.resultcode_ok?(rc).should be_false
77
- XS::Util.errno.should == XS::EINVAL
78
76
  end
79
77
 
80
78
  it "should return unsuccessful code for negative io threads" do
81
79
  ctx = Context.new
82
80
  rc = ctx.setctxopt(XS::IO_THREADS, -1)
83
81
  Util.resultcode_ok?(rc).should be_false
84
- XS::Util.errno.should == XS::EINVAL
85
82
  end
86
83
 
87
84
  it "should return successful code for positive io threads" do
@@ -105,7 +102,6 @@ module XS
105
102
  ctx = Context.new
106
103
  rc = ctx.setctxopt(XS::MAX_SOCKETS, -1)
107
104
  Util.resultcode_ok?(rc).should be_false
108
- XS::Util.errno.should == XS::EINVAL
109
105
  end
110
106
 
111
107
  it "should return successful code for positive max sockets" do
data/spec/message_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
 
2
4
  require File.join(File.dirname(__FILE__), %w[spec_helper])
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
2
4
 
3
5
  module XS
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
 
2
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
3
4
 
data/spec/poll_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- $: << "." # added for ruby 1.9.2 compatibilty; it doesn't include the current directory on the load path anymore
1
+ # encoding: utf-8
2
2
 
3
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
4
4
 
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
 
2
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
3
4
 
@@ -61,7 +62,7 @@ module XS
61
62
  pull = @context.socket XS::PULL
62
63
  rc = pull.setsockopt XS::LINGER, 0
63
64
  rc = pull.connect @link
64
- rc.should == 0
65
+ rc.should_not be < 0
65
66
  buffer = ''
66
67
  rc = pull.recv_string buffer
67
68
  rc.should == 11
@@ -86,7 +87,7 @@ module XS
86
87
  pull = @context.socket XS::PULL
87
88
  rc = pull.setsockopt XS::LINGER, 0
88
89
  rc = pull.connect @link
89
- rc.should == 0
90
+ rc.should_not be < 0
90
91
  mutex = Mutex.new
91
92
 
92
93
  count.times do |i|
data/spec/reqrep_spec.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
 
2
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
3
4
 
data/spec/socket_spec.rb CHANGED
@@ -1,12 +1,12 @@
1
+ # encoding: utf-8
1
2
 
2
3
  require File.join(File.dirname(__FILE__), %w[spec_helper])
3
4
 
4
5
  module XS
5
6
 
6
-
7
7
  describe Socket do
8
8
 
9
- socket_types = [XS::REQ, XS::REP, XS::DEALER, XS::ROUTER, XS::PUB, XS::SUB, XS::PUSH, XS::PULL, XS::PAIR, XS::XPUB, XS::XSUB]
9
+ socket_types = [XS::REQ, XS::REP, XS::DEALER, XS::ROUTER, XS::PUB, XS::SUB, XS::PUSH, XS::PULL, XS::PAIR, XS::XPUB, XS::XSUB, XS::SURVEYOR, XS::XSURVEYOR, XS::RESPONDENT, XS::XRESPONDENT]
10
10
 
11
11
  context "when initializing" do
12
12
  before(:all) { @ctx = Context.new }
@@ -418,7 +418,7 @@ module XS
418
418
  socket.close
419
419
  end
420
420
 
421
- if RUBY_PLATFORM =~ /linux|darwin/
421
+ if RUBY_PLATFORM =~ /linux|darwin|java/
422
422
  # this spec doesn't work on Windows; hints welcome
423
423
 
424
424
  context "using option XS::FD" do
@@ -467,12 +467,14 @@ module XS
467
467
 
468
468
  end # posix platform
469
469
 
470
- context "using option XS::EVENTS" do
471
- it "should return a mask of events as a Fixnum" do
472
- array = []
473
- rc = socket.getsockopt(XS::EVENTS, array)
474
- rc.should == 0
475
- array[0].should be_a(Fixnum)
470
+ unless XS::SocketTypeNameMap[socket_type] == 'SURVEYOR' # Feature not implemented yet
471
+ context "using option XS::EVENTS" do
472
+ it "should return a mask of events as a Fixnum" do
473
+ array = []
474
+ rc = socket.getsockopt(XS::EVENTS, array)
475
+ rc.should == 0
476
+ array[0].should be_a(Fixnum)
477
+ end
476
478
  end
477
479
  end
478
480
 
@@ -552,6 +554,41 @@ module XS
552
554
  end
553
555
 
554
556
  end # describe 'events mapping to pollin and pollout'
557
+
558
+ socket_types.each do |socket_type|
559
+
560
+ context "calling shutdown" do
561
+ before(:each) do
562
+ @ctx = Context.new
563
+ @socket = @ctx.socket socket_type
564
+ end
565
+
566
+ after(:each) do
567
+ @socket.close
568
+ @ctx.terminate
569
+ end
570
+
571
+ it "unbinds #{XS::SocketTypeNameMap[socket_type]} socket" do
572
+ rc = @socket.bind("tcp://127.0.0.1:5555")
573
+ sleep 0.2
574
+ rc.should be > -1
575
+ rc = @socket.shutdown(rc)
576
+ sleep 0.2
577
+ rc.should == 0
578
+ end
579
+
580
+ it "disconnects #{XS::SocketTypeNameMap[socket_type]} socket" do
581
+ rc = @socket.connect("tcp://127.0.0.1:5555")
582
+ sleep 0.2
583
+ rc.should be > -1
584
+ rc = @socket.shutdown(rc)
585
+ sleep 0.2
586
+ rc.should == 0
587
+ end
588
+
589
+ end # context calling shutdown
590
+
591
+ end
555
592
 
556
593
  end # describe Socket
557
594
 
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,8 @@
1
+ # encoding: utf-8
2
+
1
3
  # Execute 'rake spec' from the main directory to run all specs.
2
4
 
3
- require File.expand_path(
4
- File.join(File.dirname(__FILE__), %w[.. lib ffi-rxs]))
5
+ require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib ffi-rxs]))
5
6
 
6
7
  Thread.abort_on_exception = true
7
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-rxs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-30 00:00:00.000000000 Z
12
+ date: 2012-05-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
16
- requirement: &71177540 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *71177540
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &71177190 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '2.6'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *71177190
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.6'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &71176920 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,8 +53,13 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *71176920
47
- description: Ruby FFI bindings for Crossroads I/O networking library.
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Ruby FFI bindings for Crossroads I/O messaging library.
48
63
  email:
49
64
  - celldee@gmail.com
50
65
  executables: []
@@ -79,28 +94,16 @@ files:
79
94
  - ffi-rxs.gemspec
80
95
  - lib/ffi-rxs.rb
81
96
  - lib/ffi-rxs/constants.rb
82
- - lib/ffi-rxs/constants.rb~
83
97
  - lib/ffi-rxs/context.rb
84
- - lib/ffi-rxs/context.rb~
85
- - lib/ffi-rxs/device.rb~
86
98
  - lib/ffi-rxs/exceptions.rb
87
- - lib/ffi-rxs/exceptions.rb~
88
99
  - lib/ffi-rxs/libc.rb
89
- - lib/ffi-rxs/libc.rb~
90
100
  - lib/ffi-rxs/libxs.rb
91
- - lib/ffi-rxs/libxs.rb~
92
101
  - lib/ffi-rxs/message.rb
93
- - lib/ffi-rxs/message.rb~
94
102
  - lib/ffi-rxs/poll.rb
95
- - lib/ffi-rxs/poll.rb~
96
103
  - lib/ffi-rxs/poll_items.rb
97
- - lib/ffi-rxs/poll_items.rb~
98
104
  - lib/ffi-rxs/socket.rb
99
- - lib/ffi-rxs/socket.rb~
100
105
  - lib/ffi-rxs/util.rb
101
- - lib/ffi-rxs/util.rb~
102
106
  - lib/ffi-rxs/version.rb
103
- - lib/ffi-rxs/version.rb~
104
107
  - spec/context_spec.rb
105
108
  - spec/message_spec.rb
106
109
  - spec/multipart_spec.rb
@@ -130,9 +133,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
133
  version: '0'
131
134
  requirements: []
132
135
  rubyforge_project:
133
- rubygems_version: 1.8.6
136
+ rubygems_version: 1.8.23
134
137
  signing_key:
135
138
  specification_version: 3
136
- summary: Ruby FFI bindings for Crossroads I/O networking library.
139
+ summary: Ruby FFI bindings for Crossroads I/O messaging library.
137
140
  test_files: []
138
- has_rdoc: