rb-kqueue 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.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  /pkg
2
2
  /.yardoc
3
3
  /doc
4
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md CHANGED
@@ -4,7 +4,15 @@ This is a simple wrapper over the [kqueue](http://en.wikipedia.org/wiki/Kqueue)
4
4
  BSD event notification interface (supported on FreeBSD, NetBSD, OpenBSD, and Darwin).
5
5
  It uses the [FFI](http://wiki.github.com/ffi/ffi) gem to avoid having to compile a C extension.
6
6
 
7
- [API documentation is available on rdoc.info](http://rdoc.info/projects/nex3/rb-kqueue).
7
+ [API documentation is available on rdoc.info](http://rdoc.info/projects/mat813/rb-kqueue).
8
+
9
+ ## WARNING
10
+
11
+ This code is incomplete, and didn't work last I had a chance to test it.
12
+ I don't have time to continue working on it at the moment,
13
+ so I'm posting it online for posterity and in case anyone wants to take a crack at it.
14
+
15
+ If anyone wants commit rights, just email me at nex342@gmail.com.
8
16
 
9
17
  ## Usage
10
18
 
data/Rakefile CHANGED
@@ -1,45 +1,5 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "rb-kqueue"
8
- gem.summary = "A Ruby wrapper for BSD's kqueue, using FFI"
9
- gem.description = gem.summary
10
- gem.email = "nex342@gmail.com"
11
- gem.homepage = "http://github.com/nex3/rb-kqueue"
12
- gem.authors = ["Nathan Weizenbaum"]
13
- gem.add_dependency "ffi", ">= 0.5.0"
14
- gem.add_development_dependency "yard", ">= 0.4.0"
15
- end
16
- Jeweler::GemcutterTasks.new
17
- rescue LoadError
18
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
19
- end
20
-
21
- module Jeweler::VersionHelper::PlaintextExtension
22
- def write_with_kqueue
23
- write_without_kqueue
24
- filename = File.join(File.dirname(__FILE__), "lib/rb-kqueue.rb")
25
- text = File.read(filename)
26
- File.open(filename, 'w') do |f|
27
- f.write text.gsub(/^( VERSION = ).*/, '\1' + [major, minor, patch].inspect)
28
- end
29
- end
30
- alias_method :write_without_kqueue, :write
31
- alias_method :write, :write_with_kqueue
32
- end
33
-
34
- class Jeweler::Commands::Version::Base
35
- def commit_version_with_kqueue
36
- return unless self.repo
37
- self.repo.add(File.join(File.dirname(__FILE__), "lib/rb-kqueue.rb"))
38
- commit_version_without_kqueue
39
- end
40
- alias_method :commit_version_without_kqueue, :commit_version
41
- alias_method :commit_version, :commit_version_with_kqueue
42
- end
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
43
3
 
44
4
  begin
45
5
  require 'yard'
@@ -13,7 +13,7 @@ require 'rb-kqueue/queue'
13
13
  # * {Watcher} -- A watcher for a single sort of event
14
14
  # * {Event} -- A notification that an event has occurred
15
15
  module KQueue
16
- VERSION = [0, 1, 0]
16
+ VERSION = [0, 2, 0]
17
17
 
18
18
  # Raise an exception for a native kqueue error.
19
19
  #
@@ -67,7 +67,7 @@ module KQueue
67
67
  @filter = KQueue::Native::Flags.from_flag("EVFILT", @native[:filter])
68
68
  @flags = Native::Flags.from_mask("EV", @native[:flags])
69
69
 
70
- KQueue.handle_error @native[:data] if @flags.inclue?(:error)
70
+ KQueue.handle_error @native[:data] if @flags.include?(:error)
71
71
  end
72
72
 
73
73
  # Runs the callback for this event.
@@ -31,6 +31,8 @@ module KQueue
31
31
  :tv_nsec, :long)
32
32
  end
33
33
 
34
+ ffi_lib FFI::Library::LIBC
35
+
34
36
  attach_function :kqueue, [], :int
35
37
  attach_function :kevent, [:int, :pointer, :int, :pointer, :int, :pointer], :int
36
38
 
@@ -82,10 +82,11 @@ module KQueue
82
82
  # @return [Array<Symbol>]
83
83
  def self.from_mask(prefix, mask)
84
84
  re = /^#{Regexp.quote prefix}_/
85
- constants.select do |c|
85
+ constants.select do |sym|
86
+ c = sym.to_s
86
87
  next false unless c =~ re
87
88
  const_get(c) & mask != 0
88
- end.map {|c| c.sub("#{prefix}_", "").downcase.to_sym}
89
+ end.map {|c| c.to_s.sub("#{prefix}_", "").downcase.to_sym}
89
90
  end
90
91
 
91
92
  # Converts a flag to the integer that the C API expects.
@@ -104,9 +105,10 @@ module KQueue
104
105
  # @return [Symbol]
105
106
  def self.from_flag(prefix, flag)
106
107
  re = /^#{Regexp.quote prefix}_/
107
- constants.each do |c|
108
+ constants.each do |sym|
109
+ c = sym.to_s
108
110
  next unless c =~ re
109
- return c.sub("#{prefix}_", "").downcase.to_sym if const_get(c) == flag
111
+ return c.to_s.sub("#{prefix}_", "").downcase.to_sym if const_get(c) == flag
110
112
  end
111
113
  end
112
114
  end
@@ -269,7 +269,7 @@ module KQueue
269
269
  # @return [Watcher] The Watcher for this event.
270
270
  # @raise [SystemCallError] If something goes wrong when registering the Watcher.
271
271
  def watch_process(pid, *flags, &callback)
272
- Watcher::Process.new(self, path, flags, callback)
272
+ Watcher::Process.new(self, pid, flags, callback)
273
273
  end
274
274
 
275
275
  # Watches for signals to this process.
@@ -337,15 +337,26 @@ module KQueue
337
337
  read_events.each {|event| event.callback!}
338
338
  end
339
339
 
340
+ def poll
341
+ read_events(false).each {|event| event.callback!}
342
+ end
343
+
344
+ NULL_TIMEOUT = Native::TimeSpec.new.tap { |ts|
345
+ ts[:tv_sec] = 0
346
+ ts[:tv_nsec] = 0
347
+ }
348
+
340
349
  # Blocks until there are one or more filesystem events
341
350
  # that this notifier has watchers registered for.
342
351
  # Once there are events, returns their {Event} objects.
343
352
  #
344
353
  # @private
345
- def read_events
354
+ def read_events(blocking = true)
346
355
  size = 1024
347
356
  eventlist = FFI::MemoryPointer.new(Native::KEvent, size)
348
- res = Native.kevent(@fd, nil, 0, eventlist, size, nil)
357
+
358
+ timeout = blocking ? nil : NULL_TIMEOUT
359
+ res = Native.kevent(@fd, nil, 0, eventlist, size, timeout)
349
360
 
350
361
  KQueue.handle_error if res < 0
351
362
  (0...res).map {|i| KQueue::Event.new(Native::KEvent.new(eventlist[i]), self)}
@@ -49,7 +49,7 @@ module KQueue
49
49
  end,
50
50
  FFI.errno)
51
51
  end)
52
- super(queue, @file.fileno, :vnode, flags, nil, callback)
52
+ super(queue, @fd, :vnode, flags, nil, callback)
53
53
  end
54
54
  end
55
55
  end
@@ -3,59 +3,27 @@
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{rb-kqueue}
8
- s.version = "0.1.0"
6
+ Gem::Specification.new do |gem|
7
+ gem.name = %q{rb-kqueue}
8
+ gem.version = "0.2.0"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Nathan Weizenbaum"]
12
- s.date = %q{2010-02-08}
13
- s.description = %q{A Ruby wrapper for BSD's kqueue, using FFI}
14
- s.email = %q{nex342@gmail.com}
15
- s.extra_rdoc_files = [
16
- "README.md"
17
- ]
18
- s.files = [
19
- ".gitignore",
20
- ".yardopts",
21
- "MIT-LICENSE",
22
- "README.md",
23
- "Rakefile",
24
- "VERSION",
25
- "lib/rb-kqueue.rb",
26
- "lib/rb-kqueue/event.rb",
27
- "lib/rb-kqueue/native.rb",
28
- "lib/rb-kqueue/native/flags.rb",
29
- "lib/rb-kqueue/queue.rb",
30
- "lib/rb-kqueue/watcher.rb",
31
- "lib/rb-kqueue/watcher/file.rb",
32
- "lib/rb-kqueue/watcher/process.rb",
33
- "lib/rb-kqueue/watcher/read_write.rb",
34
- "lib/rb-kqueue/watcher/signal.rb",
35
- "lib/rb-kqueue/watcher/socket_read_write.rb",
36
- "lib/rb-kqueue/watcher/timer.rb",
37
- "rb-kqueue.gemspec"
38
- ]
39
- s.homepage = %q{http://github.com/nex3/rb-kqueue}
40
- s.rdoc_options = ["--charset=UTF-8"]
41
- s.require_paths = ["lib"]
42
- s.rubygems_version = %q{1.3.5}
43
- s.summary = %q{A Ruby wrapper for BSD's kqueue, using FFI}
10
+ gem.authors = ["Mathieu Arnold", "Nathan Weizenbaum"]
11
+ gem.email = %q{mat@mat.cc nex342@gmail.com}
12
+ gem.date = %q{2012-12-03}
13
+ gem.description = %q{A Ruby wrapper for BSD's kqueue, using FFI}
14
+ gem.extra_rdoc_files = %w(README.md)
44
15
 
45
- if s.respond_to? :specification_version then
46
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
- s.specification_version = 3
16
+ gem.files = `git ls-files`.split(/\n/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
48
19
 
49
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
50
- s.add_runtime_dependency(%q<ffi>, [">= 0.5.0"])
51
- s.add_development_dependency(%q<yard>, [">= 0.4.0"])
52
- else
53
- s.add_dependency(%q<ffi>, [">= 0.5.0"])
54
- s.add_dependency(%q<yard>, [">= 0.4.0"])
55
- end
56
- else
57
- s.add_dependency(%q<ffi>, [">= 0.5.0"])
58
- s.add_dependency(%q<yard>, [">= 0.4.0"])
59
- end
20
+ gem.homepage = %q{http://github.com/mat813/rb-kqueue}
21
+ gem.rdoc_options = ["--charset=UTF-8"]
22
+ gem.require_paths = ["lib"]
23
+ gem.rubygems_version = %q{1.3.5}
24
+ gem.summary = %q{A Ruby wrapper for BSD's kqueue, using FFI}
25
+
26
+ gem.add_runtime_dependency(%q<ffi>, [">= 0.5.0"])
27
+ gem.add_development_dependency(%q<yard>, [">= 0.4.0"])
60
28
  end
61
29
 
metadata CHANGED
@@ -1,39 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rb-kqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
5
11
  platform: ruby
6
12
  authors:
13
+ - Mathieu Arnold
7
14
  - Nathan Weizenbaum
8
15
  autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2010-02-08 00:00:00 -08:00
13
- default_executable:
19
+ date: 2012-12-03 00:00:00 Z
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: ffi
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 11
30
+ segments:
31
+ - 0
32
+ - 5
33
+ - 0
23
34
  version: 0.5.0
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: yard
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 15
46
+ segments:
47
+ - 0
48
+ - 4
49
+ - 0
33
50
  version: 0.4.0
34
- version:
51
+ type: :development
52
+ version_requirements: *id002
35
53
  description: A Ruby wrapper for BSD's kqueue, using FFI
36
- email: nex342@gmail.com
54
+ email: mat@mat.cc nex342@gmail.com
37
55
  executables: []
38
56
 
39
57
  extensions: []
@@ -43,6 +61,7 @@ extra_rdoc_files:
43
61
  files:
44
62
  - .gitignore
45
63
  - .yardopts
64
+ - Gemfile
46
65
  - MIT-LICENSE
47
66
  - README.md
48
67
  - Rakefile
@@ -60,8 +79,7 @@ files:
60
79
  - lib/rb-kqueue/watcher/socket_read_write.rb
61
80
  - lib/rb-kqueue/watcher/timer.rb
62
81
  - rb-kqueue.gemspec
63
- has_rdoc: true
64
- homepage: http://github.com/nex3/rb-kqueue
82
+ homepage: http://github.com/mat813/rb-kqueue
65
83
  licenses: []
66
84
 
67
85
  post_install_message:
@@ -70,23 +88,30 @@ rdoc_options:
70
88
  require_paths:
71
89
  - lib
72
90
  required_ruby_version: !ruby/object:Gem::Requirement
91
+ none: false
73
92
  requirements:
74
93
  - - ">="
75
94
  - !ruby/object:Gem::Version
95
+ hash: 3
96
+ segments:
97
+ - 0
76
98
  version: "0"
77
- version:
78
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
+ none: false
79
101
  requirements:
80
102
  - - ">="
81
103
  - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
82
107
  version: "0"
83
- version:
84
108
  requirements: []
85
109
 
86
110
  rubyforge_project:
87
- rubygems_version: 1.3.5
111
+ rubygems_version: 1.8.24
88
112
  signing_key:
89
113
  specification_version: 3
90
114
  summary: A Ruby wrapper for BSD's kqueue, using FFI
91
115
  test_files: []
92
116
 
117
+ has_rdoc: