1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
# This file is part of the ruby-dbus project
# Copyright (C) 2007 Arnaud Cornet and Paul van Tilburg
# Copyright (C) 2009-2014 Martin Vidner
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License, version 2.1 as published by the Free Software Foundation.
# See the file "COPYING" for the exact licensing terms.
module DBus
# = D-Bus proxy object factory class
#
# Class that generates and sets up a proxy object based on introspection data.
class ProxyObjectFactory
# Creates a new proxy object factory for the given introspection XML _xml_,
# _bus_, destination _dest_, and _path_.
def initialize(xml, bus, dest, path, api: ApiOptions::CURRENT)
@xml = xml
@bus = bus
@path = path
@dest = dest
@api = api
end
# Investigates the sub-nodes of the proxy object _po_ based on the
# introspection XML data _xml_ and sets them up recursively.
def self.introspect_into(po, xml)
intfs, po.subnodes = IntrospectXMLParser.new(xml).parse
intfs.each do |i|
poi = ProxyObjectInterface.new(po, i.name)
i.methods.each_value { |m| poi.define(m) }
i.signals.each_value { |s| poi.define(s) }
po[i.name] = poi
end
po.introspected = true
end
# Generates, sets up and returns the proxy object.
def build
po = ProxyObject.new(@bus, @dest, @path, api: @api)
ProxyObjectFactory.introspect_into(po, @xml)
po
end
end # class ProxyObjectFactory
end
|