libuv 0.11.3 → 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +14 -6
  2. data/.gitignore +17 -17
  3. data/.gitmodules +3 -3
  4. data/.rspec +1 -1
  5. data/.travis.yml +16 -16
  6. data/Gemfile +4 -4
  7. data/LICENSE +23 -23
  8. data/README.md +82 -82
  9. data/Rakefile +31 -31
  10. data/lib/libuv.rb +54 -54
  11. data/lib/libuv/async.rb +47 -47
  12. data/lib/libuv/check.rb +55 -55
  13. data/lib/libuv/dns.rb +85 -85
  14. data/lib/libuv/error.rb +73 -70
  15. data/lib/libuv/ext/ext.rb +258 -258
  16. data/lib/libuv/ext/platform/darwin_x64.rb +23 -23
  17. data/lib/libuv/ext/platform/linux.rb +7 -7
  18. data/lib/libuv/ext/platform/unix.rb +29 -29
  19. data/lib/libuv/ext/platform/windows.rb +40 -40
  20. data/lib/libuv/ext/tasks.rb +29 -29
  21. data/lib/libuv/ext/tasks/mac.rb +23 -23
  22. data/lib/libuv/ext/tasks/unix.rb +23 -23
  23. data/lib/libuv/ext/tasks/win.rb +11 -11
  24. data/lib/libuv/ext/types.rb +238 -238
  25. data/lib/libuv/file.rb +191 -191
  26. data/lib/libuv/filesystem.rb +232 -232
  27. data/lib/libuv/fs_event.rb +31 -31
  28. data/lib/libuv/handle.rb +85 -85
  29. data/lib/libuv/idle.rb +56 -56
  30. data/lib/libuv/loop.rb +387 -385
  31. data/lib/libuv/mixins/assertions.rb +23 -23
  32. data/lib/libuv/mixins/fs_checks.rb +55 -55
  33. data/lib/libuv/mixins/listener.rb +34 -34
  34. data/lib/libuv/mixins/net.rb +40 -40
  35. data/lib/libuv/mixins/resource.rb +27 -27
  36. data/lib/libuv/mixins/stream.rb +154 -154
  37. data/lib/libuv/pipe.rb +197 -197
  38. data/lib/libuv/prepare.rb +56 -56
  39. data/lib/libuv/signal.rb +51 -51
  40. data/lib/libuv/tcp.rb +317 -315
  41. data/lib/libuv/timer.rb +91 -91
  42. data/lib/libuv/tty.rb +37 -37
  43. data/lib/libuv/udp.rb +224 -224
  44. data/lib/libuv/version.rb +3 -3
  45. data/lib/libuv/work.rb +75 -75
  46. data/libuv.gemspec +56 -56
  47. data/spec/async_spec.rb +60 -60
  48. data/spec/cpu_spec.rb +10 -10
  49. data/spec/defer_spec.rb +980 -980
  50. data/spec/dns_spec.rb +90 -90
  51. data/spec/filesystem_spec.rb +124 -124
  52. data/spec/idle_spec.rb +56 -56
  53. data/spec/pipe_spec.rb +160 -160
  54. data/spec/tcp_spec.rb +267 -267
  55. metadata +24 -30
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1fe9ee08be8c2527dd4810ff7683f399b646c0eb
4
- data.tar.gz: 92d29fcd1707362680066afb0f21b45a2a1e7b84
5
- SHA512:
6
- metadata.gz: 6e5865042d0c622d070b3c4d81a30b19f4c219e945ac3529df684d2b1d2066df7f94d2660b79ac6d36f679817f1a096474381c567f3543ba123d7c07b5617746
7
- data.tar.gz: 9bb4ac8f38daba15b1a442abc4be838cec7d6f30e7959ec38318e8c9b99a8e3a9accde93aeb39ad5f877d18531e87be9110d9c21fc37f570f245e74d8375afbc
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzZkMjI0Mjc4OGZiNDYzYzk2NTk0OWFlNWQ4YjE1ODI2NjY2MDJiMA==
5
+ data.tar.gz: !binary |-
6
+ Zjk3OGQ3NWVjYTM4NDU1ZmNhYjAyMzViYTE3NDI5NzY1NDIwODdhNQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NmM3NTBhYzQwNTMwZGY1YjFhY2UzMzUxZmE0ZDUwZmMwMGRmZDRiYmFiYjlk
10
+ NjQ3OGFjZjdhMDlhYzg2MGFmZjgyYzdmOWM3Nzc2ZjE1OTk5NDM3Mzc5NGY2
11
+ ZDQxNDJmM2I0Y2ZlZTdiZjMxNjAwZDA4OGIxN2FmMmYzMzk3NTE=
12
+ data.tar.gz: !binary |-
13
+ OTVhYWVjY2IwOTkyNzIyMGNiODQ2MWMyM2JjNTY5ZmFmODJjYmRjZjE1OTBk
14
+ YjJiOGVlNGI5ZjVkYjY0MTNhYWRmNjgyN2ZjN2FjN2JhZGMzN2E4ZWNhYzk3
15
+ OTQyOGE2NmVjMTM4YjU1NzdiOGEyZWViNWI4MTA1YjZjMTkxZjQ=
data/.gitignore CHANGED
@@ -1,17 +1,17 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- html
6
- pkg
7
- doc
8
- tmp
9
- rerun.txt
10
- Gemfile.lock
11
- .bundle
12
- .idea
13
- *.rbc
14
- .yardoc
15
- bin
16
- Gemfile-custom
17
- ext/*
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ html
6
+ pkg
7
+ doc
8
+ tmp
9
+ rerun.txt
10
+ Gemfile.lock
11
+ .bundle
12
+ .idea
13
+ *.rbc
14
+ .yardoc
15
+ bin
16
+ Gemfile-custom
17
+ ext/*
@@ -1,3 +1,3 @@
1
- [submodule "ext/libuv"]
2
- path = ext/libuv
3
- url = https://github.com/joyent/libuv.git
1
+ [submodule "ext/libuv"]
2
+ path = ext/libuv
3
+ url = https://github.com/joyent/libuv.git
data/.rspec CHANGED
@@ -1 +1 @@
1
- --format progress
1
+ --format progress
@@ -1,16 +1,16 @@
1
- language: ruby
2
- rvm:
3
- - "1.9.3"
4
- - "2.0.0"
5
- - ruby-head
6
- - rbx-2.2.1
7
- - jruby-head
8
- branches:
9
- only:
10
- - master
11
- before_install:
12
- - sudo apt-get install subversion
13
- - git submodule update --init --recursive
14
- - echo "yes" | gem uninstall ffi -a
15
- before_script:
16
- - rake compile
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ - ruby-head
6
+ - rbx-2.2.1
7
+ - jruby-head
8
+ branches:
9
+ only:
10
+ - master
11
+ before_install:
12
+ - sudo apt-get install subversion
13
+ - git submodule update --init --recursive
14
+ - echo "yes" | gem uninstall ffi -a
15
+ before_script:
16
+ - rake compile
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "https://rubygems.org"
2
- gemspec
3
-
4
- gem "rubysl", :platform => :rbx
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ gem "rubysl", :platform => :rbx
data/LICENSE CHANGED
@@ -1,24 +1,24 @@
1
- Copyright (c) 2004-2013 Cotag Media
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to deal
5
- in the Software without restriction, including without limitation the rights
6
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- copies of the Software, and to permit persons to whom the Software is furnished
8
- to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.
20
-
21
- ===
22
-
23
- This license applies to all parts of uvrb (Ruby FFI bindings for libuv only)
1
+ Copyright (c) 2004-2013 Cotag Media
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is furnished
8
+ to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
21
+ ===
22
+
23
+ This license applies to all parts of uvrb (Ruby FFI bindings for libuv only)
24
24
  Libuv itself [is using Node license](https://github.com/joyent/libuv/blob/master/LICENSE)
data/README.md CHANGED
@@ -1,82 +1,82 @@
1
- # Libuv FFI bindings for Ruby
2
-
3
- [![Build Status](https://travis-ci.org/cotag/libuv.png?branch=master)](https://travis-ci.org/cotag/libuv)
4
-
5
- [Libuv](https://github.com/joyent/libuv) is a cross platform asynchronous IO implementation that powers NodeJS. It supports sockets, both UDP and TCP, filesystem watch, TTY, Pipes and other asynchronous primitives like timer, check, prepare and idle.
6
-
7
- The Libuv gem contains Libuv and a Ruby wrapper that implements [pipelined promises](http://en.wikipedia.org/wiki/Futures_and_promises#Promise_pipelining) for asynchronous flow control
8
-
9
- ## Usage
10
-
11
- Create a new libuv loop or use a default one
12
-
13
- ```ruby
14
- require 'libuv'
15
-
16
- loop = Libuv::Loop.default
17
- # or
18
- # loop = Libuv::Loop.new
19
-
20
- loop.run do
21
- timer = loop.timer do
22
- puts "5 seconds passed"
23
- timer.close
24
- loop.stop
25
- end
26
- timer.catch do |error|
27
- puts "error with timer: #{error}"
28
- end
29
- timer.finally do
30
- puts "timer handle was closed"
31
- end
32
- timer.start(5000)
33
- end
34
- ```
35
-
36
- Check out the [yard documentation](http://rubydoc.info/gems/libuv/Libuv/Loop)
37
-
38
-
39
- ## Installation
40
-
41
- ```shell
42
- gem install libuv
43
- ```
44
-
45
- or
46
-
47
- ```shell
48
- git clone https://github.com/cotag/libuv.git
49
- cd libuv
50
- bundle install
51
- rake compile
52
- ```
53
-
54
- ### Prerequisites
55
-
56
- * The installation requires __subversion__ to be installed on your system and available on the PATH
57
- * Windows users will require a copy of Visual Studio 2010 or later. [Visual Studio Express](http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products) works fine.
58
-
59
- or
60
-
61
- * setting the environmental variable `USE_GLOBAL_LIBUV` will prevent compiling the packaged version.
62
- * if you have a compatible `libuv.(so | dylib | dll)` on the PATH already
63
-
64
-
65
- ## Libuv features supported
66
-
67
- * TCP (with TLS support)
68
- * UDP
69
- * TTY
70
- * Pipe
71
- * Timer
72
- * Prepare
73
- * Check
74
- * Idle
75
- * Signals
76
- * Async callbacks
77
- * Async DNS Resolution
78
- * Filesystem Events
79
- * Filesystem manipulation
80
- * File manipulation
81
- * Errors
82
- * Work queue (thread pool)
1
+ # Libuv FFI bindings for Ruby
2
+
3
+ [![Build Status](https://travis-ci.org/cotag/libuv.png?branch=master)](https://travis-ci.org/cotag/libuv)
4
+
5
+ [Libuv](https://github.com/joyent/libuv) is a cross platform asynchronous IO implementation that powers NodeJS. It supports sockets, both UDP and TCP, filesystem watch, TTY, Pipes and other asynchronous primitives like timer, check, prepare and idle.
6
+
7
+ The Libuv gem contains Libuv and a Ruby wrapper that implements [pipelined promises](http://en.wikipedia.org/wiki/Futures_and_promises#Promise_pipelining) for asynchronous flow control
8
+
9
+ ## Usage
10
+
11
+ Create a new libuv loop or use a default one
12
+
13
+ ```ruby
14
+ require 'libuv'
15
+
16
+ loop = Libuv::Loop.default
17
+ # or
18
+ # loop = Libuv::Loop.new
19
+
20
+ loop.run do
21
+ timer = loop.timer do
22
+ puts "5 seconds passed"
23
+ timer.close
24
+ loop.stop
25
+ end
26
+ timer.catch do |error|
27
+ puts "error with timer: #{error}"
28
+ end
29
+ timer.finally do
30
+ puts "timer handle was closed"
31
+ end
32
+ timer.start(5000)
33
+ end
34
+ ```
35
+
36
+ Check out the [yard documentation](http://rubydoc.info/gems/libuv/Libuv/Loop)
37
+
38
+
39
+ ## Installation
40
+
41
+ ```shell
42
+ gem install libuv
43
+ ```
44
+
45
+ or
46
+
47
+ ```shell
48
+ git clone https://github.com/cotag/libuv.git
49
+ cd libuv
50
+ bundle install
51
+ rake compile
52
+ ```
53
+
54
+ ### Prerequisites
55
+
56
+ * The installation requires __subversion__ to be installed on your system and available on the PATH
57
+ * Windows users will require a copy of Visual Studio 2010 or later. [Visual Studio Express](http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products) works fine.
58
+
59
+ or
60
+
61
+ * setting the environmental variable `USE_GLOBAL_LIBUV` will prevent compiling the packaged version.
62
+ * if you have a compatible `libuv.(so | dylib | dll)` on the PATH already
63
+
64
+
65
+ ## Libuv features supported
66
+
67
+ * TCP (with TLS support)
68
+ * UDP
69
+ * TTY
70
+ * Pipe
71
+ * Timer
72
+ * Prepare
73
+ * Check
74
+ * Idle
75
+ * Signals
76
+ * Async callbacks
77
+ * Async DNS Resolution
78
+ * Filesystem Events
79
+ * Filesystem manipulation
80
+ * File manipulation
81
+ * Errors
82
+ * Work queue (thread pool)
data/Rakefile CHANGED
@@ -1,31 +1,31 @@
1
- require 'rubygems'
2
- require 'rspec/core/rake_task' # testing framework
3
- require 'yard' # yard documentation
4
- require 'ffi' # loads the extension
5
- require 'rake/clean' # for the :clobber rake task
6
- require File.expand_path('../lib/libuv/ext/tasks', __FILE__) # platform specific rake tasks used by compile
7
-
8
-
9
-
10
- # By default we don't run network tests
11
- task :default => :limited_spec
12
- RSpec::Core::RakeTask.new(:limited_spec) do |t|
13
- # Exclude network tests
14
- t.rspec_opts = "--tag ~network"
15
- end
16
- RSpec::Core::RakeTask.new(:spec)
17
-
18
-
19
- desc "Run all tests"
20
- task :test => [:spec]
21
-
22
-
23
- YARD::Rake::YardocTask.new do |t|
24
- t.files = ['lib/**/*.rb', '-', 'ext/README.md', 'README.md']
25
- end
26
-
27
-
28
- desc "Compile libuv from submodule"
29
- task :compile => ["ext/libuv.#{FFI::Platform::LIBSUFFIX}"]
30
-
31
- CLOBBER.include("ext/libuv.#{FFI::Platform::LIBSUFFIX}")
1
+ require 'rubygems'
2
+ require 'rspec/core/rake_task' # testing framework
3
+ require 'yard' # yard documentation
4
+ require 'ffi' # loads the extension
5
+ require 'rake/clean' # for the :clobber rake task
6
+ require File.expand_path('../lib/libuv/ext/tasks', __FILE__) # platform specific rake tasks used by compile
7
+
8
+
9
+
10
+ # By default we don't run network tests
11
+ task :default => :limited_spec
12
+ RSpec::Core::RakeTask.new(:limited_spec) do |t|
13
+ # Exclude network tests
14
+ t.rspec_opts = "--tag ~network"
15
+ end
16
+ RSpec::Core::RakeTask.new(:spec)
17
+
18
+
19
+ desc "Run all tests"
20
+ task :test => [:spec]
21
+
22
+
23
+ YARD::Rake::YardocTask.new do |t|
24
+ t.files = ['lib/**/*.rb', '-', 'ext/README.md', 'README.md']
25
+ end
26
+
27
+
28
+ desc "Compile libuv from submodule"
29
+ task :compile => ["ext/libuv.#{FFI::Platform::LIBSUFFIX}"]
30
+
31
+ CLOBBER.include("ext/libuv.#{FFI::Platform::LIBSUFFIX}")
@@ -1,54 +1,54 @@
1
- require 'forwardable'
2
- require 'ffi'
3
-
4
- module Libuv
5
- require 'libuv/ext/ext' # The libuv ffi ext
6
- require 'libuv/error' # List of errors (matching those in uv.h)
7
- require 'libuv/q' # The promise library
8
-
9
- require 'libuv/mixins/assertions' # Common code to check arguments
10
- require 'libuv/mixins/fs_checks' # Common code to check file system results
11
- require 'libuv/mixins/resource' # Common code to check for errors
12
- require 'libuv/mixins/listener' # Common callback code
13
- require 'libuv/mixins/stream' # For all libuv streams (tcp, pipes, tty)
14
- require 'libuv/mixins/net' # Common functions for tcp and udp
15
-
16
- # -- The classes required for a loop instance --
17
- require 'libuv/handle' # Base class for most libuv functionality
18
- require 'libuv/async' # Provide a threadsafe way to signal the event loop
19
- require 'libuv/timer' # High resolution timer
20
- require 'libuv/loop' # The libuv reactor or event loop
21
- # --
22
-
23
- require 'libuv/filesystem' # Async directory manipulation
24
- require 'libuv/fs_event' # Notifies of changes to files and folders as they occur
25
- require 'libuv/prepare' # Called at the end of a loop cycle
26
- require 'libuv/signal' # Used to handle OS signals
27
- require 'libuv/check' # Called before processing events on the loop
28
- require 'libuv/file' # Async file reading and writing
29
- require 'libuv/idle' # Called when there are no events to process
30
- require 'libuv/work' # Provide work to be completed on another thread (thread pool)
31
- require 'libuv/udp' # Communicate over UDP
32
- require 'libuv/dns' # Async DNS lookup
33
-
34
- # Streams
35
- require 'libuv/pipe' # Communicate over Pipes
36
- require 'libuv/tcp' # Communicate over TCP
37
- require 'libuv/tty' # Terminal output
38
-
39
-
40
- # Returns the number of CPU cores on the host platform
41
- #
42
- # @return [Fixnum, nil] representing the number of CPU cores or nil if failed
43
- def self.cpu_count
44
- cpu_info = FFI::MemoryPointer.new(:pointer)
45
- cpu_count = FFI::MemoryPointer.new(:int)
46
- if ::Libuv::Ext.cpu_info(cpu_info, cpu_count) >= 0
47
- count = cpu_count.read_int
48
- ::Libuv::Ext.free_cpu_info(cpu_info.read_pointer, count)
49
- return count
50
- else
51
- return nil
52
- end
53
- end
54
- end
1
+ require 'forwardable'
2
+ require 'ffi'
3
+
4
+ module Libuv
5
+ require 'libuv/ext/ext' # The libuv ffi ext
6
+ require 'libuv/error' # List of errors (matching those in uv.h)
7
+ require 'libuv/q' # The promise library
8
+
9
+ require 'libuv/mixins/assertions' # Common code to check arguments
10
+ require 'libuv/mixins/fs_checks' # Common code to check file system results
11
+ require 'libuv/mixins/resource' # Common code to check for errors
12
+ require 'libuv/mixins/listener' # Common callback code
13
+ require 'libuv/mixins/stream' # For all libuv streams (tcp, pipes, tty)
14
+ require 'libuv/mixins/net' # Common functions for tcp and udp
15
+
16
+ # -- The classes required for a loop instance --
17
+ require 'libuv/handle' # Base class for most libuv functionality
18
+ require 'libuv/async' # Provide a threadsafe way to signal the event loop
19
+ require 'libuv/timer' # High resolution timer
20
+ require 'libuv/loop' # The libuv reactor or event loop
21
+ # --
22
+
23
+ require 'libuv/filesystem' # Async directory manipulation
24
+ require 'libuv/fs_event' # Notifies of changes to files and folders as they occur
25
+ require 'libuv/prepare' # Called at the end of a loop cycle
26
+ require 'libuv/signal' # Used to handle OS signals
27
+ require 'libuv/check' # Called before processing events on the loop
28
+ require 'libuv/file' # Async file reading and writing
29
+ require 'libuv/idle' # Called when there are no events to process
30
+ require 'libuv/work' # Provide work to be completed on another thread (thread pool)
31
+ require 'libuv/udp' # Communicate over UDP
32
+ require 'libuv/dns' # Async DNS lookup
33
+
34
+ # Streams
35
+ require 'libuv/pipe' # Communicate over Pipes
36
+ require 'libuv/tcp' # Communicate over TCP
37
+ require 'libuv/tty' # Terminal output
38
+
39
+
40
+ # Returns the number of CPU cores on the host platform
41
+ #
42
+ # @return [Fixnum, nil] representing the number of CPU cores or nil if failed
43
+ def self.cpu_count
44
+ cpu_info = FFI::MemoryPointer.new(:pointer)
45
+ cpu_count = FFI::MemoryPointer.new(:int)
46
+ if ::Libuv::Ext.cpu_info(cpu_info, cpu_count) >= 0
47
+ count = cpu_count.read_int
48
+ ::Libuv::Ext.free_cpu_info(cpu_info.read_pointer, count)
49
+ return count
50
+ else
51
+ return nil
52
+ end
53
+ end
54
+ end