Class: DBus::ProxyObject

Inherits:
Object
  • Object
show all
Defined in:
lib/dbus/introspect.rb

Overview

D-Bus proxy object class

Class representing a remote object in an external application. Typically, calling a method on an instance of a ProxyObject sends a message over the bus so that the method is executed remotely on the correctponding object.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bus, dest, path) ⇒ ProxyObject

Creates a new proxy object living on the given bus at destination dest on the given path.



419
420
421
422
423
# File 'lib/dbus/introspect.rb', line 419

def initialize(bus, dest, path)
  @bus, @destination, @path = bus, dest, path
  @interfaces = Hash.new
  @subnodes = Array.new
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object (private)

Handles all unkown methods, mostly to route method calls to the default interface.



469
470
471
472
473
474
475
# File 'lib/dbus/introspect.rb', line 469

def method_missing(name, *args)
  if @default_iface and has_iface?(@default_iface)
    @interfaces[@default_iface].method(name).call(*args)
  else
    raise NoMethodError
  end
end

Instance Attribute Details

#busObject (readonly)

The bus the object is reachable via.



413
414
415
# File 'lib/dbus/introspect.rb', line 413

def bus
  @bus
end

#default_ifaceObject

The default interface of the object.



415
416
417
# File 'lib/dbus/introspect.rb', line 415

def default_iface
  @default_iface
end

#destinationObject (readonly)

The (remote) destination of the object.



409
410
411
# File 'lib/dbus/introspect.rb', line 409

def destination
  @destination
end

#introspectedObject

Flag determining whether the object has been introspected.



407
408
409
# File 'lib/dbus/introspect.rb', line 407

def introspected
  @introspected
end

#pathObject (readonly)

The path to the object.



411
412
413
# File 'lib/dbus/introspect.rb', line 411

def path
  @path
end

#subnodesObject

The subnodes of the object in the tree.



405
406
407
# File 'lib/dbus/introspect.rb', line 405

def subnodes
  @subnodes
end

Instance Method Details

#[](intfname) ⇒ Object

Retrieves an interface of the proxy object (ProxyObjectInterface instance).



431
432
433
# File 'lib/dbus/introspect.rb', line 431

def [](intfname)
  @interfaces[intfname]
end

#[]=(intfname, intf) ⇒ Object

Maps the given interface name intfname to the given interface _intf.



436
437
438
# File 'lib/dbus/introspect.rb', line 436

def []=(intfname, intf)
  @interfaces[intfname] = intf
end

#has_iface?(name) ⇒ Boolean

Returns whether the object has an interface with the given name.

Returns:

  • (Boolean)


450
451
452
453
# File 'lib/dbus/introspect.rb', line 450

def has_iface?(name)
  raise "Cannot call has_iface? is not introspected" if not @introspected
  @interfaces.member?(name)
end

#interfacesObject

Returns the interfaces of the object.



426
427
428
# File 'lib/dbus/introspect.rb', line 426

def interfaces
  @interfaces.keys
end

#introspectObject

Introspects the remote object. Allows you to find and select interfaces on the object.



442
443
444
445
446
447
# File 'lib/dbus/introspect.rb', line 442

def introspect
  # Synchronous call here.
  xml = @bus.introspect_data(@destination, @path)
  ProxyObjectFactory.introspect_into(self, xml)
  xml
end

#on_signal(name, &block) ⇒ Object

Registers a handler, the code block, for a signal with the given name.



456
457
458
459
460
461
462
# File 'lib/dbus/introspect.rb', line 456

def on_signal(name, &block)
  if @default_iface and has_iface?(@default_iface)
    @interfaces[@default_iface].on_signal(@bus, name, &block)
  else
    raise NoMethodError
  end
end