module DBus::ObjectManager
A mixin for {DBus::Object} implementing {dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager org.freedesktop.DBus.ObjectManager}.
{ObjectServer#export} and {ObjectServer#unexport} will look for an ObjectManager
parent in the path hierarchy. If found, it will emit InterfacesAdded or InterfacesRemoved, as appropriate.
Constants
- OBJECT_MANAGER_INTERFACE
Public Class Methods
Module#included, a hook for ‘include ObjectManager`, declares its dbus_interface.
# File lib/dbus/object_manager.rb, line 48 def self.included(base) base.class_eval do dbus_interface OBJECT_MANAGER_INTERFACE do dbus_method :GetManagedObjects, "out res:a{oa{sa{sv}}}" do [managed_objects] end dbus_signal :InterfacesAdded, "object:o, interfaces_and_properties:a{sa{sv}}" dbus_signal :InterfacesRemoved, "object:o, interfaces:as" end end end
Public Instance Methods
Implements ‘the GetManagedObjects` method. @return [Hash{ObjectPath => Hash{String => Hash{String => Data::Base
}}}]
object -> interface -> property -> value
# File lib/dbus/object_manager.rb, line 26 def managed_objects descendant_objects = object_server.descendants_for(path) descendant_objects.each_with_object({}) do |obj, hash| hash[obj.path] = obj.interfaces_and_properties end end
{ObjectServer#export} will call this for you to emit the ‘InterfacesAdded` signal. @param object [DBus::Object] @return [void]
# File lib/dbus/object_manager.rb, line 36 def object_added(object) InterfacesAdded(object.path, object.interfaces_and_properties) end
{ObjectServer#unexport} will call this for you to emit the ‘InterfacesRemoved` signal. @param object [DBus::Object] @return [void]
# File lib/dbus/object_manager.rb, line 43 def object_removed(object) InterfacesRemoved(object.path, object.intfs.keys) end