Class: DBus::Interface

Inherits:
Object
  • Object
show all
Defined in:
lib/dbus/introspect.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Interface

Creates a new interface with a given name.



44
45
46
47
48
# File 'lib/dbus/introspect.rb', line 44

def initialize(name)
  validate_name(name)
  @name = name
  @methods, @signals = Hash.new, Hash.new
end

Instance Attribute Details

#methodsObject (readonly)

The methods that are part of the interface. Hash: Symbol => DBus::Method



39
40
41
# File 'lib/dbus/introspect.rb', line 39

def methods
  @methods
end

#nameObject (readonly)

The name of the interface. String



37
38
39
# File 'lib/dbus/introspect.rb', line 37

def name
  @name
end

#signalsObject (readonly)

The signals that are part of the interface. Hash: Symbol => Signal



41
42
43
# File 'lib/dbus/introspect.rb', line 41

def signals
  @signals
end

Instance Method Details

#define(m) ⇒ Object Also known as: <<

Helper method for defining a method m.



62
63
64
65
66
67
68
# File 'lib/dbus/introspect.rb', line 62

def define(m)
  if m.kind_of?(Method)
    @methods[m.name.to_sym] = m
  elsif m.kind_of?(Signal)
    @signals[m.name.to_sym] = m
  end
end

#define_method(id, prototype) ⇒ Object

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



73
74
75
76
77
# File 'lib/dbus/introspect.rb', line 73

def define_method(id, prototype)
  m = Method.new(id)
  m.from_prototype(prototype)
  define(m)
end

#validate_name(name) ⇒ Object

Validates a service name.



51
52
53
54
55
56
57
58
59
# File 'lib/dbus/introspect.rb', line 51

def validate_name(name)
  raise InvalidIntrospectionData if name.bytesize > 255
  raise InvalidIntrospectionData if name =~ /^\./ or name =~ /\.$/
  raise InvalidIntrospectionData if name =~ /\.\./
  raise InvalidIntrospectionData if not name =~ /\./
  name.split(".").each do |element|
    raise InvalidIntrospectionData if not element =~ InterfaceElementRE
  end
end