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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +344 -0
  3. data/Rakefile +21 -15
  4. data/VERSION +1 -1
  5. data/doc/Reference.md +26 -37
  6. data/examples/doc/_extract_examples +4 -4
  7. data/examples/gdbus/gdbus +40 -39
  8. data/examples/no-introspect/nm-test.rb +1 -3
  9. data/examples/no-introspect/tracker-test.rb +2 -4
  10. data/examples/rhythmbox/playpause.rb +1 -2
  11. data/examples/service/call_service.rb +0 -3
  12. data/examples/service/service_newapi.rb +3 -4
  13. data/examples/simple/call_introspect.rb +0 -3
  14. data/examples/simple/get_id.rb +1 -3
  15. data/examples/simple/properties.rb +3 -4
  16. data/examples/utils/listnames.rb +6 -7
  17. data/examples/utils/notify.rb +3 -5
  18. data/lib/dbus.rb +8 -20
  19. data/lib/dbus/auth.rb +59 -61
  20. data/lib/dbus/bus.rb +86 -97
  21. data/lib/dbus/error.rb +1 -1
  22. data/lib/dbus/export.rb +20 -18
  23. data/lib/dbus/introspect.rb +26 -28
  24. data/lib/dbus/logger.rb +1 -1
  25. data/lib/dbus/marshall.rb +72 -74
  26. data/lib/dbus/matchrule.rb +22 -26
  27. data/lib/dbus/message.rb +24 -33
  28. data/lib/dbus/message_queue.rb +30 -30
  29. data/lib/dbus/proxy_object.rb +34 -30
  30. data/lib/dbus/proxy_object_factory.rb +5 -2
  31. data/lib/dbus/proxy_object_interface.rb +10 -8
  32. data/lib/dbus/type.rb +154 -156
  33. data/lib/dbus/xml.rb +22 -16
  34. data/ruby-dbus.gemspec +15 -3
  35. data/spec/async_spec.rb +2 -4
  36. data/spec/binding_spec.rb +1 -5
  37. data/spec/bus_and_xml_backend_spec.rb +6 -9
  38. data/spec/bus_spec.rb +1 -1
  39. data/spec/byte_array_spec.rb +0 -2
  40. data/spec/err_msg_spec.rb +13 -10
  41. data/spec/introspect_xml_parser_spec.rb +2 -2
  42. data/spec/introspection_spec.rb +1 -1
  43. data/spec/main_loop_spec.rb +4 -5
  44. data/spec/property_spec.rb +0 -3
  45. data/spec/proxy_object_spec.rb +42 -0
  46. data/spec/server_robustness_spec.rb +0 -2
  47. data/spec/service_newapi.rb +51 -41
  48. data/spec/session_bus_spec.rb +6 -7
  49. data/spec/signal_spec.rb +2 -3
  50. data/spec/spec_helper.rb +28 -24
  51. data/spec/thread_safety_spec.rb +1 -2
  52. data/spec/type_spec.rb +2 -2
  53. data/spec/value_spec.rb +7 -10
  54. data/spec/variant_spec.rb +15 -16
  55. metadata +60 -3
  56. data/NEWS +0 -279
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  if ARGV[0].nil?
3
- puts "Usage: #{$0} file.md"
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 = $1
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(0755)
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 << $1 << "\n"
34
+ example << Regexp.last_match(1) << "\n"
35
35
  end
36
36
  end
37
37
  end
@@ -5,19 +5,20 @@
5
5
  # stuff.
6
6
  # -- Arnaud
7
7
 
8
- require 'dbus'
8
+ require "dbus"
9
9
  require "gtk2"
10
10
 
11
- $enable_system = false
11
+ ENABLE_SYSTEM = false
12
12
 
13
13
  class MethodCallWindow
14
14
  def initialize(pwindow, intf, meth)
15
- @intf, @meth = intf, meth
16
- @entries = Array.new
15
+ @intf = intf
16
+ @meth = meth
17
+ @entries = []
17
18
  @dialog = Gtk::Dialog.new(meth.name, pwindow,
18
- Gtk::Dialog::MODAL | Gtk::Dialog::NO_SEPARATOR,
19
- [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK],
20
- [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL])
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.on_return(m) do |retm|
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, 'D-Bus Objects')
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, 'D-Bus Objects')
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.kind_of?(DBus::Method)
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.kind_of?(DBus::Signal)
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, column)
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.to_s} ***"
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, column)
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(window, 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
- col_offset = treeview.insert_column(-1, "T", renderer, 'text' => 1)
174
- col_offset = treeview.insert_column(-1, "Name", renderer, 'text' => 0)
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, 'text' => 0)
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 $enable_system
200
+ DBus::SystemBus.instance.glibize if ENABLE_SYSTEM
200
201
 
201
- DBus::SessionBus.instance.proxy.ListNames do |msg, names|
202
+ DBus::SessionBus.instance.proxy.ListNames do |_msg, names|
202
203
  fill_treeview(DBus::SessionBus.instance, @sessiontreeview, names)
203
204
  end
204
- if $enable_system
205
- DBus::SystemBus.instance.proxy.ListNames do |msg, names|
206
- fill_treeview(DBus::SystemBus.instance, @systemtreeview, names)
207
- end
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
- unless node.object.nil?
218
- node.object.interfaces.sort.each do |ifname|
219
- subiter = model.append(iter)
220
- subiter[0] = ifname
221
- subiter[1] = node.object[ifname]
222
- end
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 not el =~ /^:/
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
- not @introspect_array.empty?
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::idle_add { introspect_services(model, bus) }
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 'dbus'
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 'dbus'
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['HOME'] + "/Desktop", ["File:Name", "File:Size"])
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 'dbus'
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 'dbus'
4
- require 'thread'
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
-
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  # find the library without external help
4
- $:.unshift File.expand_path("../../../lib", __FILE__)
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 'dbus'
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.object("/org/freedesktop/NetworkManager")
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"] = ! enabled
18
+ nm_iface["WirelessEnabled"] = !enabled
@@ -1,11 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'dbus'
3
+ require "dbus"
4
4
 
5
5
  d = if ARGV.member?("--system")
6
- DBus::SystemBus.instance
7
- else
8
- DBus::SessionBus.instance
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}" }
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'dbus'
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.service("org.freedesktop.Notifications").object("/org/freedesktop/Notifications")
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('notify.rb', 0, 'info', ARGV[0], ARGV[1], [], {}, 2000) do |ret, param|
16
+ i.Notify("notify.rb", 0, "info", ARGV[0], ARGV[1], [], {}, 2000) do |ret, param|
18
17
  end
19
-
@@ -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 = ?B
40
+ BIG_END = "B".freeze
41
41
  # Byte signifying little endianness.
42
- LIL_END = ?l
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
- LIL_END
47
- else
48
- BIG_END
49
- end
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