class DBus::ProxyService

Used by clients to represent a named service on the other side of the bus.

Formerly this class was intermixed with {ObjectServer} as Service.

@example Usage

svc = DBus.system_bus["org.freedesktop.machine1"]
manager = svc["/org/freedesktop/machine1"]
p manager.ListImages

Attributes

connection[R]

@return [Connection] The connection we’re using.

name[R]

@return [BusName,nil] The service name. Will be nil for a {PeerConnection}

Public Class Methods

new(name, connection) click to toggle source

@param connection [Connection] The connection we’re using.

Calls superclass method DBus::NodeTree::new
   # File lib/dbus/proxy_service.rb
31 def initialize(name, connection)
32   @name = BusName.new(name)
33   @connection = connection
34   super()
35 end

Public Instance Methods

[](path) click to toggle source

Retrieves an object at the given path. @param path [ObjectPath] @return [ProxyObject]

   # File lib/dbus/proxy_service.rb
55 def [](path)
56   object(path, api: ApiOptions::A1)
57 end
exists?() click to toggle source

Determine whether the service name already exists.

   # File lib/dbus/proxy_service.rb
38 def exists?
39   bus = connection # TODO: raise a better error if this is a peer connection
40   bus.proxy.ListNames[0].member?(@name)
41 end
introspect() click to toggle source

Perform an introspection on all the objects on the service (starting recursively from the root).

   # File lib/dbus/proxy_service.rb
45 def introspect
46   raise NotImplementedError if block_given?
47 
48   rec_introspect(@root, "/")
49   self
50 end
object(path, api: ApiOptions::A0) click to toggle source

Retrieves an object at the given path whose methods always return an array. @param path [ObjectPath] @param api [ApiOptions] @return [ProxyObject]

   # File lib/dbus/proxy_service.rb
64 def object(path, api: ApiOptions::A0)
65   node = get_node(path, create: true)
66   if node.object.nil? || node.object.api != api
67     node.object = ProxyObject.new(
68       @connection, @name, path,
69       api: api
70     )
71   end
72   node.object
73 end

Private Instance Methods

rec_introspect(node, path) click to toggle source

Perform a recursive retrospection on the given current node on the given path.

   # File lib/dbus/proxy_service.rb
79 def rec_introspect(node, path)
80   xml = connection.introspect_data(@name, path)
81   intfs, subnodes = IntrospectXMLParser.new(xml).parse
82   subnodes.each do |nodename|
83     subnode = node[nodename] = Node.new(nodename)
84     subpath = if path == "/"
85                 "/#{nodename}"
86               else
87                 "#{path}/#{nodename}"
88               end
89     rec_introspect(subnode, subpath)
90   end
91   return if intfs.empty?
92 
93   node.object = ProxyObjectFactory.new(xml, @connection, @name, path).build
94 end