ruby-dbus 0.22.1 → 0.23.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +38 -0
  3. data/VERSION +1 -1
  4. data/doc/Reference.md +5 -5
  5. data/examples/no-bus/pulseaudio.rb +50 -0
  6. data/examples/service/complex-property.rb +2 -2
  7. data/examples/service/service_newapi.rb +2 -2
  8. data/lib/dbus/bus.rb +48 -694
  9. data/lib/dbus/connection.rb +350 -0
  10. data/lib/dbus/logger.rb +3 -2
  11. data/lib/dbus/main.rb +66 -0
  12. data/lib/dbus/message.rb +6 -8
  13. data/lib/dbus/node_tree.rb +105 -0
  14. data/lib/dbus/object.rb +28 -9
  15. data/lib/dbus/object_manager.rb +6 -3
  16. data/lib/dbus/object_server.rb +149 -0
  17. data/lib/dbus/org.freedesktop.DBus.xml +97 -0
  18. data/lib/dbus/proxy_object.rb +4 -4
  19. data/lib/dbus/proxy_service.rb +107 -0
  20. data/lib/dbus.rb +10 -8
  21. data/ruby-dbus.gemspec +1 -1
  22. data/spec/bus_connection_spec.rb +80 -0
  23. data/spec/connection_spec.rb +37 -0
  24. data/spec/coverage_helper.rb +39 -0
  25. data/spec/dbus_spec.rb +22 -0
  26. data/spec/main_loop_spec.rb +14 -0
  27. data/spec/message_spec.rb +21 -0
  28. data/spec/mock-service/cockpit-dbustests.rb +29 -0
  29. data/spec/mock-service/com.redhat.Cockpit.DBusTests.xml +180 -0
  30. data/spec/mock-service/org.ruby.service.service +4 -0
  31. data/spec/mock-service/org.rubygems.ruby_dbus.DBusTests.service +4 -0
  32. data/spec/{service_newapi.rb → mock-service/spaghetti-monster.rb} +21 -10
  33. data/spec/node_spec.rb +1 -5
  34. data/spec/object_server_spec.rb +138 -0
  35. data/spec/object_spec.rb +46 -0
  36. data/spec/{bus_driver_spec.rb → proxy_service_spec.rb} +13 -8
  37. data/spec/spec_helper.rb +9 -45
  38. data/spec/thread_safety_spec.rb +9 -11
  39. data/spec/tools/dbus-launch-simple +4 -1
  40. data/spec/tools/dbus-limited-session.conf +3 -0
  41. data/spec/tools/test_env +26 -6
  42. metadata +24 -10
  43. data/spec/server_spec.rb +0 -55
  44. data/spec/service_spec.rb +0 -18
  45. data/spec/tools/test_server +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9faf3489c1ee5baf70dbb2204b777c577d6237554f072fa44bfdbee49c34e06d
4
- data.tar.gz: '08c81cc0acde47f38e19b107222692253fe1b512c7f1bb5698e074c63601b85b'
3
+ metadata.gz: c671b06e04452129a899cd4b7877cf43f9c05b8e7bc6597e75bc460e250c97e7
4
+ data.tar.gz: 18f660c6e5804fd133cf8351d801f8e0d4e332f1473cc390bedf77341d71845d
5
5
  SHA512:
6
- metadata.gz: bf539a91b1420631d7614b83636502f4c41e4ff7f137fb2c54eff88bc6b2810bb53efa14cadd8a5bb28b71864abbb0cd35451202c60f83a78b3e58816aa6fb67
7
- data.tar.gz: aa1e225fe3177c63761d8e487b70a688b45330e4f115aa52753fc08f4f194949a206da8e1d102c3f55f49d169a2688bed67d5497639e3da9652f887f3bad5768
6
+ metadata.gz: 5cff2ab01f4db3d069a73b28f46cf861dcc81302ed239a7fc4332f46a7583b2394d679d5d73ab13f080b674e46f8961c89fa3fccc58ce9043d0bd33c4c2d02c4
7
+ data.tar.gz: 495c060e5161c2c5267b723598d3185b14d4c6517e41504f5b49971d3c355acec1ee3ab6285b7796bb7aa8cb61dfb5bd24535a2613a9f22cfb80f65ec8a1cf49
data/NEWS.md CHANGED
@@ -2,6 +2,44 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## Ruby D-Bus 0.23.0.beta2 - 2023-06-23
6
+
7
+ License:
8
+ * clarified to be LGPL-2.1-or-later
9
+
10
+ API:
11
+ * DBus::Object#object_server replaces @service (which still works) and the short-lived
12
+ @connection
13
+ * ObjectServer#export will raise if the path is already taken by an object
14
+ * ObjectServer#unexport now also accepts an object path
15
+ * Connection#object_server can export objects even without requesting any
16
+ service name ([#49][], in beta1 already).
17
+ * Add PeerConnection for connections without a bus, useful for PulseAudio.
18
+ Fix listening for signals there ([#44][]).
19
+ * Moved from Connection to BusConnection: #unique_name, #proxy, #service.
20
+ Call send_hello in BusConnection#initialize already.
21
+
22
+ Bug fixes:
23
+ * Fixed a refactoring crasher bug in ProxyService#introspect (oops).
24
+ * Fix crash on #unexport of /child_of_root or even /
25
+
26
+ [#44]: https://github.com/mvidner/ruby-dbus/issues/44
27
+ [#49]: https://github.com/mvidner/ruby-dbus/issues/49
28
+
29
+ ## Ruby D-Bus 0.23.0.beta1 - 2023-06-05
30
+
31
+ Bug fixes:
32
+ * A service can now have more than one name ([#69][]).
33
+ Connection#request_service is deprecated in favor of Connection#object_server
34
+ and BusConnection#request_name
35
+
36
+ [#69]: https://github.com/mvidner/ruby-dbus/issues/69
37
+
38
+ API:
39
+ * Remove Service, splitting it into ProxyService and ObjectServer
40
+ * Split off BusConnection from Connection
41
+ * DBus::Object @service replaced by @connection
42
+
5
43
  ## Ruby D-Bus 0.22.1 - 2023-05-17
6
44
 
7
45
  Bug fixes:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.22.1
1
+ 0.23.0.beta2
data/doc/Reference.md CHANGED
@@ -23,8 +23,8 @@ is simply "dbus"
23
23
  #### Calling Methods
24
24
 
25
25
  1. {DBus.session_bus Connect to the session bus};
26
- 2. {DBus::Connection#[] get the screensaver service}
27
- 3. {DBus::Service#[] and its screensaver object}.
26
+ 2. {DBus::BusConnection#[] get the screensaver service}
27
+ 3. {DBus::ProxyService#[] and its screensaver object}.
28
28
  4. Call one of its methods in a loop, solving [xkcd#196](http://xkcd.com/196).
29
29
 
30
30
   
@@ -58,7 +58,7 @@ a method proxy always returned an array of values. This was to
58
58
  accomodate the rare cases of a DBus method specifying more than one
59
59
  *out* parameter. For compatibility, the behavior is preserved if you
60
60
  construct a {DBus::ProxyObject} with {DBus::ApiOptions::A0},
61
- which is what {DBus::Service#object} does.
61
+ which is what {DBus::ProxyService#object} does.
62
62
 
63
63
  For nearly all methods you used `Method[0]` or
64
64
  `Method.first`
@@ -340,8 +340,8 @@ for overriding this.
340
340
  obj = Note.new("/net/vidner/Example/Properties")
341
341
 
342
342
  bus = DBus::SessionBus.instance
343
- service = bus.request_service("net.vidner.Example")
344
- service.export(obj)
343
+ bus.object_server.export(obj)
344
+ bus.request_name("net.vidner.Example")
345
345
 
346
346
  main = DBus::Main.new
347
347
  main << bus
@@ -0,0 +1,50 @@
1
+ #! /usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # find the library without external help
5
+ $LOAD_PATH.unshift File.expand_path("../../lib", __dir__)
6
+
7
+ require "dbus"
8
+
9
+ def peer_address
10
+ bus = DBus::SessionBus.instance
11
+ svc = bus["org.PulseAudio1"]
12
+ obj = svc["/org/pulseaudio/server_lookup1"]
13
+ ifc = obj["org.PulseAudio.ServerLookup1"]
14
+ adr = ifc["Address"]
15
+ puts "PA address: #{adr}"
16
+ adr
17
+ end
18
+
19
+ address = peer_address
20
+ begin
21
+ conn = DBus::PeerConnection.new(address)
22
+ rescue Errno::ENOENT
23
+ puts "Address exists but could not connect; telling PA to load the protocol"
24
+ system "pactl load-module module-dbus-protocol"
25
+ conn = DBus::PeerConnection.new(address)
26
+ end
27
+ no_svc = conn.peer_service
28
+ obj = no_svc["/org/pulseaudio/core1"]
29
+ ifc = obj["org.PulseAudio.Core1"]
30
+ puts "PA version: #{ifc["Version"]}"
31
+
32
+ puts "Waiting for volume changes, try adjusting it. Ctrl-C to exit."
33
+
34
+ vol_ifc = "org.PulseAudio.Core1.Device"
35
+ vol_member = "VolumeUpdated"
36
+ # PA needs explicit enabling of signals
37
+ ifc.ListenForSignal("#{vol_ifc}.#{vol_member}", [])
38
+
39
+ match_rule = DBus::MatchRule.new
40
+ match_rule.interface = vol_ifc
41
+ match_rule.member = vol_member
42
+ conn.add_match(match_rule) do |msg|
43
+ # a single argument that is an array
44
+ volumes = msg.params[0]
45
+ puts "VolumeUpdated: #{volumes.join(", ")}"
46
+ end
47
+
48
+ loop = DBus::Main.new
49
+ loop << conn
50
+ loop.run
@@ -16,6 +16,6 @@ class Test < DBus::Object
16
16
  end
17
17
 
18
18
  bus = DBus::SessionBus.instance
19
- svc = bus.request_service("net.vidner.Scratch")
20
- svc.export(Test.new("/net/vidner/Scratch"))
19
+ bus.object_server.export(Test.new("/net/vidner/Scratch"))
20
+ bus.request_name("net.vidner.Scratch")
21
21
  DBus::Main.new.tap { |m| m << bus }.run
@@ -31,9 +31,9 @@ class Test < DBus::Object
31
31
  end
32
32
 
33
33
  bus = DBus::SessionBus.instance
34
- service = bus.request_service("org.ruby.service")
35
34
  myobj = Test.new("/org/ruby/MyInstance")
36
- service.export(myobj)
35
+ bus.object_server.export(myobj)
36
+ bus.request_name("org.ruby.service")
37
37
 
38
38
  Thread.new do
39
39
  i = 0