uvrb 0.1.0 → 0.1.1
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/.gitmodules +1 -1
- data/.travis.yml +6 -3
- data/README.rdoc +5 -10
- data/Rakefile +4 -4
- data/features/async.feature +2 -2
- data/features/idle.feature +1 -1
- data/features/pipe.feature +3 -4
- data/features/step_definitions/additional_cli_steps.rb +8 -6
- data/lib/uv.rb +222 -195
- data/lib/uv/assertions.rb +13 -7
- data/lib/uv/handle.rb +7 -4
- data/lib/uv/loop.rb +25 -61
- data/lib/uv/pipe.rb +10 -0
- data/lib/uv/resource.rb +1 -1
- data/lib/uv/tasks.rb +3 -3
- data/lib/uv/tasks/mac.rb +2 -2
- data/lib/uv/tasks/unix.rb +1 -1
- data/lib/uv/tasks/win.rb +11 -2
- data/lib/uv/timer.rb +1 -1
- data/lib/uv/types.rb +48 -69
- data/lib/uv/types/windows.rb +12 -0
- data/lib/uv/version.rb +1 -1
- data/lib/uv/work.rb +41 -0
- data/spec/uv/loop_spec.rb +2 -11
- data/spec/uv/pipe_spec.rb +10 -2
- data/uvrb.gemspec +36 -9
- metadata +20 -17
data/lib/uv/types/windows.rb
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
module UV
|
2
|
+
typedef :uint32_t, :in_addr_t
|
3
|
+
typedef :uint16, :in_port_t
|
4
|
+
typedef :int, :mode_t
|
5
|
+
|
6
|
+
module WS2
|
7
|
+
extend FFI::Library
|
8
|
+
ffi_lib('Ws2_32.dll').first # this is for ntohs
|
9
|
+
attach_function :ntohs, [:ushort], :ushort, :blocking => true
|
10
|
+
end
|
11
|
+
def_delegators :WS2, :ntohs
|
12
|
+
module_function :ntohs
|
13
|
+
|
2
14
|
# win32 has a different uv_buf_t layout to everything else.
|
3
15
|
class UvBuf < FFI::Struct
|
4
16
|
layout :len, :ulong, :base, :pointer
|
data/lib/uv/version.rb
CHANGED
data/lib/uv/work.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module UV
|
2
|
+
class Work
|
3
|
+
include Resource, Listener
|
4
|
+
|
5
|
+
def initialize(loop, work, callback = nil)
|
6
|
+
@loop, @work, @callback = loop, work, callback
|
7
|
+
@complete = false
|
8
|
+
|
9
|
+
@pointer = UV.create_request(:uv_work)
|
10
|
+
begin
|
11
|
+
check_result! UV.queue_work(@loop, @pointer, callback(:on_work), callback(:on_complete))
|
12
|
+
rescue StandardError => e
|
13
|
+
UV.free(@pointer)
|
14
|
+
@complete = true
|
15
|
+
raise e
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def cancel
|
20
|
+
if not @complete
|
21
|
+
check_result! UV.cancel(@pointer)
|
22
|
+
@complete = true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def completed?
|
27
|
+
return @complete
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def on_complete(req)
|
32
|
+
@complete = true
|
33
|
+
UV.free(req)
|
34
|
+
@callback.call unless @callback.nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_work(req)
|
38
|
+
@work.call
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/uv/loop_spec.rb
CHANGED
@@ -26,20 +26,12 @@ describe UV::Loop do
|
|
26
26
|
|
27
27
|
describe "#run" do
|
28
28
|
it "calls UV.run" do
|
29
|
-
UV.should_receive(:run).with(loop_pointer)
|
29
|
+
UV.should_receive(:run).with(loop_pointer, :UV_RUN_DEFAULT)
|
30
30
|
|
31
31
|
subject.run
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe "#run_once" do
|
36
|
-
it "calls UV.run_once" do
|
37
|
-
UV.should_receive(:run_once).with(loop_pointer)
|
38
|
-
|
39
|
-
subject.run_once
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
35
|
describe "#update_time" do
|
44
36
|
it "calls UV.update_time" do
|
45
37
|
UV.should_receive(:update_time).with(loop_pointer)
|
@@ -62,11 +54,10 @@ describe UV::Loop do
|
|
62
54
|
let(:error) { double() }
|
63
55
|
|
64
56
|
it "calls UV.last_error" do
|
65
|
-
UV.should_receive(:last_error).with(loop_pointer).and_return(error)
|
66
57
|
UV.should_receive(:err_name).with(error).and_return("EINVAL")
|
67
58
|
UV.should_receive(:strerror).with(error).and_return("invalid argument")
|
68
59
|
|
69
|
-
subject.
|
60
|
+
subject.lookup_error(error).should == UV::Error::EINVAL.new("invalid argument")
|
70
61
|
end
|
71
62
|
end
|
72
63
|
|
data/spec/uv/pipe_spec.rb
CHANGED
@@ -20,7 +20,11 @@ describe UV::Pipe do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "#bind" do
|
23
|
-
let(:name) {
|
23
|
+
let(:name) {
|
24
|
+
name = "/tmp/filename.ipc"
|
25
|
+
name = subject.send :windows_path, name if FFI::Platform.windows?
|
26
|
+
name
|
27
|
+
}
|
24
28
|
|
25
29
|
it "calls UV.pipe_bind" do
|
26
30
|
UV.should_receive(:pipe_bind).with(pointer, name)
|
@@ -30,7 +34,11 @@ describe UV::Pipe do
|
|
30
34
|
end
|
31
35
|
|
32
36
|
describe "#connect" do
|
33
|
-
let(:name) {
|
37
|
+
let(:name) {
|
38
|
+
name = "/tmp/filename.ipc"
|
39
|
+
name = subject.send :windows_path, name if FFI::Platform.windows?
|
40
|
+
name
|
41
|
+
}
|
34
42
|
let(:connect_request) { double() }
|
35
43
|
|
36
44
|
it "requires a block" do
|
data/uvrb.gemspec
CHANGED
@@ -11,18 +11,45 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.description = "UV is Ruby OOP bindings for libuv"
|
12
12
|
|
13
13
|
gem.requirements << 'libuv'
|
14
|
+
gem.extensions << "ext/Rakefile"
|
14
15
|
|
15
16
|
gem.required_ruby_version = '>= 1.9.2'
|
17
|
+
gem.require_paths = ["lib"]
|
18
|
+
|
19
|
+
gem.add_runtime_dependency 'ffi', '~> 1.9'
|
20
|
+
gem.add_development_dependency 'rspec', '~> 2.14'
|
21
|
+
gem.add_development_dependency 'cucumber', '~> 1.3'
|
22
|
+
gem.add_development_dependency 'aruba', '~> 0.5'
|
23
|
+
gem.add_development_dependency 'rake', '~> 10.1'
|
24
|
+
gem.add_development_dependency 'rdoc', '~> 4.0'
|
16
25
|
|
17
26
|
gem.files = `git ls-files`.split("\n")
|
18
27
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
gem.require_paths = ["lib"]
|
21
28
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
relative_path = File.expand_path("../", __FILE__) + '/'
|
30
|
+
`git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
|
31
|
+
|
32
|
+
if (ENV['OS'] == 'Windows_NT') && submodule_path[0] == '/'
|
33
|
+
# Detect if cygwin path is being used by git
|
34
|
+
submodule_path = submodule_path[1..-1]
|
35
|
+
submodule_path.insert(1, ':')
|
36
|
+
end
|
37
|
+
|
38
|
+
# for each submodule, change working directory to that submodule
|
39
|
+
Dir.chdir(submodule_path) do
|
40
|
+
# Make the submodule path relative
|
41
|
+
submodule_path = submodule_path.gsub(/#{relative_path}/i, '')
|
42
|
+
|
43
|
+
# issue git ls-files in submodule's directory
|
44
|
+
submodule_files = `git ls-files`.split($\)
|
45
|
+
|
46
|
+
# prepend the submodule path to create relative file paths
|
47
|
+
submodule_files_paths = submodule_files.map do |filename|
|
48
|
+
File.join(submodule_path, filename)
|
49
|
+
end
|
50
|
+
|
51
|
+
# add relative paths to gem.files
|
52
|
+
gem.files += submodule_files_paths
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uvrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
21
|
+
version: '1.9'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
29
|
+
version: '1.9'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '2.
|
37
|
+
version: '2.14'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '2.
|
45
|
+
version: '2.14'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: cucumber
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '1.
|
53
|
+
version: '1.3'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
61
|
+
version: '1.3'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: aruba
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '0.
|
69
|
+
version: '0.5'
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,7 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0.
|
77
|
+
version: '0.5'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: rake
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +82,7 @@ dependencies:
|
|
82
82
|
requirements:
|
83
83
|
- - ~>
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
85
|
+
version: '10.1'
|
86
86
|
type: :development
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,7 +90,7 @@ dependencies:
|
|
90
90
|
requirements:
|
91
91
|
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
93
|
+
version: '10.1'
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: rdoc
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
requirements:
|
99
99
|
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '4.0'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -106,12 +106,13 @@ dependencies:
|
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
109
|
+
version: '4.0'
|
110
110
|
description: UV is Ruby OOP bindings for libuv
|
111
111
|
email:
|
112
112
|
- mallluhuct@gmail.com
|
113
113
|
executables: []
|
114
|
-
extensions:
|
114
|
+
extensions:
|
115
|
+
- ext/Rakefile
|
115
116
|
extra_rdoc_files: []
|
116
117
|
files:
|
117
118
|
- .gitignore
|
@@ -137,6 +138,7 @@ files:
|
|
137
138
|
- examples/tcp_example_plain.rb
|
138
139
|
- examples/tty_example.rb
|
139
140
|
- ext/README.md
|
141
|
+
- ext/Rakefile
|
140
142
|
- features/async.feature
|
141
143
|
- features/idle.feature
|
142
144
|
- features/pipe.feature
|
@@ -175,6 +177,7 @@ files:
|
|
175
177
|
- lib/uv/types/windows.rb
|
176
178
|
- lib/uv/udp.rb
|
177
179
|
- lib/uv/version.rb
|
180
|
+
- lib/uv/work.rb
|
178
181
|
- lib/uvrb.rb
|
179
182
|
- spec/shared_examples/handle.rb
|
180
183
|
- spec/shared_examples/stream.rb
|
@@ -214,11 +217,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
217
|
version: '0'
|
215
218
|
segments:
|
216
219
|
- 0
|
217
|
-
hash:
|
220
|
+
hash: 1356397277929985480
|
218
221
|
requirements:
|
219
222
|
- libuv
|
220
223
|
rubyforge_project:
|
221
|
-
rubygems_version: 1.8.
|
224
|
+
rubygems_version: 1.8.23
|
222
225
|
signing_key:
|
223
226
|
specification_version: 3
|
224
227
|
summary: libuv bindings for Ruby
|