Class: DBus::ProxyObjectInterface
- Inherits:
-
Object
- Object
- DBus::ProxyObjectInterface
- Defined in:
- lib/dbus/introspect.rb
Overview
D-Bus proxy object interface class
A class similar to the normal Interface used as a proxy for remote object interfaces.
Constant Summary collapse
- PROPERTY_INTERFACE =
"org.freedesktop.DBus.Properties"
Instance Attribute Summary collapse
-
#methods ⇒ Object
The proxied methods contained in the interface.
-
#name ⇒ Object
readonly
The name of the interface.
-
#object ⇒ Object
readonly
The proxy object to which this interface belongs.
-
#signals ⇒ Object
The proxied signals contained in the interface.
Instance Method Summary collapse
-
#[](propname) ⇒ Object
Read a property.
-
#[]=(propname, value) ⇒ Object
Write a property.
-
#all_properties ⇒ Object
Read all properties at once, as a hash.
-
#check_for_eval(s) ⇒ Object
FIXME.
-
#check_for_quoted_eval(s) ⇒ Object
FIXME.
-
#define(m) ⇒ Object
Defines a signal or method based on the descriptor m.
-
#define_method(methodname, prototype) ⇒ Object
Defines a proxied method on the interface.
-
#define_method_from_descriptor(m) ⇒ Object
Defines a method on the interface from the Method descriptor m.
-
#define_signal_from_descriptor(s) ⇒ Object
Defines a signal from the descriptor s.
-
#initialize(object, name) ⇒ ProxyObjectInterface
constructor
Creates a new proxy interface for the given proxy object and the given name.
-
#on_signal(bus, name, &block) ⇒ Object
Registers a handler (code block) for a signal with name arriving over the given bus.
-
#singleton_class ⇒ Object
Returns the singleton class of the interface.
-
#to_str ⇒ Object
Returns the string representation of the interface (the name).
Constructor Details
#initialize(object, name) ⇒ ProxyObjectInterface
Creates a new proxy interface for the given proxy object and the given name.
314 315 316 317 |
# File 'lib/dbus/introspect.rb', line 314 def initialize(object, name) @object, @name = object, name @methods, @signals = Hash.new, Hash.new end |
Instance Attribute Details
#methods ⇒ Object
The proxied methods contained in the interface.
304 305 306 |
# File 'lib/dbus/introspect.rb', line 304 def methods @methods end |
#name ⇒ Object (readonly)
The name of the interface.
310 311 312 |
# File 'lib/dbus/introspect.rb', line 310 def name @name end |
#object ⇒ Object (readonly)
The proxy object to which this interface belongs.
308 309 310 |
# File 'lib/dbus/introspect.rb', line 308 def object @object end |
#signals ⇒ Object
The proxied signals contained in the interface.
306 307 308 |
# File 'lib/dbus/introspect.rb', line 306 def signals @signals end |
Instance Method Details
#[](propname) ⇒ Object
Read a property.
411 412 413 |
# File 'lib/dbus/introspect.rb', line 411 def [](propname) self.object[PROPERTY_INTERFACE].Get(self.name, propname)[0] end |
#[]=(propname, value) ⇒ Object
Write a property.
416 417 418 |
# File 'lib/dbus/introspect.rb', line 416 def []=(propname, value) self.object[PROPERTY_INTERFACE].Set(self.name, propname, value) end |
#all_properties ⇒ Object
Read all properties at once, as a hash.
421 422 423 |
# File 'lib/dbus/introspect.rb', line 421 def all_properties self.object[PROPERTY_INTERFACE].GetAll(self.name)[0] end |
#check_for_eval(s) ⇒ Object
FIXME
330 331 332 |
# File 'lib/dbus/introspect.rb', line 330 def check_for_eval(s) raise RuntimeError, "invalid internal data '#{s}'" if not s.to_s =~ /^[A-Za-z0-9_]*$/ end |
#check_for_quoted_eval(s) ⇒ Object
FIXME
335 336 337 |
# File 'lib/dbus/introspect.rb', line 335 def check_for_quoted_eval(s) raise RuntimeError, "invalid internal data '#{s}'" if not s.to_s =~ /^[^"]+$/ end |
#define(m) ⇒ Object
Defines a signal or method based on the descriptor m.
382 383 384 385 386 387 388 |
# File 'lib/dbus/introspect.rb', line 382 def define(m) if m.kind_of?(Method) define_method_from_descriptor(m) elsif m.kind_of?(Signal) define_signal_from_descriptor(m) end end |
#define_method(methodname, prototype) ⇒ Object
Defines a proxied method on the interface.
391 392 393 394 395 |
# File 'lib/dbus/introspect.rb', line 391 def define_method(methodname, prototype) m = Method.new(methodname) m.from_prototype(prototype) define(m) end |
#define_method_from_descriptor(m) ⇒ Object
Defines a method on the interface from the Method descriptor m.
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
# File 'lib/dbus/introspect.rb', line 340 def define_method_from_descriptor(m) check_for_eval(m.name) check_for_quoted_eval(@name) methdef = "def #{m.name}(" methdef += (0..(m.params.size - 1)).to_a.collect { |n| "arg#{n}" }.push("&reply_handler").join(", ") methdef += %{) msg = Message.new(Message::METHOD_CALL) msg.path = @object.path msg.interface = "#{@name}" msg.destination = @object.destination msg.member = "#{m.name}" msg.sender = @object.bus.unique_name } idx = 0 m.params.each do |fpar| par = fpar.type check_for_quoted_eval(par) # This is the signature validity check Type::Parser.new(par).parse methdef += %{ msg.add_param("#{par}", arg#{idx}) } idx += 1 end methdef += " @object.bus.send_sync_or_async(msg, &reply_handler) end " singleton_class.class_eval(methdef) @methods[m.name] = m end |
#define_signal_from_descriptor(s) ⇒ Object
Defines a signal from the descriptor s.
377 378 379 |
# File 'lib/dbus/introspect.rb', line 377 def define_signal_from_descriptor(s) @signals[s.name] = s end |
#on_signal(bus, name, &block) ⇒ Object
Registers a handler (code block) for a signal with name arriving over the given bus. If no block is given, the signal is unregistered.
399 400 401 402 403 404 405 406 |
# File 'lib/dbus/introspect.rb', line 399 def on_signal(bus, name, &block) mr = DBus::MatchRule.new.from_signal(self, name) if block.nil? bus.remove_match(mr) else bus.add_match(mr) { |msg| block.call(*msg.params) } end end |
#singleton_class ⇒ Object
Returns the singleton class of the interface.
325 326 327 |
# File 'lib/dbus/introspect.rb', line 325 def singleton_class (class << self ; self ; end) end |
#to_str ⇒ Object
Returns the string representation of the interface (the name).
320 321 322 |
# File 'lib/dbus/introspect.rb', line 320 def to_str @name end |