em-udev 0.0.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.
Files changed (3) hide show
  1. data/lib/em/udev.rb +20 -0
  2. data/lib/eventmachine/udev.rb +61 -0
  3. metadata +90 -0
@@ -0,0 +1,20 @@
1
+ #--
2
+ # Copyleft shura. [ shura1991@gmail.com ]
3
+ #
4
+ # This file is part of em-udev.
5
+ #
6
+ # em-udev is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # em-udev is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with em-udev. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'eventmachine/udev'
@@ -0,0 +1,61 @@
1
+ #--
2
+ # Copyleft shura. [ shura1991@gmail.com ]
3
+ #
4
+ # This file is part of em-udev.
5
+ #
6
+ # em-udev is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # em-udev is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with em-udev. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'eventmachine'
21
+ require 'rubdev'
22
+
23
+ module EM
24
+ class Udev
25
+ def self.new (handler)
26
+ context = RubDev::Context.new
27
+ monitor = RubDev::Monitor.from_netlink(context, 'udev')
28
+
29
+ mod = Module.new {
30
+ include handler if handler
31
+
32
+ define_method(:device_added) {|dev|
33
+ puts "added #{dev.devnode}"
34
+ } unless instance_methods.include?(:device_added)
35
+
36
+ define_method(:device_removed) {|dev|
37
+ puts "removed #{dev.devnode}"
38
+ } unless instance_methods.include?(:device_removed)
39
+
40
+ define_method(:notify_readable) {
41
+ dev = monitor.receive_device
42
+ self.send((dev.action == 'add' ? :device_added : :device_removed), dev)
43
+ } unless instance_methods.include?(:notify_readable)
44
+ }
45
+
46
+ EM.watch(monitor.to_io, mod).tap {|c|
47
+ [[:@context, context], [:@monitor, monitor]].each {|args|
48
+ c.instance_variable_set(*args)
49
+ }
50
+
51
+ c.notify_readable = true
52
+ monitor.enable_receiving
53
+ }
54
+ end
55
+ end
56
+
57
+ def self.udev (handler)
58
+ return unless handler.is_a?(Module)
59
+ Udev.new(handler)
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: em-udev
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - shura
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-07-29 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rubdev
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: eventmachine
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
46
+ description: libudev for eventmachine
47
+ email: shura1991@gmail.com
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files: []
53
+
54
+ files:
55
+ - lib/em/udev.rb
56
+ - lib/eventmachine/udev.rb
57
+ has_rdoc: true
58
+ homepage: http://github.com/shurizzle/em-udev
59
+ licenses: []
60
+
61
+ post_install_message:
62
+ rdoc_options: []
63
+
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: libudev for eventmachine
89
+ test_files: []
90
+