io-wait 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Rakefile +5 -1
- data/ext/io/wait/wait.c +122 -87
- data/io-wait.gemspec +9 -4
- data/rakelib/changelogs.rake +34 -0
- data/rakelib/epoch.rake +5 -0
- data/rakelib/version.rake +44 -0
- metadata +9 -9
- data/.gitignore +0 -11
- data/.travis.yml +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac9aac81de884ac5961c9415e4347be5f26ae3ef6e52854834c76a105e4f7388
|
4
|
+
data.tar.gz: 118b4011fcaa3f94a48ff2d3be11db1b2049375f709426b177ab5a9bc4799d7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58cf2bc5cdc614eb7827a460decf662def72676011fbf9d4a853dfd71b66311dd10d81fcd100ac0a2d676d61009e6e3a4c80ac0f7c7d0d88f303a8a16f1510de
|
7
|
+
data.tar.gz: 700343ef7233d37f9e27d22bfab091af07e681e996619c8953553152b7b7598bb1843d2d969b8d268cac752ead4641b13f32380d2b5c43e8d4808e4176b64c89
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
3
|
|
4
|
+
name = "io/wait"
|
5
|
+
|
4
6
|
Rake::TestTask.new(:test) do |t|
|
5
7
|
t.libs << "test/lib"
|
6
8
|
t.ruby_opts << "-rhelper"
|
@@ -8,5 +10,7 @@ Rake::TestTask.new(:test) do |t|
|
|
8
10
|
end
|
9
11
|
|
10
12
|
require 'rake/extensiontask'
|
11
|
-
Rake::ExtensionTask.new(
|
13
|
+
Rake::ExtensionTask.new(name)
|
14
|
+
task :test => :compile
|
15
|
+
|
12
16
|
task :default => :test
|
data/ext/io/wait/wait.c
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: t -*- */
|
1
2
|
/**********************************************************************
|
2
3
|
|
3
4
|
io/wait.c -
|
@@ -39,35 +40,6 @@
|
|
39
40
|
#define FIONREAD_POSSIBLE_P(fd) ((void)(fd),Qtrue)
|
40
41
|
#endif
|
41
42
|
|
42
|
-
static VALUE io_ready_p _((VALUE io));
|
43
|
-
static VALUE io_wait_readable _((int argc, VALUE *argv, VALUE io));
|
44
|
-
static VALUE io_wait_writable _((int argc, VALUE *argv, VALUE io));
|
45
|
-
void Init_wait _((void));
|
46
|
-
|
47
|
-
static struct timeval *
|
48
|
-
get_timeout(int argc, VALUE *argv, struct timeval *timerec)
|
49
|
-
{
|
50
|
-
VALUE timeout = Qnil;
|
51
|
-
rb_check_arity(argc, 0, 1);
|
52
|
-
if (!argc || NIL_P(timeout = argv[0])) {
|
53
|
-
return NULL;
|
54
|
-
}
|
55
|
-
else {
|
56
|
-
*timerec = rb_time_interval(timeout);
|
57
|
-
return timerec;
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
static int
|
62
|
-
wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv)
|
63
|
-
{
|
64
|
-
int i = rb_wait_for_single_fd(fptr->fd, events, tv);
|
65
|
-
if (i < 0)
|
66
|
-
rb_sys_fail(0);
|
67
|
-
rb_io_check_closed(fptr);
|
68
|
-
return (i & events);
|
69
|
-
}
|
70
|
-
|
71
43
|
/*
|
72
44
|
* call-seq:
|
73
45
|
* io.nread -> int
|
@@ -79,13 +51,12 @@ wait_for_single_fd(rb_io_t *fptr, int events, struct timeval *tv)
|
|
79
51
|
static VALUE
|
80
52
|
io_nread(VALUE io)
|
81
53
|
{
|
82
|
-
rb_io_t *fptr;
|
83
|
-
int len;
|
54
|
+
rb_io_t *fptr = NULL;
|
84
55
|
ioctl_arg n;
|
85
56
|
|
86
57
|
GetOpenFile(io, fptr);
|
87
58
|
rb_io_check_readable(fptr);
|
88
|
-
len = rb_io_read_pending(fptr);
|
59
|
+
int len = rb_io_read_pending(fptr);
|
89
60
|
if (len > 0) return INT2FIX(len);
|
90
61
|
if (!FIONREAD_POSSIBLE_P(fptr->fd)) return INT2FIX(0);
|
91
62
|
if (ioctl(fptr->fd, FIONREAD, &n)) return INT2FIX(0);
|
@@ -93,76 +64,114 @@ io_nread(VALUE io)
|
|
93
64
|
return INT2FIX(0);
|
94
65
|
}
|
95
66
|
|
67
|
+
static VALUE
|
68
|
+
io_wait_event(VALUE io, int event, VALUE timeout)
|
69
|
+
{
|
70
|
+
VALUE result = rb_io_wait(io, RB_INT2NUM(event), timeout);
|
71
|
+
|
72
|
+
if (!RB_TEST(result)) {
|
73
|
+
return Qnil;
|
74
|
+
}
|
75
|
+
|
76
|
+
int mask = RB_NUM2INT(result);
|
77
|
+
|
78
|
+
if (mask & event) {
|
79
|
+
return io;
|
80
|
+
}
|
81
|
+
else {
|
82
|
+
return Qfalse;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
96
86
|
/*
|
97
87
|
* call-seq:
|
98
88
|
* io.ready? -> true or false
|
99
89
|
*
|
100
|
-
* Returns true if input available without blocking, or false
|
90
|
+
* Returns +true+ if input available without blocking, or +false+.
|
101
91
|
*/
|
102
92
|
|
103
93
|
static VALUE
|
104
94
|
io_ready_p(VALUE io)
|
105
95
|
{
|
106
96
|
rb_io_t *fptr;
|
107
|
-
struct timeval tv = {0, 0};
|
108
97
|
|
109
98
|
GetOpenFile(io, fptr);
|
110
99
|
rb_io_check_readable(fptr);
|
111
100
|
if (rb_io_read_pending(fptr)) return Qtrue;
|
112
|
-
|
113
|
-
|
114
|
-
return Qfalse;
|
101
|
+
|
102
|
+
return io_wait_event(io, RUBY_IO_READABLE, RB_INT2NUM(0));
|
115
103
|
}
|
116
104
|
|
117
105
|
/*
|
118
106
|
* call-seq:
|
119
|
-
* io.wait_readable ->
|
120
|
-
* io.wait_readable(timeout) ->
|
107
|
+
* io.wait_readable -> true or false
|
108
|
+
* io.wait_readable(timeout) -> true or false
|
121
109
|
*
|
122
|
-
* Waits until IO is readable
|
123
|
-
* +
|
110
|
+
* Waits until IO is readable and returns +true+, or
|
111
|
+
* +false+ when times out.
|
124
112
|
* Returns +true+ immediately when buffered data is available.
|
125
113
|
*/
|
126
114
|
|
127
115
|
static VALUE
|
128
116
|
io_wait_readable(int argc, VALUE *argv, VALUE io)
|
129
117
|
{
|
130
|
-
rb_io_t *fptr;
|
131
|
-
struct timeval timerec;
|
132
|
-
struct timeval *tv;
|
118
|
+
rb_io_t *fptr = NULL;
|
133
119
|
|
134
|
-
|
120
|
+
RB_IO_POINTER(io, fptr);
|
135
121
|
rb_io_check_readable(fptr);
|
136
|
-
|
122
|
+
|
137
123
|
if (rb_io_read_pending(fptr)) return Qtrue;
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
124
|
+
|
125
|
+
rb_check_arity(argc, 0, 1);
|
126
|
+
VALUE timeout = (argc == 1 ? argv[0] : Qnil);
|
127
|
+
|
128
|
+
return io_wait_event(io, RUBY_IO_READABLE, timeout);
|
142
129
|
}
|
143
130
|
|
144
131
|
/*
|
145
132
|
* call-seq:
|
146
|
-
* io.wait_writable ->
|
147
|
-
* io.wait_writable(timeout) ->
|
133
|
+
* io.wait_writable -> true or false
|
134
|
+
* io.wait_writable(timeout) -> true or false
|
148
135
|
*
|
149
|
-
* Waits until IO is writable
|
150
|
-
* +
|
136
|
+
* Waits until IO is writable and returns +true+ or
|
137
|
+
* +false+ when times out.
|
151
138
|
*/
|
152
139
|
static VALUE
|
153
140
|
io_wait_writable(int argc, VALUE *argv, VALUE io)
|
154
141
|
{
|
155
|
-
rb_io_t *fptr;
|
156
|
-
struct timeval timerec;
|
157
|
-
struct timeval *tv;
|
142
|
+
rb_io_t *fptr = NULL;
|
158
143
|
|
159
|
-
|
144
|
+
RB_IO_POINTER(io, fptr);
|
160
145
|
rb_io_check_writable(fptr);
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
return
|
146
|
+
|
147
|
+
rb_check_arity(argc, 0, 1);
|
148
|
+
VALUE timeout = (argc == 1 ? argv[0] : Qnil);
|
149
|
+
|
150
|
+
return io_wait_event(io, RUBY_IO_WRITABLE, timeout);
|
151
|
+
}
|
152
|
+
|
153
|
+
/*
|
154
|
+
* call-seq:
|
155
|
+
* io.wait_priority -> true or false
|
156
|
+
* io.wait_priority(timeout) -> true or false
|
157
|
+
*
|
158
|
+
* Waits until IO is priority and returns +true+ or
|
159
|
+
* +false+ when times out.
|
160
|
+
*/
|
161
|
+
static VALUE
|
162
|
+
io_wait_priority(int argc, VALUE *argv, VALUE io)
|
163
|
+
{
|
164
|
+
rb_io_t *fptr = NULL;
|
165
|
+
|
166
|
+
RB_IO_POINTER(io, fptr);
|
167
|
+
rb_io_check_readable(fptr);
|
168
|
+
|
169
|
+
if (rb_io_read_pending(fptr)) return Qtrue;
|
170
|
+
|
171
|
+
rb_check_arity(argc, 0, 1);
|
172
|
+
VALUE timeout = argc == 1 ? argv[0] : Qnil;
|
173
|
+
|
174
|
+
return io_wait_event(io, RUBY_IO_PRIORITY, timeout);
|
166
175
|
}
|
167
176
|
|
168
177
|
static int
|
@@ -201,41 +210,60 @@ wait_mode_sym(VALUE mode)
|
|
201
210
|
|
202
211
|
/*
|
203
212
|
* call-seq:
|
204
|
-
* io.wait(
|
213
|
+
* io.wait(events, timeout) -> event mask or false.
|
214
|
+
* io.wait(timeout = nil, mode = :read) -> event mask or false.
|
215
|
+
*
|
216
|
+
* Waits until the IO becomes ready for the specified events and returns the
|
217
|
+
* subset of events that become ready, or +false+ when times out.
|
218
|
+
*
|
219
|
+
* The events can be a bit mask of +IO::READABLE+, +IO::WRITABLE+ or
|
220
|
+
* +IO::PRIORITY+.
|
205
221
|
*
|
206
|
-
* Waits until IO is readable or writable without blocking and returns
|
207
|
-
* +self+, or +nil+ when times out.
|
208
222
|
* Returns +true+ immediately when buffered data is available.
|
223
|
+
*
|
209
224
|
* Optional parameter +mode+ is one of +:read+, +:write+, or
|
210
225
|
* +:read_write+.
|
211
226
|
*/
|
212
227
|
|
213
228
|
static VALUE
|
214
|
-
|
229
|
+
io_wait(int argc, VALUE *argv, VALUE io)
|
215
230
|
{
|
216
|
-
|
217
|
-
|
218
|
-
struct timeval *tv = NULL;
|
219
|
-
int event = 0;
|
220
|
-
int i;
|
231
|
+
VALUE timeout = Qundef;
|
232
|
+
rb_io_event_t events = 0;
|
221
233
|
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
234
|
+
if (argc != 2 || (RB_SYMBOL_P(argv[0]) || RB_SYMBOL_P(argv[1]))) {
|
235
|
+
for (int i = 0; i < argc; i += 1) {
|
236
|
+
if (RB_SYMBOL_P(argv[i])) {
|
237
|
+
events |= wait_mode_sym(argv[i]);
|
238
|
+
}
|
239
|
+
else if (timeout == Qundef) {
|
240
|
+
rb_time_interval(timeout = argv[i]);
|
241
|
+
}
|
242
|
+
else {
|
243
|
+
rb_raise(rb_eArgError, "timeout given more than once");
|
244
|
+
}
|
226
245
|
}
|
227
|
-
|
228
|
-
|
246
|
+
if (timeout == Qundef) timeout = Qnil;
|
247
|
+
}
|
248
|
+
else /* argc == 2 */ {
|
249
|
+
events = RB_NUM2UINT(argv[0]);
|
250
|
+
timeout = argv[1];
|
251
|
+
}
|
252
|
+
|
253
|
+
if (events == 0) {
|
254
|
+
events = RUBY_IO_READABLE;
|
255
|
+
}
|
256
|
+
|
257
|
+
if (events & RUBY_IO_READABLE) {
|
258
|
+
rb_io_t *fptr = NULL;
|
259
|
+
RB_IO_POINTER(io, fptr);
|
260
|
+
|
261
|
+
if (rb_io_read_pending(fptr)) {
|
262
|
+
return Qtrue;
|
229
263
|
}
|
230
264
|
}
|
231
|
-
|
232
|
-
|
233
|
-
if (!event) event = RB_WAITFD_IN;
|
234
|
-
if ((event & RB_WAITFD_IN) && rb_io_read_pending(fptr))
|
235
|
-
return Qtrue;
|
236
|
-
if (wait_for_single_fd(fptr, event, tv))
|
237
|
-
return io;
|
238
|
-
return Qnil;
|
265
|
+
|
266
|
+
return io_wait_event(io, events, timeout);
|
239
267
|
}
|
240
268
|
|
241
269
|
/*
|
@@ -245,9 +273,16 @@ io_wait_readwrite(int argc, VALUE *argv, VALUE io)
|
|
245
273
|
void
|
246
274
|
Init_wait(void)
|
247
275
|
{
|
276
|
+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
|
277
|
+
RB_EXT_RACTOR_SAFE(true);
|
278
|
+
#endif
|
279
|
+
|
248
280
|
rb_define_method(rb_cIO, "nread", io_nread, 0);
|
249
281
|
rb_define_method(rb_cIO, "ready?", io_ready_p, 0);
|
250
|
-
|
282
|
+
|
283
|
+
rb_define_method(rb_cIO, "wait", io_wait, -1);
|
284
|
+
|
251
285
|
rb_define_method(rb_cIO, "wait_readable", io_wait_readable, -1);
|
252
286
|
rb_define_method(rb_cIO, "wait_writable", io_wait_writable, -1);
|
287
|
+
rb_define_method(rb_cIO, "wait_priority", io_wait_priority, -1);
|
253
288
|
}
|
data/io-wait.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
_VERSION = "0.2.0"
|
2
|
+
|
1
3
|
Gem::Specification.new do |spec|
|
2
4
|
spec.name = "io-wait"
|
3
|
-
spec.version =
|
5
|
+
spec.version = _VERSION
|
4
6
|
spec.authors = ["Nobu Nakada"]
|
5
7
|
spec.email = ["nobu@ruby-lang.org"]
|
6
8
|
|
@@ -8,15 +10,18 @@ Gem::Specification.new do |spec|
|
|
8
10
|
spec.description = %q{Waits until IO is readable or writable without blocking.}
|
9
11
|
spec.homepage = "https://github.com/ruby/io-wait"
|
10
12
|
spec.licenses = ["Ruby", "BSD-2-Clause"]
|
11
|
-
spec.required_ruby_version = Gem::Requirement.new(">=
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
|
12
14
|
|
13
15
|
spec.metadata["homepage_uri"] = spec.homepage
|
14
16
|
spec.metadata["source_code_uri"] = spec.homepage
|
15
17
|
|
16
18
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
17
|
-
`git ls-files -z`.split("\x0").reject
|
19
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
f.match(%r{\A(?:test|spec|features)/|\A\.(?:git|travis)})
|
21
|
+
end
|
18
22
|
end
|
23
|
+
spec.extensions = %w[ext/io/wait/extconf.rb]
|
19
24
|
spec.bindir = "exe"
|
20
|
-
spec.executables =
|
25
|
+
spec.executables = []
|
21
26
|
spec.require_paths = ["lib"]
|
22
27
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
task "build" => "changelogs"
|
2
|
+
|
3
|
+
changelog = proc do |output, ver = nil, prev = nil|
|
4
|
+
ver &&= Gem::Version.new(ver)
|
5
|
+
range = [[prev], [ver, "HEAD"]].map {|ver, branch| ver ? "v#{ver.to_s}" : branch}.compact.join("..")
|
6
|
+
IO.popen(%W[git log --format=fuller --topo-order --no-merges #{range}]) do |log|
|
7
|
+
line = log.gets
|
8
|
+
FileUtils.mkpath(File.dirname(output))
|
9
|
+
File.open(output, "wb") do |f|
|
10
|
+
f.print "-*- coding: utf-8 -*-\n\n", line
|
11
|
+
log.each_line do |line|
|
12
|
+
line.sub!(/^(?!:)(?:Author|Commit)?(?:Date)?: /, ' \&')
|
13
|
+
line.sub!(/ +$/, '')
|
14
|
+
f.print(line)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
tags = IO.popen(%w[git tag -l v[0-9]*]).grep(/v(.*)/) {$1}
|
21
|
+
tags.sort_by! {|tag| tag.scan(/\d+/).map(&:to_i)}
|
22
|
+
tags.inject(nil) do |prev, tag|
|
23
|
+
task("logs/ChangeLog-#{tag}") {|t| changelog[t.name, tag, prev]}
|
24
|
+
tag
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Make ChangeLog"
|
28
|
+
task "ChangeLog", [:ver, :prev] do |t, ver: nil, prev: tags.last|
|
29
|
+
changelog[t.name, ver, prev]
|
30
|
+
end
|
31
|
+
|
32
|
+
changelogs = ["ChangeLog", *tags.map {|tag| "logs/ChangeLog-#{tag}"}]
|
33
|
+
task "changelogs" => changelogs
|
34
|
+
CLOBBER.concat(changelogs) << "logs"
|
data/rakelib/epoch.rake
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
class << (helper = Bundler::GemHelper.instance)
|
2
|
+
def update_gemspec
|
3
|
+
path = gemspec.loaded_from
|
4
|
+
File.open(path, "r+b") do |f|
|
5
|
+
d = f.read
|
6
|
+
if d.sub!(/^(_VERSION\s*=\s*)".*"/) {$1 + gemspec.version.to_s.dump}
|
7
|
+
f.rewind
|
8
|
+
f.truncate(0)
|
9
|
+
f.print(d)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def commit_bump
|
15
|
+
sh(%W[git -C #{__dir__} commit -m bump\ up\ to\ #{gemspec.version}
|
16
|
+
#{gemspec.loaded_from}])
|
17
|
+
end
|
18
|
+
|
19
|
+
def version=(v)
|
20
|
+
gemspec.version = v
|
21
|
+
update_gemspec
|
22
|
+
commit_bump
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
major, minor, teeny = helper.gemspec.version.segments
|
27
|
+
|
28
|
+
task "bump:teeny" do
|
29
|
+
helper.version = Gem::Version.new("#{major}.#{minor}.#{teeny+1}")
|
30
|
+
end
|
31
|
+
|
32
|
+
task "bump:minor" do
|
33
|
+
helper.version = Gem::Version.new("#{major}.#{minor+1}.0")
|
34
|
+
end
|
35
|
+
|
36
|
+
task "bump:major" do
|
37
|
+
helper.version = Gem::Version.new("#{major+1}.0.0")
|
38
|
+
end
|
39
|
+
|
40
|
+
task "bump" => "bump:teeny"
|
41
|
+
|
42
|
+
task "tag" do
|
43
|
+
helper.__send__(:tag_version)
|
44
|
+
end
|
metadata
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: io-wait
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nobu Nakada
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Waits until IO is readable or writable without blocking.
|
14
14
|
email:
|
15
15
|
- nobu@ruby-lang.org
|
16
16
|
executables: []
|
17
|
-
extensions:
|
17
|
+
extensions:
|
18
|
+
- ext/io/wait/extconf.rb
|
18
19
|
extra_rdoc_files: []
|
19
20
|
files:
|
20
|
-
- ".gitignore"
|
21
|
-
- ".travis.yml"
|
22
21
|
- COPYING
|
23
22
|
- Gemfile
|
24
23
|
- README.md
|
25
24
|
- Rakefile
|
26
|
-
- bin/console
|
27
|
-
- bin/setup
|
28
25
|
- ext/io/wait/depend
|
29
26
|
- ext/io/wait/extconf.rb
|
30
27
|
- ext/io/wait/wait.c
|
31
28
|
- io-wait.gemspec
|
29
|
+
- rakelib/changelogs.rake
|
30
|
+
- rakelib/epoch.rake
|
31
|
+
- rakelib/version.rake
|
32
32
|
homepage: https://github.com/ruby/io-wait
|
33
33
|
licenses:
|
34
34
|
- Ruby
|
@@ -44,14 +44,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 3.0.0
|
48
48
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
49
|
requirements:
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '0'
|
53
53
|
requirements: []
|
54
|
-
rubygems_version: 3.
|
54
|
+
rubygems_version: 3.3.0.dev
|
55
55
|
signing_key:
|
56
56
|
specification_version: 4
|
57
57
|
summary: Waits until IO is readable or writable without blocking.
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "io/wait"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|