pangdudu-ruby-dbus 0.2.4.2 → 0.2.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -10
- data/lib/dbus/introspect.rb +69 -9
- data/lib/dbus.rb +1 -0
- metadata +11 -1
data/README.rdoc
CHANGED
@@ -3,23 +3,17 @@
|
|
3
3
|
Ruby D-Bus provides an implementation of the D-Bus protocol such that the
|
4
4
|
D-Bus system can be used in the Ruby programming language.
|
5
5
|
|
6
|
+
You can switch between REXML and Hpricot as XML parsers!
|
6
7
|
|
7
|
-
|
8
|
+
Still a little bumpy with multiple threads, but getting there.
|
8
9
|
|
9
|
-
If you'd like to contrib to this fork, let me know.
|
10
10
|
|
11
|
+
This is my personal dev-fork of mvidners upstream.
|
11
12
|
|
13
|
+
If you'd like to contrib to this fork, let me know.
|
12
14
|
|
13
15
|
Most of my work here is actually for another project: http://github.com/pangdudu/robots/tree/master
|
14
16
|
|
15
|
-
I might also start writing a less ugly version of: http://github.com/pangdudu/ruby-dbus-daemon/tree/master
|
16
|
-
|
17
|
-
If you know of a nice custom-dbus-daemon let me know. Still thinking about writing
|
18
|
-
a dbus spec compliant server/daemon implementation in (pure) Ruby, so that I can
|
19
|
-
play around with the network and authentification more easily.
|
20
|
-
|
21
|
-
Oki, will clean up a little now. :)
|
22
|
-
|
23
17
|
Peace.
|
24
18
|
|
25
19
|
== Requirements
|
data/lib/dbus/introspect.rb
CHANGED
@@ -9,6 +9,7 @@ p# dbus/introspection.rb - module containing a low-level D-Bus introspection imp
|
|
9
9
|
# See the file "COPYING" for the exact licensing terms.
|
10
10
|
|
11
11
|
require 'rexml/document'
|
12
|
+
require 'hpricot'
|
12
13
|
|
13
14
|
module DBus
|
14
15
|
# Regular expressions that should match all method names.
|
@@ -199,21 +200,58 @@ module DBus
|
|
199
200
|
# Creates a new parser for XML data in string _xml_.
|
200
201
|
def initialize(xml)
|
201
202
|
@xml = xml
|
203
|
+
@hpricot = true
|
202
204
|
end
|
203
205
|
|
204
206
|
# Recursively parses the subnodes, constructing the tree.
|
205
207
|
def parse_subnodes
|
206
208
|
subnodes = Array.new
|
207
209
|
t = Time.now
|
208
|
-
|
209
|
-
|
210
|
-
subnodes << e.attributes[
|
210
|
+
if @hpricot
|
211
|
+
d = Hpricot.XML(@xml)
|
212
|
+
(d/"node/node").each { |e| subnodes << e.attributes['name'] }
|
213
|
+
return subnodes
|
214
|
+
end
|
215
|
+
unless @hpricot
|
216
|
+
d = REXML::Document.new(@xml)
|
217
|
+
d.elements.each("node/node") do |e|
|
218
|
+
subnodes << e.attributes["name"]
|
219
|
+
end
|
220
|
+
return subnodes
|
211
221
|
end
|
212
|
-
subnodes
|
213
222
|
end
|
214
|
-
|
215
|
-
#
|
223
|
+
|
224
|
+
#make it easy to switch
|
216
225
|
def parse
|
226
|
+
parse_rexml unless @hpricot
|
227
|
+
parse_hpricot if @hpricot
|
228
|
+
end
|
229
|
+
|
230
|
+
# Parses the XML, constructing the tree, using hpricot
|
231
|
+
def parse_hpricot
|
232
|
+
ret = Array.new
|
233
|
+
subnodes = Array.new
|
234
|
+
d = Hpricot.XML(@xml)
|
235
|
+
(d/"node/node").each { |e| subnodes << e.attributes['name'] }
|
236
|
+
(d/"node/interface").each do |e|
|
237
|
+
i = Interface.new(e.attributes['name'])
|
238
|
+
(e/"method").each do |me|
|
239
|
+
m = Method.new(me.attributes['name'])
|
240
|
+
parse_methsig_hpricot(me, m)
|
241
|
+
i << m
|
242
|
+
end
|
243
|
+
(e/"signal").each do |se|
|
244
|
+
s = Signal.new(se.attributes['name'])
|
245
|
+
parse_methsig_hpricot(se, s)
|
246
|
+
i << s
|
247
|
+
end
|
248
|
+
ret << i
|
249
|
+
end
|
250
|
+
[ret, subnodes]
|
251
|
+
end
|
252
|
+
|
253
|
+
# Parses the XML, constructing the tree, using rexml
|
254
|
+
def parse_rexml
|
217
255
|
ret = Array.new
|
218
256
|
subnodes = Array.new
|
219
257
|
t = Time.now
|
@@ -225,12 +263,12 @@ module DBus
|
|
225
263
|
i = Interface.new(e.attributes["name"])
|
226
264
|
e.elements.each("method") do |me|
|
227
265
|
m = Method.new(me.attributes["name"])
|
228
|
-
|
266
|
+
parse_methsig_rexml(me, m)
|
229
267
|
i << m
|
230
268
|
end
|
231
269
|
e.elements.each("signal") do |se|
|
232
270
|
s = Signal.new(se.attributes["name"])
|
233
|
-
|
271
|
+
parse_methsig_rexml(se, s)
|
234
272
|
i << s
|
235
273
|
end
|
236
274
|
ret << i
|
@@ -247,7 +285,29 @@ module DBus
|
|
247
285
|
|
248
286
|
# Parses a method signature XML element _e_ and initialises
|
249
287
|
# method/signal _m_.
|
250
|
-
def
|
288
|
+
def parse_methsig_hpricot(e, m)
|
289
|
+
(e/"arg").each do |ae|
|
290
|
+
name = ae.attributes['name']
|
291
|
+
dir = ae.attributes['direction']
|
292
|
+
sig = ae.attributes['type']
|
293
|
+
if m.is_a?(DBus::Signal)
|
294
|
+
m.add_param([name, sig])
|
295
|
+
elsif m.is_a?(DBus::Method)
|
296
|
+
case dir
|
297
|
+
when "in"
|
298
|
+
m.add_param([name, sig])
|
299
|
+
when "out"
|
300
|
+
m.add_return([name, sig])
|
301
|
+
end
|
302
|
+
else
|
303
|
+
raise NotImplementedError, dir
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
# Parses a method signature XML element _e_ and initialises
|
309
|
+
# method/signal _m_.
|
310
|
+
def parse_methsig_rexml(e, m)
|
251
311
|
e.elements.each("arg") do |ae|
|
252
312
|
name = ae.attributes["name"]
|
253
313
|
dir = ae.attributes["direction"]
|
data/lib/dbus.rb
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
# See the file "COPYING" for the exact licensing terms.
|
10
10
|
require 'rubygems'
|
11
11
|
require 'rofl' #http://github.com/pangdudu/rofl/tree/master makes the debug/tracing easy
|
12
|
+
require 'hpricot' #hope this will speed stuff up a little
|
12
13
|
require 'dbus/type'
|
13
14
|
require 'dbus/introspect'
|
14
15
|
require 'dbus/export'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pangdudu-ruby-dbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.4.
|
4
|
+
version: 0.2.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ruby DBUS Team, pangdudu
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hpricot
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
25
35
|
description: Ruby module for interaction with dbus, panda dev fork.
|
26
36
|
email: pangdudu@github
|
27
37
|
executables: []
|