ruby-dbus 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +344 -0
- data/Rakefile +21 -15
- data/VERSION +1 -1
- data/doc/Reference.md +26 -37
- data/examples/doc/_extract_examples +4 -4
- data/examples/gdbus/gdbus +40 -39
- data/examples/no-introspect/nm-test.rb +1 -3
- data/examples/no-introspect/tracker-test.rb +2 -4
- data/examples/rhythmbox/playpause.rb +1 -2
- data/examples/service/call_service.rb +0 -3
- data/examples/service/service_newapi.rb +3 -4
- data/examples/simple/call_introspect.rb +0 -3
- data/examples/simple/get_id.rb +1 -3
- data/examples/simple/properties.rb +3 -4
- data/examples/utils/listnames.rb +6 -7
- data/examples/utils/notify.rb +3 -5
- data/lib/dbus.rb +8 -20
- data/lib/dbus/auth.rb +59 -61
- data/lib/dbus/bus.rb +86 -97
- data/lib/dbus/error.rb +1 -1
- data/lib/dbus/export.rb +20 -18
- data/lib/dbus/introspect.rb +26 -28
- data/lib/dbus/logger.rb +1 -1
- data/lib/dbus/marshall.rb +72 -74
- data/lib/dbus/matchrule.rb +22 -26
- data/lib/dbus/message.rb +24 -33
- data/lib/dbus/message_queue.rb +30 -30
- data/lib/dbus/proxy_object.rb +34 -30
- data/lib/dbus/proxy_object_factory.rb +5 -2
- data/lib/dbus/proxy_object_interface.rb +10 -8
- data/lib/dbus/type.rb +154 -156
- data/lib/dbus/xml.rb +22 -16
- data/ruby-dbus.gemspec +15 -3
- data/spec/async_spec.rb +2 -4
- data/spec/binding_spec.rb +1 -5
- data/spec/bus_and_xml_backend_spec.rb +6 -9
- data/spec/bus_spec.rb +1 -1
- data/spec/byte_array_spec.rb +0 -2
- data/spec/err_msg_spec.rb +13 -10
- data/spec/introspect_xml_parser_spec.rb +2 -2
- data/spec/introspection_spec.rb +1 -1
- data/spec/main_loop_spec.rb +4 -5
- data/spec/property_spec.rb +0 -3
- data/spec/proxy_object_spec.rb +42 -0
- data/spec/server_robustness_spec.rb +0 -2
- data/spec/service_newapi.rb +51 -41
- data/spec/session_bus_spec.rb +6 -7
- data/spec/signal_spec.rb +2 -3
- data/spec/spec_helper.rb +28 -24
- data/spec/thread_safety_spec.rb +1 -2
- data/spec/type_spec.rb +2 -2
- data/spec/value_spec.rb +7 -10
- data/spec/variant_spec.rb +15 -16
- metadata +60 -3
- data/NEWS +0 -279
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
if ARGV[0].nil?
|
3
|
-
puts "Usage: #{$
|
3
|
+
puts "Usage: #{$PROGRAM_NAME} file.md"
|
4
4
|
exit
|
5
5
|
end
|
6
6
|
|
@@ -11,7 +11,7 @@ File.open(ARGV[0]) do |f|
|
|
11
11
|
f.each_line do |line|
|
12
12
|
case line
|
13
13
|
when /^#+ *(.*)/
|
14
|
-
new_title =
|
14
|
+
new_title = Regexp.last_match(1)
|
15
15
|
|
16
16
|
# write previous example
|
17
17
|
unless example.empty?
|
@@ -22,7 +22,7 @@ File.open(ARGV[0]) do |f|
|
|
22
22
|
File.open("#{basename}.rb", "w") do |e|
|
23
23
|
e.write setup
|
24
24
|
e.write example
|
25
|
-
e.chmod(
|
25
|
+
e.chmod(0o755)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -31,7 +31,7 @@ File.open(ARGV[0]) do |f|
|
|
31
31
|
title = new_title
|
32
32
|
example = ""
|
33
33
|
when /^ (.*)/
|
34
|
-
example <<
|
34
|
+
example << Regexp.last_match(1) << "\n"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/examples/gdbus/gdbus
CHANGED
@@ -5,19 +5,20 @@
|
|
5
5
|
# stuff.
|
6
6
|
# -- Arnaud
|
7
7
|
|
8
|
-
require
|
8
|
+
require "dbus"
|
9
9
|
require "gtk2"
|
10
10
|
|
11
|
-
|
11
|
+
ENABLE_SYSTEM = false
|
12
12
|
|
13
13
|
class MethodCallWindow
|
14
14
|
def initialize(pwindow, intf, meth)
|
15
|
-
@intf
|
16
|
-
@
|
15
|
+
@intf = intf
|
16
|
+
@meth = meth
|
17
|
+
@entries = []
|
17
18
|
@dialog = Gtk::Dialog.new(meth.name, pwindow,
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
Gtk::Dialog::MODAL | Gtk::Dialog::NO_SEPARATOR,
|
20
|
+
[Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK],
|
21
|
+
[Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL])
|
21
22
|
|
22
23
|
@meth.params.each do |param|
|
23
24
|
shbox = Gtk::HBox.new(true, 0)
|
@@ -61,14 +62,13 @@ class MethodCallWindow
|
|
61
62
|
end
|
62
63
|
m.add_param(param[1], data)
|
63
64
|
end
|
64
|
-
bus.
|
65
|
+
bus.send_sync_or_async(m) do |retm|
|
65
66
|
if retm.is_a?(DBus::Error)
|
66
67
|
puts "Error: #{retm.inspect}"
|
67
68
|
else
|
68
69
|
puts "Method #{m.member} returns: #{retm.params.inspect}"
|
69
70
|
end
|
70
71
|
end
|
71
|
-
bus.send(m.marshall)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -78,13 +78,13 @@ class DBusUI
|
|
78
78
|
@glade << "gdbus.glade"
|
79
79
|
|
80
80
|
@sessiontreeview = @glade.get_object("sessiontreeview")
|
81
|
-
setup_treeview_renderer(@sessiontreeview,
|
81
|
+
setup_treeview_renderer(@sessiontreeview, "D-Bus Objects")
|
82
82
|
@sessiontreeview.selection.signal_connect("changed") do |selection|
|
83
83
|
on_treeview_selection_changed(selection)
|
84
84
|
end
|
85
85
|
|
86
86
|
@systemtreeview = @glade.get_object("systemtreeview")
|
87
|
-
setup_treeview_renderer(@systemtreeview,
|
87
|
+
setup_treeview_renderer(@systemtreeview, "D-Bus Objects")
|
88
88
|
@systemtreeview.selection.signal_connect("changed") do |selection|
|
89
89
|
on_treeview_selection_changed(selection)
|
90
90
|
end
|
@@ -92,6 +92,9 @@ class DBusUI
|
|
92
92
|
@methsigtreeview = @glade.get_object("methsigtreeview")
|
93
93
|
# ierk
|
94
94
|
setup_methodview_renderer(@methsigtreeview)
|
95
|
+
@methsigtreeview.signal_connect("row-activated") do |view, path, column|
|
96
|
+
on_method_activated(view, path, column)
|
97
|
+
end
|
95
98
|
|
96
99
|
@window = @glade.get_object("window1")
|
97
100
|
@window.show_all
|
@@ -101,10 +104,10 @@ class DBusUI
|
|
101
104
|
def beautify_method(meth)
|
102
105
|
# Damn, this need to be rewritten :p
|
103
106
|
s = meth.name + "("
|
104
|
-
if meth.
|
107
|
+
if meth.is_a?(DBus::Method)
|
105
108
|
s += (meth.params.collect { |a| "in #{a[0]}:#{a[1]}" } +
|
106
109
|
meth.rets.collect { |a| "out #{a[0]}:#{a[1]}" }).join(", ")
|
107
|
-
elsif meth.
|
110
|
+
elsif meth.is_a?(DBus::Signal)
|
108
111
|
s += (meth.params.collect { |a| "in #{a[0]}:#{a[1]}" }).join(", ")
|
109
112
|
end
|
110
113
|
s += ")"
|
@@ -117,7 +120,7 @@ class DBusUI
|
|
117
120
|
DBus::ProxyObjectInterface)
|
118
121
|
@methsigtreeview.model = model
|
119
122
|
if selected
|
120
|
-
if intf = selected[1]
|
123
|
+
if (intf = selected[1])
|
121
124
|
intf.methods.keys.sort.each do |mi|
|
122
125
|
m = intf.methods[mi]
|
123
126
|
subiter = model.append
|
@@ -138,11 +141,10 @@ class DBusUI
|
|
138
141
|
end
|
139
142
|
end
|
140
143
|
|
141
|
-
def on_method_activated(view, path,
|
144
|
+
def on_method_activated(view, path, _column)
|
142
145
|
name = view.model.get_iter(path)[0]
|
143
146
|
puts "Clicked on: #{name.inspect}"
|
144
147
|
type = view.model.get_iter(path)[1]
|
145
|
-
intf = view.model.get_iter(path)[2]
|
146
148
|
if type == "M"
|
147
149
|
method = view.model.get_iter(path)[2]
|
148
150
|
intf = view.model.get_iter(path)[3]
|
@@ -151,34 +153,33 @@ class DBusUI
|
|
151
153
|
signal = view.model.get_iter(path)[2]
|
152
154
|
intf = view.model.get_iter(path)[3]
|
153
155
|
mr = DBus::MatchRule.new.from_signal(intf, signal)
|
154
|
-
puts "*** Registering matchrule: #{mr
|
156
|
+
puts "*** Registering matchrule: #{mr} ***"
|
155
157
|
intf.object.bus.add_match(mr) do |sig|
|
156
|
-
puts "Got #{sig.member}(#{sig.params.join(
|
158
|
+
puts "Got #{sig.member}(#{sig.params.join(",")})"
|
157
159
|
end
|
158
160
|
end
|
159
161
|
end
|
160
162
|
|
161
|
-
def on_sessiontreeview_row_activated(view, path,
|
163
|
+
def on_sessiontreeview_row_activated(view, path, _column)
|
162
164
|
name = view.model.get_iter(path)[0]
|
163
165
|
puts "Clicked on: #{name.inspect}"
|
164
|
-
intf = view.model.get_iter(path)[1]
|
165
166
|
end
|
166
167
|
|
167
|
-
def on_window_delete_event(
|
168
|
+
def on_window_delete_event(_window, _event)
|
168
169
|
Gtk.main_quit
|
169
170
|
end
|
170
171
|
|
171
172
|
def setup_methodview_renderer(treeview)
|
172
173
|
renderer = Gtk::CellRendererText.new
|
173
|
-
|
174
|
-
col_offset = treeview.insert_column(-1, "Name", renderer,
|
174
|
+
_col_offset = treeview.insert_column(-1, "T", renderer, "text" => 1)
|
175
|
+
col_offset = treeview.insert_column(-1, "Name", renderer, "text" => 0)
|
175
176
|
column = treeview.get_column(col_offset - 1)
|
176
177
|
column.clickable = true
|
177
178
|
end
|
178
179
|
|
179
180
|
def setup_treeview_renderer(treeview, str)
|
180
181
|
renderer = Gtk::CellRendererText.new
|
181
|
-
col_offset = treeview.insert_column(-1, str, renderer,
|
182
|
+
col_offset = treeview.insert_column(-1, str, renderer, "text" => 0)
|
182
183
|
column = treeview.get_column(col_offset - 1)
|
183
184
|
column.clickable = true
|
184
185
|
end
|
@@ -196,15 +197,15 @@ class DBusUI
|
|
196
197
|
def start_buses
|
197
198
|
# call glibize to get dbus messages from the glib mainloop
|
198
199
|
DBus::SessionBus.instance.glibize
|
199
|
-
DBus::SystemBus.instance.glibize if
|
200
|
+
DBus::SystemBus.instance.glibize if ENABLE_SYSTEM
|
200
201
|
|
201
|
-
DBus::SessionBus.instance.proxy.ListNames do |
|
202
|
+
DBus::SessionBus.instance.proxy.ListNames do |_msg, names|
|
202
203
|
fill_treeview(DBus::SessionBus.instance, @sessiontreeview, names)
|
203
204
|
end
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
205
|
+
|
206
|
+
return unless ENABLE_SYSTEM
|
207
|
+
DBus::SystemBus.instance.proxy.ListNames do |_msg, names|
|
208
|
+
fill_treeview(DBus::SystemBus.instance, @systemtreeview, names)
|
208
209
|
end
|
209
210
|
end
|
210
211
|
|
@@ -214,18 +215,18 @@ class DBusUI
|
|
214
215
|
subiter[0] = key
|
215
216
|
walk_node(model, subiter, val)
|
216
217
|
end
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
218
|
+
|
219
|
+
return if node.object.nil?
|
220
|
+
node.object.interfaces.sort.each do |ifname|
|
221
|
+
subiter = model.append(iter)
|
222
|
+
subiter[0] = ifname
|
223
|
+
subiter[1] = node.object[ifname]
|
223
224
|
end
|
224
225
|
end
|
225
226
|
|
226
227
|
def introspect_services(model, bus)
|
227
228
|
el = @introspect_array.shift
|
228
|
-
if
|
229
|
+
if !(el =~ /^:/)
|
229
230
|
iter = model.append(nil)
|
230
231
|
iter[0] = el
|
231
232
|
puts "introspecting: #{el}"
|
@@ -238,14 +239,14 @@ class DBusUI
|
|
238
239
|
end
|
239
240
|
end
|
240
241
|
|
241
|
-
|
242
|
+
!@introspect_array.empty?
|
242
243
|
end
|
243
244
|
|
244
245
|
def fill_treeview(bus, treeview, array)
|
245
246
|
model = Gtk::TreeStore.new(String, DBus::ProxyObjectInterface)
|
246
247
|
treeview.model = model
|
247
248
|
@introspect_array = array.sort
|
248
|
-
Gtk
|
249
|
+
Gtk.idle_add { introspect_services(model, bus) }
|
249
250
|
end
|
250
251
|
|
251
252
|
def main
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Trivial network interface lister using NetworkManager.
|
4
4
|
# NetworkManager does not support introspection, so the api is not that sexy.
|
5
5
|
|
6
|
-
require
|
6
|
+
require "dbus"
|
7
7
|
|
8
8
|
bus = DBus::SystemBus.instance
|
9
9
|
|
@@ -17,5 +17,3 @@ rescue Exception
|
|
17
17
|
poi.define_method("GetDevices", "") # NM 0.7
|
18
18
|
p poi.GetDevices
|
19
19
|
end
|
20
|
-
|
21
|
-
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Trivial network interface lister using NetworkManager.
|
4
4
|
# NetworkManager does not support introspection, so the api is not that sexy.
|
5
5
|
|
6
|
-
require
|
6
|
+
require "dbus"
|
7
7
|
|
8
8
|
bus = DBus::SessionBus.instance
|
9
9
|
|
@@ -11,6 +11,4 @@ tracker_service = bus.service("org.freedesktop.Tracker")
|
|
11
11
|
tracker_manager = tracker_service.object("/org/freedesktop/tracker")
|
12
12
|
poi = DBus::ProxyObjectInterface.new(tracker_manager, "org.freedesktop.Tracker.Files")
|
13
13
|
poi.define_method("GetMetadataForFilesInFolder", "in live_query_id:i, in uri:s, in fields:as, out values:aas")
|
14
|
-
p poi.GetMetadataForFilesInFolder(-1, ENV[
|
15
|
-
|
16
|
-
|
14
|
+
p poi.GetMetadataForFilesInFolder(-1, ENV["HOME"] + "/Desktop", ["File:Name", "File:Size"])
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dbus"
|
4
4
|
bus = DBus::SessionBus.instance
|
5
5
|
# get a rb object
|
6
6
|
proxy = bus.introspect("org.gnome.Rhythmbox", "/org/gnome/Rhythmbox/Player")
|
@@ -22,4 +22,3 @@ proxyi.playPause(true)
|
|
22
22
|
main = DBus::Main.new
|
23
23
|
main << bus
|
24
24
|
main.run
|
25
|
-
|
@@ -9,8 +9,6 @@ ruby_srv = session_bus.service("org.ruby.service")
|
|
9
9
|
# Get the object from this service
|
10
10
|
player = ruby_srv.object("/org/ruby/MyInstance")
|
11
11
|
|
12
|
-
# Introspect it
|
13
|
-
puts player.introspect
|
14
12
|
player.default_iface = "org.ruby.SampleInterface"
|
15
13
|
player.test_variant(["s", "coucou"])
|
16
14
|
player.on_signal("SomethingJustHappened") do |u, v|
|
@@ -22,4 +20,3 @@ p player["org.ruby.AnotherInterface"].Reverse("Hello world!")
|
|
22
20
|
main = DBus::Main.new
|
23
21
|
main << session_bus
|
24
22
|
main.run
|
25
|
-
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dbus"
|
4
|
+
require "thread"
|
5
5
|
Thread.abort_on_exception = true
|
6
6
|
|
7
7
|
class Test < DBus::Object
|
@@ -37,7 +37,7 @@ service.export(myobj)
|
|
37
37
|
|
38
38
|
Thread.new do
|
39
39
|
i = 0
|
40
|
-
loop do
|
40
|
+
loop do
|
41
41
|
# Signal emission
|
42
42
|
myobj.SomethingJustHappened("hey", i += 1)
|
43
43
|
sleep(0.5)
|
@@ -48,4 +48,3 @@ puts "listening"
|
|
48
48
|
main = DBus::Main.new
|
49
49
|
main << bus
|
50
50
|
main.run
|
51
|
-
|
@@ -10,8 +10,6 @@ rhythmbox = session_bus.service("org.gnome.Rhythmbox")
|
|
10
10
|
# Get the object from this service
|
11
11
|
player = rhythmbox.object("/org/gnome/Rhythmbox/Player")
|
12
12
|
|
13
|
-
# Introspect it
|
14
|
-
player.introspect
|
15
13
|
if player.has_iface? "org.gnome.Rhythmbox.Player"
|
16
14
|
puts "We have Rhythmbox Player interface"
|
17
15
|
end
|
@@ -31,4 +29,3 @@ end
|
|
31
29
|
main = DBus::Main.new
|
32
30
|
main << session_bus
|
33
31
|
main.run
|
34
|
-
|
data/examples/simple/get_id.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
3
|
# find the library without external help
|
4
|
-
|
4
|
+
$LOAD_PATH.unshift File.expand_path("../../../lib", __FILE__)
|
5
5
|
|
6
6
|
require "dbus"
|
7
7
|
|
@@ -10,8 +10,6 @@ driver_svc = bus["org.freedesktop.DBus"]
|
|
10
10
|
# p driver_svc
|
11
11
|
driver_obj = driver_svc["/"]
|
12
12
|
# p driver_obj
|
13
|
-
driver_obj.introspect
|
14
|
-
|
15
13
|
driver_ifc = driver_obj["org.freedesktop.DBus"]
|
16
14
|
# p driver_ifc
|
17
15
|
|
@@ -1,10 +1,9 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
|
-
require
|
2
|
+
require "dbus"
|
3
3
|
|
4
4
|
bus = DBus::SystemBus.instance
|
5
5
|
nm_service = bus["org.freedesktop.NetworkManager"]
|
6
|
-
network_manager_object = nm_service
|
7
|
-
network_manager_object.introspect
|
6
|
+
network_manager_object = nm_service["/org/freedesktop/NetworkManager"]
|
8
7
|
nm_iface = network_manager_object["org.freedesktop.NetworkManager"]
|
9
8
|
|
10
9
|
# read a property
|
@@ -16,4 +15,4 @@ else
|
|
16
15
|
end
|
17
16
|
puts "Toggling wireless"
|
18
17
|
# write a property
|
19
|
-
nm_iface["WirelessEnabled"] = !
|
18
|
+
nm_iface["WirelessEnabled"] = !enabled
|
data/examples/utils/listnames.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dbus"
|
4
4
|
|
5
5
|
d = if ARGV.member?("--system")
|
6
|
-
|
7
|
-
else
|
8
|
-
|
9
|
-
end
|
10
|
-
d.proxy.ListNames[0].each{ |n| puts "\t#{n}" }
|
11
|
-
|
6
|
+
DBus::SystemBus.instance
|
7
|
+
else
|
8
|
+
DBus::SessionBus.instance
|
9
|
+
end
|
10
|
+
d.proxy.ListNames[0].each { |n| puts "\t#{n}" }
|
data/examples/utils/notify.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dbus"
|
4
4
|
|
5
5
|
if ARGV.size < 2
|
6
6
|
puts "Usage:"
|
@@ -9,11 +9,9 @@ if ARGV.size < 2
|
|
9
9
|
end
|
10
10
|
|
11
11
|
d = DBus::SessionBus.instance
|
12
|
-
o = d
|
13
|
-
o.introspect
|
12
|
+
o = d["org.freedesktop.Notifications"]["/org/freedesktop/Notifications"]
|
14
13
|
|
15
14
|
i = o["org.freedesktop.Notifications"]
|
16
15
|
|
17
|
-
i.Notify(
|
16
|
+
i.Notify("notify.rb", 0, "info", ARGV[0], ARGV[1], [], {}, 2000) do |ret, param|
|
18
17
|
end
|
19
|
-
|
data/lib/dbus.rb
CHANGED
@@ -34,26 +34,22 @@ require "thread"
|
|
34
34
|
# Module containing all the D-Bus modules and classes.
|
35
35
|
module DBus
|
36
36
|
# Default socket name for the system bus.
|
37
|
-
SystemSocketName = "unix:path=/var/run/dbus/system_bus_socket"
|
37
|
+
SystemSocketName = "unix:path=/var/run/dbus/system_bus_socket".freeze
|
38
38
|
|
39
39
|
# Byte signifying big endianness.
|
40
|
-
BIG_END =
|
40
|
+
BIG_END = "B".freeze
|
41
41
|
# Byte signifying little endianness.
|
42
|
-
LIL_END =
|
42
|
+
LIL_END = "l".freeze
|
43
43
|
|
44
44
|
# Byte signifying the host's endianness.
|
45
45
|
HOST_END = if [0x01020304].pack("L").unpack("V")[0] == 0x01020304
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
LIL_END
|
47
|
+
else
|
48
|
+
BIG_END
|
49
|
+
end
|
50
50
|
|
51
51
|
# General exceptions.
|
52
52
|
|
53
|
-
# Exception raised when an invalid packet is encountered.
|
54
|
-
class InvalidPacketException < Exception
|
55
|
-
end
|
56
|
-
|
57
53
|
# Exception raised when there is a problem with a type (may be unknown or
|
58
54
|
# mismatch).
|
59
55
|
class TypeException < Exception
|
@@ -64,16 +60,8 @@ module DBus
|
|
64
60
|
class IncompleteBufferException < Exception
|
65
61
|
end
|
66
62
|
|
67
|
-
# Exception raised when a method has not been implemented (yet).
|
68
|
-
class MethodNotImplemented < Exception
|
69
|
-
end
|
70
|
-
|
71
|
-
# Exception raised when a method is invoked with invalid
|
72
|
-
# parameters (wrong number or type).
|
73
|
-
class InvalidParameters < Exception
|
74
|
-
end
|
75
|
-
|
76
63
|
# Exception raised when an invalid method name is used.
|
64
|
+
# FIXME: use NameError
|
77
65
|
class InvalidMethodName < Exception
|
78
66
|
end
|
79
67
|
|