cool.io 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: edacf8d3fa674b299e42ade38405b993f5e89de3
4
+ data.tar.gz: d4d3745f78319c94a7a8780408bc636036315b67
5
+ SHA512:
6
+ metadata.gz: 1d870e50cec23dbcd03d8216b42c0b5cebfa4176d2d14b84d8b852478ad632d06464c87c3859c0e5838eeee7a44bceb03f4b79ee151a897b96d49fdbb8b680fc
7
+ data.tar.gz: 3f4bd75c9720813861d33fec20e26bee7adb421667de536b8d3aa5333372c35cf5c4afa94abb3a0740d412040f0a8dcb2b94d29ad7f81b73a07d4bb503f738e1
@@ -3,8 +3,7 @@ language: ruby
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
- - 2.1.0
7
- - 2.1.1
6
+ - 2.1
8
7
  - ruby-head
9
8
  - rbx
10
9
 
data/CHANGES.md CHANGED
@@ -1,3 +1,10 @@
1
+ 1.2.4
2
+ -----
3
+
4
+ * Fix a bug that #close for unconnected Socket doesn't detach all watchers (#33)
5
+ * Remove 1.8 support code
6
+ * Use standard library instead of own hosts list (#34)
7
+
1
8
  1.2.3
2
9
  -----
3
10
 
data/README.md CHANGED
@@ -86,9 +86,6 @@ core socket classes are also provided. Among these are:
86
86
  Cool.io::TCPSocket (or any subclass you wish to provide) whenever an incoming
87
87
  connection is received.
88
88
 
89
- * Cool.io::HttpClient - An HTTP/1.1 client with support for chunked encoding
90
- and streaming response processing through asynchronous callbacks.
91
-
92
89
  Example Program
93
90
  ---------------
94
91
 
@@ -23,10 +23,14 @@ require "cool.io/http_client"
23
23
  require "cool.io/dsl"
24
24
 
25
25
  module Coolio
26
- def self.inspect; "Cool.io"; end
26
+ def self.inspect
27
+ "Cool.io"
28
+ end
27
29
  end
28
30
 
29
31
  module Cool
30
32
  # Allow Coolio module to be referenced as Cool.io
31
- def self.io; Coolio; end
33
+ def self.io
34
+ Coolio
35
+ end
32
36
  end
@@ -17,6 +17,8 @@
17
17
  #
18
18
  #++
19
19
 
20
+ require 'resolv'
21
+
20
22
  module Coolio
21
23
  # A non-blocking DNS resolver. It provides interfaces for querying both
22
24
  # /etc/hosts and nameserves listed in /etc/resolv.conf, or nameservers of
@@ -31,12 +33,6 @@ module Coolio
31
33
  # again.
32
34
  class DNSResolver < IOWatcher
33
35
  #--
34
- # TODO check if it's caching right
35
- if RUBY_PLATFORM =~ /mingw|win32/
36
- HOSTS = 'c:\WINDOWS\system32\drivers\etc\hosts'
37
- else
38
- HOSTS = '/etc/hosts'
39
- end
40
36
  DNS_PORT = 53
41
37
  DATAGRAM_SIZE = 512
42
38
  TIMEOUT = 3 # Retry timeout for each datagram sent
@@ -44,7 +40,7 @@ module Coolio
44
40
  # so currently total is 12s before it will err due to timeouts
45
41
  # if it errs due to inability to reach the DNS server [Errno::EHOSTUNREACH], same
46
42
  # Query /etc/hosts (or the specified hostfile) for the given host
47
- def self.hosts(host, hostfile = HOSTS)
43
+ def self.hosts(host, hostfile = Resolv::Hosts::DefaultFileName)
48
44
  hosts = {}
49
45
  File.open(hostfile) do |f|
50
46
  f.each_line do |host_entry|
@@ -63,7 +59,6 @@ module Coolio
63
59
  # use nameservers listed in /etc/resolv.conf
64
60
  def initialize(hostname, *nameservers)
65
61
  if nameservers.empty?
66
- require 'resolv'
67
62
  nameservers = Resolv::DNS::Config.default_config_hash[:nameserver]
68
63
  raise RuntimeError, "no nameservers found" if nameservers.empty? # TODO just call resolve_failed, not raise [also handle Errno::ENOENT)]
69
64
  end
@@ -124,11 +124,15 @@ end
124
124
  # The Cool module containing all our coolness
125
125
  module Cool
126
126
  module Coolness
127
- def cool; Cool::IOThunk; end
127
+ def cool
128
+ Cool::IOThunk
129
+ end
128
130
  end
129
131
 
130
132
  module IOThunk
131
- def self.io; Coolio::DSL; end
133
+ def self.io
134
+ Coolio::DSL
135
+ end
132
136
  end
133
137
  end
134
138
 
@@ -111,6 +111,9 @@ module Coolio
111
111
  end
112
112
  end
113
113
 
114
+ # HttpClient is tested on only CRuby. AFAIK, there is no HttpClient users.
115
+ # So HttpClient will not be maintained in the future.
116
+
114
117
  # HTTP client class implemented as a subclass of Coolio::TCPSocket. Encodes
115
118
  # requests and allows streaming consumption of the response. Response is
116
119
  # parsed with a Ragel-generated whitelist parser which supports chunked
@@ -31,25 +31,45 @@ module Coolio
31
31
  #
32
32
 
33
33
  # Attach to the event loop
34
- def attach(loop); @_read_watcher.attach loop; schedule_write if !@_write_buffer.empty?; self; end
34
+ def attach(loop)
35
+ @_read_watcher.attach(loop)
36
+ schedule_write if !@_write_buffer.empty?
37
+ self
38
+ end
35
39
 
36
40
  # Detach from the event loop
37
- def detach; @_read_watcher.detach; self; end # TODO should these detect write buffers, as well?
41
+ def detach
42
+ # TODO should these detect write buffers, as well?
43
+ @_read_watcher.detach
44
+ self
45
+ end
38
46
 
39
47
  # Enable the watcher
40
- def enable; @_read_watcher.enable; self; end
48
+ def enable
49
+ @_read_watcher.enable
50
+ self
51
+ end
41
52
 
42
53
  # Disable the watcher
43
- def disable; @_read_watcher.disable; self; end
54
+ def disable
55
+ @_read_watcher.disable
56
+ self
57
+ end
44
58
 
45
59
  # Is the watcher attached?
46
- def attached?; @_read_watcher.attached?; end
60
+ def attached?
61
+ @_read_watcher.attached?
62
+ end
47
63
 
48
64
  # Is the watcher enabled?
49
- def enabled?; @_read_watcher.enabled?; end
65
+ def enabled?
66
+ @_read_watcher.enabled?
67
+ end
50
68
 
51
69
  # Obtain the event loop associated with this object
52
- def evloop; @_read_watcher.evloop; end
70
+ def evloop
71
+ @_read_watcher.evloop
72
+ end
53
73
 
54
74
  #
55
75
  # Callbacks for asynchronous events
@@ -136,7 +156,7 @@ module Coolio
136
156
  # Schedule a write to be performed when the IO object becomes writable
137
157
  def schedule_write
138
158
  return unless @_io # this would mean 'we are still pre DNS here'
139
- return unless attached? # this would mean 'currently unattached' -- ie still pre DNS, or just plain not attached, which is ok
159
+ return unless @_read_watcher.attached? # this would mean 'currently unattached' -- ie still pre DNS, or just plain not attached, which is ok
140
160
  begin
141
161
  enable_write_watcher
142
162
  rescue IOError
@@ -167,8 +187,13 @@ module Coolio
167
187
  end
168
188
 
169
189
  # Configure IOWatcher event callbacks to call the method passed to #initialize
170
- def on_readable; @coolio_io.__send__(:on_readable); end
171
- def on_writable; @coolio_io.__send__(:on_writable); end
190
+ def on_readable
191
+ @coolio_io.__send__(:on_readable)
192
+ end
193
+
194
+ def on_writable
195
+ @coolio_io.__send__(:on_writable)
196
+ end
172
197
  end
173
198
  end
174
199
  end
@@ -15,17 +15,9 @@ end
15
15
 
16
16
  module Coolio
17
17
  class Loop
18
- # In Ruby 1.9 we want a Coolio::Loop per thread, but Ruby 1.8 is unithreaded
19
- if RUBY_VERSION >= "1.9.0"
20
- # Retrieve the default event loop for the current thread
21
- def self.default
22
- Thread.current._coolio_loop
23
- end
24
- else
25
- # Retrieve the default event loop
26
- def self.default
27
- @@_coolio_loop ||= Coolio::Loop.new
28
- end
18
+ # Retrieve the default event loop for the current thread
19
+ def self.default
20
+ Thread.current._coolio_loop
29
21
  end
30
22
 
31
23
  # Create a new Coolio::Loop
@@ -11,7 +11,7 @@ module Coolio
11
11
  # an event to occur before the current watcher can be used in earnest,
12
12
  # such as making an outgoing TCP connection.
13
13
  def watcher_delegate(proxy_var)
14
- %w{attach detach enable disable}.each do |method|
14
+ %w{attach attached? detach enable disable}.each do |method|
15
15
  module_eval <<-EOD
16
16
  def #{method}(*args)
17
17
  if defined? #{proxy_var} and #{proxy_var}
@@ -1,5 +1,7 @@
1
1
  module Coolio
2
- VERSION = "1.2.3"
2
+ VERSION = "1.2.4"
3
3
 
4
- def self.version; VERSION; end
4
+ def self.version
5
+ VERSION
6
+ end
5
7
  end
@@ -2,7 +2,7 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
  require 'tempfile'
3
3
  require 'fcntl'
4
4
 
5
- describe Cool.io::AsyncWatcher, :env => :win do
5
+ describe Cool.io::AsyncWatcher, :env => :exclude_win do
6
6
 
7
7
  it "does not signal on spurious wakeups" do
8
8
  aw = Cool.io::AsyncWatcher.new
@@ -14,6 +14,6 @@ end
14
14
  RSpec.configure do |c|
15
15
  if RUBY_PLATFORM =~ /mingw|win32/
16
16
  $stderr.puts "Skip some specs on Windows"
17
- c.filter_run_excluding :env => :win
17
+ c.filter_run_excluding :env => :exclude_win
18
18
  end
19
19
  end
@@ -106,7 +106,7 @@ ensure
106
106
  end
107
107
 
108
108
  # This test should work on Windows
109
- describe Coolio::TCPServer, :env => :win do
109
+ describe Coolio::TCPServer do
110
110
 
111
111
  it '#run' do
112
112
  test_run("hello").should == "hello"
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe Coolio::TCPSocket do
4
+
5
+ before :each do
6
+ @server = TCPServer.new('127.0.0.1', 0)
7
+ @host = @server.addr[3]
8
+ @port = @server.addr[1]
9
+ end
10
+
11
+ after :each do
12
+ @server.close
13
+ end
14
+
15
+ describe '#close' do
16
+
17
+ it 'detaches all watchers on #close before loop#run' do
18
+ reactor = Coolio::Loop.new
19
+ client = Coolio::TCPSocket.connect(@host, @port)
20
+ reactor.attach(client)
21
+ client.close
22
+ reactor.watchers.size.should == 0
23
+ end
24
+ end
25
+
26
+ end
27
+
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
  require 'tempfile'
3
3
 
4
- describe Cool.io::UNIXListener, :env => :win do
4
+ describe Cool.io::UNIXListener, :env => :exclude_win do
5
5
 
6
6
  before :each do
7
7
  @tmp = Tempfile.new('coolio_unix_listener_spec')
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
  require 'tempfile'
3
3
 
4
- describe Cool.io::UNIXServer, :env => :win do
4
+ describe Cool.io::UNIXServer, :env => :exclude_win do
5
5
 
6
6
  before :each do
7
7
  @tmp = Tempfile.new('coolio_unix_server_spec')
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cool.io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
5
- prerelease:
4
+ version: 1.2.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tony Arcieri
@@ -10,54 +9,48 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2014-04-25 00:00:00.000000000 Z
12
+ date: 2014-05-12 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rake-compiler
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ~>
18
+ - - "~>"
21
19
  - !ruby/object:Gem::Version
22
20
  version: 0.8.3
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ~>
25
+ - - "~>"
29
26
  - !ruby/object:Gem::Version
30
27
  version: 0.8.3
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rspec
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - ">="
37
33
  - !ruby/object:Gem::Version
38
34
  version: 2.13.0
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - ">="
45
40
  - !ruby/object:Gem::Version
46
41
  version: 2.13.0
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rdoc
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - ">="
53
47
  - !ruby/object:Gem::Version
54
48
  version: 3.6.0
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - ">="
61
54
  - !ruby/object:Gem::Version
62
55
  version: 3.6.0
63
56
  description: Cool.io provides a high performance event framework for Ruby which uses
@@ -72,9 +65,9 @@ extensions:
72
65
  - ext/iobuffer/extconf.rb
73
66
  extra_rdoc_files: []
74
67
  files:
75
- - .gitignore
76
- - .rspec
77
- - .travis.yml
68
+ - ".gitignore"
69
+ - ".rspec"
70
+ - ".travis.yml"
78
71
  - CHANGES.md
79
72
  - Gemfile
80
73
  - LICENSE
@@ -149,38 +142,32 @@ files:
149
142
  - spec/spec_helper.rb
150
143
  - spec/stat_watcher_spec.rb
151
144
  - spec/tcp_server_spec.rb
145
+ - spec/tcp_socket_spec.rb
152
146
  - spec/timer_watcher_spec.rb
153
147
  - spec/unix_listener_spec.rb
154
148
  - spec/unix_server_spec.rb
155
149
  homepage: http://coolio.github.com
156
150
  licenses: []
151
+ metadata: {}
157
152
  post_install_message:
158
153
  rdoc_options: []
159
154
  require_paths:
160
155
  - lib
161
156
  required_ruby_version: !ruby/object:Gem::Requirement
162
- none: false
163
157
  requirements:
164
- - - ! '>='
158
+ - - ">="
165
159
  - !ruby/object:Gem::Version
166
160
  version: '0'
167
- segments:
168
- - 0
169
- hash: -2054079521512211321
170
161
  required_rubygems_version: !ruby/object:Gem::Requirement
171
- none: false
172
162
  requirements:
173
- - - ! '>='
163
+ - - ">="
174
164
  - !ruby/object:Gem::Version
175
165
  version: '0'
176
- segments:
177
- - 0
178
- hash: -2054079521512211321
179
166
  requirements: []
180
167
  rubyforge_project:
181
- rubygems_version: 1.8.23
168
+ rubygems_version: 2.2.2
182
169
  signing_key:
183
- specification_version: 3
170
+ specification_version: 4
184
171
  summary: A cool framework for doing high performance I/O in Ruby
185
172
  test_files:
186
173
  - spec/async_watcher_spec.rb
@@ -188,6 +175,7 @@ test_files:
188
175
  - spec/spec_helper.rb
189
176
  - spec/stat_watcher_spec.rb
190
177
  - spec/tcp_server_spec.rb
178
+ - spec/tcp_socket_spec.rb
191
179
  - spec/timer_watcher_spec.rb
192
180
  - spec/unix_listener_spec.rb
193
181
  - spec/unix_server_spec.rb