# 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

included(base) click to toggle source

Module#included, a hook for ‘include ObjectManager`, declares its dbus_interface.

       # File lib/dbus/object_manager.rb
    48 def self.included(base)
    49   base.class_eval do
    50     dbus_interface OBJECT_MANAGER_INTERFACE do
    51       dbus_method :GetManagedObjects, "out res:a{oa{sa{sv}}}" do
    52         [managed_objects]
    53       end
    54
    55       dbus_signal :InterfacesAdded, "object:o, interfaces_and_properties:a{sa{sv}}"
    56       dbus_signal :InterfacesRemoved, "object:o, interfaces:as"
    57     end
    58   end
    59 end

### Public Instance Methods

managed_objects() click to toggle source

Implements ‘the GetManagedObjects` method. @return [Hash{ObjectPath => Hash{String => Hash{String => `Data::Base`}}}]

    object -> interface -> property -> value

       # File lib/dbus/object_manager.rb
    26 def managed_objects
    27   descendant_objects = object_server.descendants_for(path)
    28   descendant_objects.each_with_object({}) do |obj, hash|
    29     hash[obj.path] = obj.interfaces_and_properties
    30   end
    31 end

object_added(object) click to toggle source

{ObjectServer#export} will call this for you to emit the ‘InterfacesAdded` signal. @param object [DBus::Object] @return [void]

       # File lib/dbus/object_manager.rb
    36 def object_added(object)
    37   InterfacesAdded(object.path, object.interfaces_and_properties)
    38 end

object_removed(object) click to toggle source

{ObjectServer#unexport} will call this for you to emit the ‘InterfacesRemoved` signal. @param object [DBus::Object] @return [void]

       # File lib/dbus/object_manager.rb
    43 def object_removed(object)
    44   InterfacesRemoved(object.path, object.intfs.keys)
    45 end