uvrb 0.1.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.
Files changed (79) hide show
  1. data/.gitignore +17 -0
  2. data/.gitmodules +3 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +13 -0
  5. data/Formula/libuv.rb +20 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +24 -0
  8. data/README.rdoc +70 -0
  9. data/Rakefile +29 -0
  10. data/examples/example +0 -0
  11. data/examples/example.c +37 -0
  12. data/examples/example.rb +29 -0
  13. data/examples/example_oop.rb +26 -0
  14. data/examples/python.py +1 -0
  15. data/examples/ruby.rb +1 -0
  16. data/examples/tcp_client_oop.rb +31 -0
  17. data/examples/tcp_example +0 -0
  18. data/examples/tcp_example.c +68 -0
  19. data/examples/tcp_example.rb +41 -0
  20. data/examples/tcp_example_oop.rb +43 -0
  21. data/examples/tcp_example_plain.rb +19 -0
  22. data/examples/tty_example.rb +20 -0
  23. data/features/async.feature +38 -0
  24. data/features/idle.feature +44 -0
  25. data/features/pipe.feature +150 -0
  26. data/features/prepare_and_check.feature +49 -0
  27. data/features/step_definitions/additional_cli_steps.rb +20 -0
  28. data/features/support/env.rb +6 -0
  29. data/lib/uv.rb +248 -0
  30. data/lib/uv/assertions.rb +24 -0
  31. data/lib/uv/async.rb +24 -0
  32. data/lib/uv/check.rb +27 -0
  33. data/lib/uv/error.rb +58 -0
  34. data/lib/uv/file.rb +221 -0
  35. data/lib/uv/file/stat.rb +35 -0
  36. data/lib/uv/filesystem.rb +335 -0
  37. data/lib/uv/fs_event.rb +21 -0
  38. data/lib/uv/handle.rb +65 -0
  39. data/lib/uv/idle.rb +27 -0
  40. data/lib/uv/listener.rb +26 -0
  41. data/lib/uv/loop.rb +326 -0
  42. data/lib/uv/net.rb +31 -0
  43. data/lib/uv/pipe.rb +47 -0
  44. data/lib/uv/prepare.rb +27 -0
  45. data/lib/uv/resource.rb +20 -0
  46. data/lib/uv/stream.rb +105 -0
  47. data/lib/uv/tasks.rb +27 -0
  48. data/lib/uv/tasks/mac.rb +23 -0
  49. data/lib/uv/tasks/unix.rb +23 -0
  50. data/lib/uv/tasks/win.rb +2 -0
  51. data/lib/uv/tcp.rb +162 -0
  52. data/lib/uv/timer.rb +48 -0
  53. data/lib/uv/tty.rb +30 -0
  54. data/lib/uv/types.rb +249 -0
  55. data/lib/uv/types/darwin_x64.rb +10 -0
  56. data/lib/uv/types/linux.rb +6 -0
  57. data/lib/uv/types/unix.rb +12 -0
  58. data/lib/uv/types/windows.rb +13 -0
  59. data/lib/uv/udp.rb +215 -0
  60. data/lib/uv/version.rb +3 -0
  61. data/lib/uvrb.rb +1 -0
  62. data/spec/shared_examples/handle.rb +54 -0
  63. data/spec/shared_examples/stream.rb +109 -0
  64. data/spec/spec_helper.rb +26 -0
  65. data/spec/uv/async_spec.rb +18 -0
  66. data/spec/uv/check_spec.rb +30 -0
  67. data/spec/uv/file_spec.rb +177 -0
  68. data/spec/uv/filesystem_spec.rb +246 -0
  69. data/spec/uv/fs_event_spec.rb +10 -0
  70. data/spec/uv/idle_spec.rb +30 -0
  71. data/spec/uv/loop_spec.rb +241 -0
  72. data/spec/uv/pipe_spec.rb +54 -0
  73. data/spec/uv/prepare_spec.rb +30 -0
  74. data/spec/uv/tcp_spec.rb +134 -0
  75. data/spec/uv/timer_spec.rb +61 -0
  76. data/spec/uv/tty_spec.rb +53 -0
  77. data/spec/uv/udp_spec.rb +190 -0
  78. data/uvrb.gemspec +28 -0
  79. metadata +247 -0
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe UV::Timer do
4
+ let(:handle_name) { :timer }
5
+ let(:loop) { double() }
6
+ let(:pointer) { double() }
7
+ subject { UV::Timer.new(loop, pointer) }
8
+
9
+ it_behaves_like 'a handle'
10
+
11
+ describe "#start" do
12
+ let(:timeout) { 50000 }
13
+ let(:repeat) { 50000 }
14
+
15
+ it "requires a block" do
16
+ expect { subject.start(timeout, repeat) }.to raise_error(ArgumentError)
17
+ end
18
+
19
+ it "calls UV.timer_start" do
20
+ UV.should_receive(:timer_start).with(pointer, subject.method(:on_timer), timeout, repeat)
21
+
22
+ subject.start(timeout, repeat) { |e| }
23
+ end
24
+ end
25
+
26
+ describe "#stop" do
27
+ it "calls UV.timer_stop" do
28
+ UV.should_receive(:timer_stop).with(pointer)
29
+
30
+ subject.stop
31
+ end
32
+ end
33
+
34
+ describe "#again" do
35
+ it "calls UV.timer_again" do
36
+ UV.should_receive(:timer_again).with(pointer)
37
+
38
+ subject.again
39
+ end
40
+ end
41
+
42
+ describe "#repeat=" do
43
+ let(:repeat) { 50000 }
44
+
45
+ it "calls UV.timer_set_repeat" do
46
+ UV.should_receive(:timer_set_repeat).with(pointer, repeat)
47
+
48
+ subject.repeat = repeat
49
+ end
50
+ end
51
+
52
+ describe "#repeat" do
53
+ let(:repeat) { 50000 }
54
+
55
+ it "calls UV.timer_get_repeat" do
56
+ UV.should_receive(:timer_get_repeat).with(pointer).and_return(repeat)
57
+
58
+ subject.repeat.should == repeat
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe UV::TTY do
4
+ let(:handle_name) { :tty }
5
+ let(:loop) { double() }
6
+ let(:pointer) { double() }
7
+ subject { UV::TTY.new(loop, pointer) }
8
+
9
+ it_behaves_like 'a handle'
10
+ it_behaves_like 'a stream'
11
+
12
+ describe "#enable_raw_mode" do
13
+ it "calls UV.tty_set_mode" do
14
+ UV.should_receive(:tty_set_mode).with(pointer, 1)
15
+
16
+ subject.enable_raw_mode
17
+ end
18
+ end
19
+
20
+ describe "#disable_raw_mode" do
21
+ it "calls UV.tty_set_mode" do
22
+ UV.should_receive(:tty_set_mode).with(pointer, 0)
23
+
24
+ subject.disable_raw_mode
25
+ end
26
+ end
27
+
28
+ describe "#reset_mode" do
29
+ it "calls UV.tty_reset_mode" do
30
+ UV.should_receive(:tty_reset_mode)
31
+
32
+ subject.reset_mode
33
+ end
34
+ end
35
+
36
+ describe "#winsize" do
37
+ let(:width) { 100 }
38
+ let(:height) { 100 }
39
+ let(:width_pointer) { double() }
40
+ let(:height_pointer) { double() }
41
+
42
+ it "calls UV.tty_get_winsize" do
43
+ FFI::MemoryPointer.should_receive(:new).once.with(:int).and_return(width_pointer)
44
+ FFI::MemoryPointer.should_receive(:new).once.with(:int).and_return(height_pointer)
45
+ width_pointer.should_receive(:get_int).with(0).and_return(width)
46
+ height_pointer.should_receive(:get_int).with(0).and_return(height)
47
+
48
+ UV.should_receive(:tty_get_winsize).with(pointer, width_pointer, height_pointer)
49
+
50
+ subject.winsize.should == [width, height]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,190 @@
1
+ require 'spec_helper'
2
+
3
+ describe UV::UDP do
4
+ let(:handle_name) { :udp }
5
+ let(:loop) { double() }
6
+ let(:pointer) { double() }
7
+ subject { UV::UDP.new(loop, pointer) }
8
+
9
+ it_behaves_like 'a handle'
10
+
11
+ describe "#bind" do
12
+ let(:ip_addr) { double() }
13
+ let(:port) { 0 }
14
+
15
+ context "ipv4" do
16
+ let(:ip) { "0.0.0.0" }
17
+
18
+ it "calls UV.udp_bind" do
19
+ UV.should_receive(:ip4_addr).with(ip, port).and_return(ip_addr)
20
+ UV.should_receive(:udp_bind).with(pointer, ip_addr, 0)
21
+
22
+ subject.bind(ip, port)
23
+ end
24
+ end
25
+
26
+ context "ipv6" do
27
+ let(:ip) { "::" }
28
+
29
+ it "calls UV.udp_bind6" do
30
+ UV.should_receive(:ip6_addr).with(ip, port).and_return(ip_addr)
31
+ UV.should_receive(:udp_bind6).with(pointer, ip_addr, 0)
32
+
33
+ subject.bind(ip, port)
34
+ end
35
+
36
+
37
+ it "calls UV.udp_bind6 with ipv6_only" do
38
+ UV.should_receive(:ip6_addr).with(ip, port).and_return(ip_addr)
39
+ UV.should_receive(:udp_bind6).with(pointer, ip_addr, 1)
40
+
41
+ subject.bind(ip, port, true)
42
+ end
43
+ end
44
+ end
45
+
46
+ # describe "#sockname" do
47
+ # end
48
+
49
+ describe "#join" do
50
+ let(:multicast_address) { "239.255.0.1" }
51
+ let(:interface_address) { "" }
52
+
53
+ it "calls UV.udp_set_membership" do
54
+ UV.should_receive(:udp_set_membership).with(pointer, multicast_address, interface_address, :uv_join_group)
55
+
56
+ subject.join(multicast_address, interface_address)
57
+ end
58
+ end
59
+
60
+ describe "#leave" do
61
+ let(:multicast_address) { "239.255.0.1" }
62
+ let(:interface_address) { "" }
63
+
64
+ it "calls UV.udp_set_membership" do
65
+ UV.should_receive(:udp_set_membership).with(pointer, multicast_address, interface_address, :uv_leave_group)
66
+
67
+ subject.leave(multicast_address, interface_address)
68
+ end
69
+ end
70
+
71
+ describe "#start_recv" do
72
+ it "requires a block" do
73
+ expect{ subject.start_recv }.to raise_error(ArgumentError)
74
+ end
75
+
76
+ it "calls UV.udp_recv_start" do
77
+ UV.should_receive(:udp_recv_start).with(pointer, subject.method(:on_allocate), subject.method(:on_recv))
78
+
79
+ subject.start_recv { |e, data, ip, port| }
80
+ end
81
+ end
82
+
83
+ describe "#stop_recv" do
84
+ it "calls UV.udp_recv_stop" do
85
+ UV.should_receive(:udp_recv_stop).with(pointer)
86
+
87
+ subject.stop_recv
88
+ end
89
+ end
90
+
91
+ describe "#send" do
92
+ let(:uv_udp_send_request) { double() }
93
+ let(:buffer) { double() }
94
+ let(:buffer_pointer) { double() }
95
+ let(:ip_addr) { double() }
96
+ let(:port) { 0 }
97
+ let(:data) { "some data to send over UDP" }
98
+ let(:size) { data.size }
99
+
100
+ it "requires a block" do
101
+ expect { subject.send(data) }.to raise_error(ArgumentError)
102
+ end
103
+
104
+ context "ipv4" do
105
+ let(:ip) { "0.0.0.0" }
106
+
107
+ before(:each) do
108
+ UV.should_receive(:ip4_addr).with(ip, port).and_return(ip_addr)
109
+ end
110
+
111
+ it "calls UV.udp_send" do
112
+ FFI::MemoryPointer.should_receive(:from_string).with(data).and_return(buffer_pointer)
113
+ UV.should_receive(:buf_init).with(buffer_pointer, size).and_return(buffer)
114
+ UV.should_receive(:create_request).with(:uv_udp_send).and_return(uv_udp_send_request)
115
+ UV.should_receive(:udp_send).with(uv_udp_send_request, pointer, buffer, 1, ip_addr, subject.method(:on_send))
116
+
117
+ subject.send(ip, port, data) { |e| }
118
+ end
119
+ end
120
+
121
+ context "ipv6" do
122
+ let(:ip) { "::" }
123
+
124
+ before(:each) do
125
+ UV.should_receive(:ip6_addr).with(ip, port).and_return(ip_addr)
126
+ end
127
+
128
+ it "calls UV.udp_send6" do
129
+ FFI::MemoryPointer.should_receive(:from_string).with(data).and_return(buffer_pointer)
130
+ UV.should_receive(:buf_init).with(buffer_pointer, size).and_return(buffer)
131
+ UV.should_receive(:create_request).with(:uv_udp_send).and_return(uv_udp_send_request)
132
+ UV.should_receive(:udp_send6).with(uv_udp_send_request, pointer, buffer, 1, ip_addr, subject.method(:on_send))
133
+
134
+ subject.send(ip, port, data) { |e| }
135
+ end
136
+ end
137
+ end
138
+
139
+ describe "#enable_multicast_loop" do
140
+ it "calls UV.udp_set_multicast_loop" do
141
+ UV.should_receive(:udp_set_multicast_loop).with(pointer, 1)
142
+
143
+ subject.enable_multicast_loop
144
+ end
145
+ end
146
+
147
+ describe "#disable_multicast_loop" do
148
+ it "calls UV.udp_set_multicast_loop" do
149
+ UV.should_receive(:udp_set_multicast_loop).with(pointer, 0)
150
+
151
+ subject.disable_multicast_loop
152
+ end
153
+ end
154
+
155
+ describe "#multicast_ttl=" do
156
+ let(:ttl) { 150 }
157
+
158
+ it "calls UV.udp_set_multicast_ttl" do
159
+ UV.should_receive(:udp_set_multicast_ttl).with(pointer, ttl)
160
+
161
+ subject.multicast_ttl = ttl
162
+ end
163
+ end
164
+
165
+ describe "#enable_broadcast" do
166
+ it "calls UV.udp_set_broadcast" do
167
+ UV.should_receive(:udp_set_broadcast).with(pointer, 1)
168
+
169
+ subject.enable_broadcast
170
+ end
171
+ end
172
+
173
+ describe "#disable_broadcast" do
174
+ it "calls UV.udp_set_broadcast" do
175
+ UV.should_receive(:udp_set_broadcast).with(pointer, 0)
176
+
177
+ subject.disable_broadcast
178
+ end
179
+ end
180
+
181
+ describe "#ttl=" do
182
+ let(:ttl) { 220 }
183
+
184
+ it "calls UV.udp_set_ttl" do
185
+ UV.should_receive(:udp_set_ttl).with(pointer, ttl)
186
+
187
+ subject.ttl = ttl
188
+ end
189
+ end
190
+ end
data/uvrb.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ require File.expand_path("../lib/uv/version", __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = "uvrb"
5
+ gem.version = UV::VERSION
6
+ gem.license = 'MIT'
7
+ gem.authors = ["Bulat Shakirzyanov"]
8
+ gem.email = ["mallluhuct@gmail.com"]
9
+ gem.homepage = "http://avalanche123.github.com/uvrb"
10
+ gem.summary = "libuv bindings for Ruby"
11
+ gem.description = "UV is Ruby OOP bindings for libuv"
12
+
13
+ gem.requirements << 'libuv'
14
+
15
+ gem.required_ruby_version = '>= 1.9.2'
16
+
17
+ gem.files = `git ls-files`.split("\n")
18
+ 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
+
22
+ gem.add_runtime_dependency 'ffi', '~> 1.0'
23
+ gem.add_development_dependency 'rspec', '~> 2.6'
24
+ gem.add_development_dependency 'cucumber', '~> 1.2'
25
+ gem.add_development_dependency 'aruba', '~> 0.4'
26
+ gem.add_development_dependency 'rake', '~> 0.9'
27
+ gem.add_development_dependency 'rdoc', '~> 3.1'
28
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uvrb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bulat Shakirzyanov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.6'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.6'
46
+ - !ruby/object:Gem::Dependency
47
+ name: cucumber
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ - !ruby/object:Gem::Dependency
63
+ name: aruba
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.4'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.4'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '0.9'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '0.9'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rdoc
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '3.1'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '3.1'
110
+ description: UV is Ruby OOP bindings for libuv
111
+ email:
112
+ - mallluhuct@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - .gitmodules
119
+ - .rspec
120
+ - .travis.yml
121
+ - Formula/libuv.rb
122
+ - Gemfile
123
+ - LICENSE
124
+ - README.rdoc
125
+ - Rakefile
126
+ - examples/example
127
+ - examples/example.c
128
+ - examples/example.rb
129
+ - examples/example_oop.rb
130
+ - examples/python.py
131
+ - examples/ruby.rb
132
+ - examples/tcp_client_oop.rb
133
+ - examples/tcp_example
134
+ - examples/tcp_example.c
135
+ - examples/tcp_example.rb
136
+ - examples/tcp_example_oop.rb
137
+ - examples/tcp_example_plain.rb
138
+ - examples/tty_example.rb
139
+ - ext/README.md
140
+ - features/async.feature
141
+ - features/idle.feature
142
+ - features/pipe.feature
143
+ - features/prepare_and_check.feature
144
+ - features/step_definitions/additional_cli_steps.rb
145
+ - features/support/env.rb
146
+ - lib/uv.rb
147
+ - lib/uv/assertions.rb
148
+ - lib/uv/async.rb
149
+ - lib/uv/check.rb
150
+ - lib/uv/error.rb
151
+ - lib/uv/file.rb
152
+ - lib/uv/file/stat.rb
153
+ - lib/uv/filesystem.rb
154
+ - lib/uv/fs_event.rb
155
+ - lib/uv/handle.rb
156
+ - lib/uv/idle.rb
157
+ - lib/uv/listener.rb
158
+ - lib/uv/loop.rb
159
+ - lib/uv/net.rb
160
+ - lib/uv/pipe.rb
161
+ - lib/uv/prepare.rb
162
+ - lib/uv/resource.rb
163
+ - lib/uv/stream.rb
164
+ - lib/uv/tasks.rb
165
+ - lib/uv/tasks/mac.rb
166
+ - lib/uv/tasks/unix.rb
167
+ - lib/uv/tasks/win.rb
168
+ - lib/uv/tcp.rb
169
+ - lib/uv/timer.rb
170
+ - lib/uv/tty.rb
171
+ - lib/uv/types.rb
172
+ - lib/uv/types/darwin_x64.rb
173
+ - lib/uv/types/linux.rb
174
+ - lib/uv/types/unix.rb
175
+ - lib/uv/types/windows.rb
176
+ - lib/uv/udp.rb
177
+ - lib/uv/version.rb
178
+ - lib/uvrb.rb
179
+ - spec/shared_examples/handle.rb
180
+ - spec/shared_examples/stream.rb
181
+ - spec/spec_helper.rb
182
+ - spec/uv/async_spec.rb
183
+ - spec/uv/check_spec.rb
184
+ - spec/uv/file_spec.rb
185
+ - spec/uv/filesystem_spec.rb
186
+ - spec/uv/fs_event_spec.rb
187
+ - spec/uv/idle_spec.rb
188
+ - spec/uv/loop_spec.rb
189
+ - spec/uv/pipe_spec.rb
190
+ - spec/uv/prepare_spec.rb
191
+ - spec/uv/tcp_spec.rb
192
+ - spec/uv/timer_spec.rb
193
+ - spec/uv/tty_spec.rb
194
+ - spec/uv/udp_spec.rb
195
+ - uvrb.gemspec
196
+ homepage: http://avalanche123.github.com/uvrb
197
+ licenses:
198
+ - MIT
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.9.2
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ segments:
216
+ - 0
217
+ hash: 2524694776609682679
218
+ requirements:
219
+ - libuv
220
+ rubyforge_project:
221
+ rubygems_version: 1.8.21
222
+ signing_key:
223
+ specification_version: 3
224
+ summary: libuv bindings for Ruby
225
+ test_files:
226
+ - features/async.feature
227
+ - features/idle.feature
228
+ - features/pipe.feature
229
+ - features/prepare_and_check.feature
230
+ - features/step_definitions/additional_cli_steps.rb
231
+ - features/support/env.rb
232
+ - spec/shared_examples/handle.rb
233
+ - spec/shared_examples/stream.rb
234
+ - spec/spec_helper.rb
235
+ - spec/uv/async_spec.rb
236
+ - spec/uv/check_spec.rb
237
+ - spec/uv/file_spec.rb
238
+ - spec/uv/filesystem_spec.rb
239
+ - spec/uv/fs_event_spec.rb
240
+ - spec/uv/idle_spec.rb
241
+ - spec/uv/loop_spec.rb
242
+ - spec/uv/pipe_spec.rb
243
+ - spec/uv/prepare_spec.rb
244
+ - spec/uv/tcp_spec.rb
245
+ - spec/uv/timer_spec.rb
246
+ - spec/uv/tty_spec.rb
247
+ - spec/uv/udp_spec.rb