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 instanciates and configures this class for us.

It also is the local definition of interface exported by the program.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Interface

Creates a new interface with a given name.



42
43
44
45
46
# File 'lib/dbus/introspect.rb', line 42

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.



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

def methods
  @methods
end

#nameObject (readonly)

The name of the interface.



35
36
37
# File 'lib/dbus/introspect.rb', line 35

def name
  @name
end

#signalsObject (readonly)

The signals that are part of the interface.



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

def signals
  @signals
end

Instance Method Details

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

Helper method for defining a method m.



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

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.



71
72
73
74
75
# File 'lib/dbus/introspect.rb', line 71

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

#validate_name(name) ⇒ Object

Validates a service name.



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

def validate_name(name)
  raise InvalidIntrospectionData if name.size > 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