em-udev 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+