nio4r 0.4.0 → 0.5.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.
@@ -18,8 +18,13 @@ describe "IO.pipe" do
18
18
  let :unwritable_subject do
19
19
  reader, pipe = IO.pipe
20
20
 
21
+ #HACK: On OS X 10.8, this str must be larger than PIPE_BUF. Otherwise,
22
+ # the write is atomic and select() will return writable but write()
23
+ # will throw EAGAIN if there is too little space to write the string
24
+ # TODO: Use FFI to lookup the platform-specific size of PIPE_BUF
25
+ str = "JUNK IN THE TUBES" * 10000
21
26
  begin
22
- pipe.write_nonblock "JUNK IN THE TUBES"
27
+ pipe.write_nonblock str
23
28
  _, writers = select [], [pipe], [], 0
24
29
  rescue Errno::EPIPE
25
30
  break
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe TCPSocket do
4
4
  port_offset = 0
5
5
  let(:tcp_port) { 12345 + (port_offset += 1) }
6
-
6
+
7
7
  let :readable_subject do
8
8
  server = TCPServer.new("localhost", tcp_port)
9
9
  sock = TCPSocket.open("localhost", tcp_port)
@@ -67,7 +67,7 @@ describe TCPSocket do
67
67
  it_behaves_like "an NIO selectable"
68
68
  it_behaves_like "an NIO selectable stream"
69
69
  it_behaves_like "an NIO bidirectional stream"
70
-
70
+
71
71
  context :connect do
72
72
  it "selects writable when connected" do
73
73
  selector = NIO::Selector.new
@@ -85,4 +85,4 @@ describe TCPSocket do
85
85
  result.unpack('i').first.should be_zero
86
86
  end
87
87
  end
88
- end
88
+ end
@@ -19,6 +19,11 @@ describe NIO::Selector do
19
19
  it "raises TypeError if asked to register non-IO objects" do
20
20
  expect { subject.register(42, :r) }.to raise_exception TypeError
21
21
  end
22
+
23
+ it "raises when asked to register after closing" do
24
+ subject.close
25
+ expect { subject.register(reader, :r) }.to raise_exception IOError
26
+ end
22
27
  end
23
28
 
24
29
  it "knows which IO objects are registered" do
@@ -34,12 +39,12 @@ describe NIO::Selector do
34
39
  subject.should_not be_registered(reader)
35
40
  monitor.should be_closed
36
41
  end
37
-
42
+
38
43
  it "reports if it is empty" do
39
44
  subject.should be_empty
40
-
45
+
41
46
  monitor = subject.register(reader, :r)
42
-
47
+
43
48
  subject.should_not be_empty
44
49
  end
45
50
 
@@ -114,13 +119,25 @@ describe NIO::Selector do
114
119
  writer << "ohai"
115
120
  unready, _ = IO.pipe
116
121
 
117
- reader_monitor = subject.register(reader, :r)
122
+ reader_monitor = subject.register(reader, :r)
118
123
  unready_monitor = subject.register(unready, :r)
119
124
 
120
125
  selected = subject.select(0)
121
126
  selected.size.should == 1
122
- selected.should include(reader_monitor)
123
- selected.should_not include(unready_monitor)
127
+ selected.should include reader_monitor
128
+ selected.should_not include unready_monitor
129
+ end
130
+
131
+ it "selects closed IO objects" do
132
+ monitor = subject.register(reader, :r)
133
+ subject.select(0).should be_nil
134
+
135
+ thread = Thread.new { subject.select }
136
+ Thread.pass while thread.status && thread.status != "sleep"
137
+
138
+ writer.close
139
+ selected = thread.value
140
+ selected.should include monitor
124
141
  end
125
142
 
126
143
  it "iterates across selected objects with a block" do
@@ -140,9 +157,9 @@ describe NIO::Selector do
140
157
  result = subject.select { |monitor| readables << monitor }
141
158
  result.should == 2
142
159
 
143
- readables.should include(monitor1)
144
- readables.should include(monitor2)
145
- readables.should_not include(monitor3)
160
+ readables.should include monitor1
161
+ readables.should include monitor2
162
+ readables.should_not include monitor3
146
163
  end
147
164
  end
148
165
 
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,7 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  require 'rubygems'
2
5
  require 'bundler/setup'
3
6
  require 'nio'
4
- require 'support/selectable_examples'
7
+ require 'support/selectable_examples'
@@ -52,5 +52,4 @@ shared_context "an NIO bidirectional stream" do
52
52
  m.readiness.should == :rw
53
53
  end
54
54
  end
55
-
56
55
  end
metadata CHANGED
@@ -1,49 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nio4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tony Arcieri
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-18 00:00:00.000000000 Z
11
+ date: 2013-08-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake-compiler
16
- requirement: &70312140700780 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
- version_requirements: *70312140700780
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rake
27
- requirement: &70312140700220 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *70312140700220
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: rspec
38
- requirement: &70312140699800 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - '>='
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70312140699800
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  description: New IO for Ruby
48
56
  email:
49
57
  - tony.arcieri@gmail.com
@@ -99,29 +107,28 @@ files:
99
107
  - spec/support/selectable_examples.rb
100
108
  - tasks/extension.rake
101
109
  - tasks/rspec.rake
102
- homepage: https://github.com/tarcieri/nio4r
110
+ homepage: https://github.com/celluloid/nio4r
103
111
  licenses: []
112
+ metadata: {}
104
113
  post_install_message:
105
114
  rdoc_options: []
106
115
  require_paths:
107
116
  - lib
108
117
  required_ruby_version: !ruby/object:Gem::Requirement
109
- none: false
110
118
  requirements:
111
- - - ! '>='
119
+ - - '>='
112
120
  - !ruby/object:Gem::Version
113
121
  version: '0'
114
122
  required_rubygems_version: !ruby/object:Gem::Requirement
115
- none: false
116
123
  requirements:
117
- - - ! '>='
124
+ - - '>='
118
125
  - !ruby/object:Gem::Version
119
126
  version: '0'
120
127
  requirements: []
121
128
  rubyforge_project:
122
- rubygems_version: 1.8.17
129
+ rubygems_version: 2.0.3
123
130
  signing_key:
124
- specification_version: 3
131
+ specification_version: 4
125
132
  summary: NIO provides a high performance selector API for monitoring IO objects
126
133
  test_files:
127
134
  - spec/nio/acceptables_spec.rb