class DBus::Interface

D-Bus interface class

This class is the interface descriptor. In most cases, the Introspect() method call instantiates and configures this class for us.

It also is the local definition of interface exported by the program. At the client side, see {ProxyObjectInterface}.

Attributes

emits_changed_signal[R]

@return [EmitsChangedSignal]

methods[R]

@return [Hash{Symbol => DBus::Method}] The methods that are part of the interface.

name[R]

@return [String] The name of the interface.

properties[R]

@return [Hash{Symbol => Property}]

signals[R]

@return [Hash{Symbol => Signal}] The signals that are part of the interface.

Public Class Methods

new(name) click to toggle source

Creates a new interface with a given name.

   # File lib/dbus/introspect.rb
45 def initialize(name)
46   validate_name(name)
47   @name = name
48   @methods = {}
49   @signals = {}
50   @properties = {}
51   @emits_changed_signal = EmitsChangedSignal::DEFAULT_ECS
52 end

Public Instance Methods

<<(ifc_el)
Alias for: define
declare(ifc_el)
Alias for: define
declare_method(id, prototype)
Alias for: define_method
define(ifc_el) click to toggle source

Add ifc_el as a known {Method}, {Signal} or {Property} @param ifc_el [InterfaceElement]

   # File lib/dbus/introspect.rb
81 def define(ifc_el)
82   name = ifc_el.name.to_sym
83   category = case ifc_el
84              when Method
85                @methods
86              when Signal
87                @signals
88              when Property
89                @properties
90              end
91   category[name] = ifc_el
92 end
Also aliased as: declare, <<
define_method(id, prototype) click to toggle source

Defines a method with name id and a given prototype in the interface. Better name: declare_method

    # File lib/dbus/introspect.rb
 99 def define_method(id, prototype)
100   m = Method.new(id)
101   m.from_prototype(prototype)
102   define(m)
103 end
Also aliased as: declare_method
emits_changed_signal=(ecs) click to toggle source

Helper for {Object.emits_changed_signal=}. @api private

   # File lib/dbus/introspect.rb
56 def emits_changed_signal=(ecs)
57   raise TypeError unless ecs.is_a? EmitsChangedSignal
58   # equal?: object identity
59   unless @emits_changed_signal.equal?(EmitsChangedSignal::DEFAULT_ECS) ||
60          @emits_changed_signal.value == ecs.value
61     raise "emits_change_signal was assigned more than once"
62   end
63 
64   @emits_changed_signal = ecs
65 end
to_xml() click to toggle source

Return introspection XML string representation of the property. @return [String]

    # File lib/dbus/introspect.rb
108 def to_xml
109   xml = "  <interface name=\"#{name}\">\n"
110   xml += emits_changed_signal.to_xml
111   methods.each_value { |m| xml += m.to_xml }
112   signals.each_value { |m| xml += m.to_xml }
113   properties.each_value { |m| xml += m.to_xml }
114   xml += "  </interface>\n"
115   xml
116 end
validate_name(name) click to toggle source

Validates a service name.

   # File lib/dbus/introspect.rb
68 def validate_name(name)
69   raise InvalidIntrospectionData if name.bytesize > 255
70   raise InvalidIntrospectionData if name =~ /^\./ || name =~ /\.$/
71   raise InvalidIntrospectionData if name =~ /\.\./
72   raise InvalidIntrospectionData if name !~ /\./
73 
74   name.split(".").each do |element|
75     raise InvalidIntrospectionData if element !~ INTERFACE_ELEMENT_RE
76   end
77 end