ruby-dbus 0.17.0 → 0.18.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +15 -0
  3. data/README.md +1 -1
  4. data/Rakefile +3 -11
  5. data/VERSION +1 -1
  6. data/doc/Reference.md +9 -2
  7. data/examples/doc/_extract_examples +2 -0
  8. data/examples/gdbus/gdbus +11 -5
  9. data/examples/no-introspect/nm-test.rb +2 -0
  10. data/examples/no-introspect/tracker-test.rb +3 -1
  11. data/examples/rhythmbox/playpause.rb +2 -1
  12. data/examples/service/call_service.rb +1 -0
  13. data/examples/service/service_newapi.rb +1 -1
  14. data/examples/simple/call_introspect.rb +1 -0
  15. data/examples/simple/get_id.rb +2 -1
  16. data/examples/simple/properties.rb +2 -0
  17. data/examples/utils/listnames.rb +1 -0
  18. data/examples/utils/notify.rb +1 -0
  19. data/lib/dbus/api_options.rb +9 -0
  20. data/lib/dbus/auth.rb +12 -7
  21. data/lib/dbus/bus.rb +114 -70
  22. data/lib/dbus/bus_name.rb +12 -8
  23. data/lib/dbus/error.rb +4 -2
  24. data/lib/dbus/introspect.rb +29 -18
  25. data/lib/dbus/logger.rb +3 -1
  26. data/lib/dbus/marshall.rb +118 -86
  27. data/lib/dbus/matchrule.rb +16 -16
  28. data/lib/dbus/message.rb +40 -27
  29. data/lib/dbus/message_queue.rb +10 -5
  30. data/lib/dbus/object.rb +34 -13
  31. data/lib/dbus/object_path.rb +9 -5
  32. data/lib/dbus/proxy_object.rb +18 -4
  33. data/lib/dbus/proxy_object_factory.rb +11 -7
  34. data/lib/dbus/proxy_object_interface.rb +26 -22
  35. data/lib/dbus/type.rb +41 -34
  36. data/lib/dbus/xml.rb +28 -17
  37. data/lib/dbus.rb +7 -7
  38. data/ruby-dbus.gemspec +4 -2
  39. data/spec/async_spec.rb +2 -0
  40. data/spec/binding_spec.rb +2 -0
  41. data/spec/bus_and_xml_backend_spec.rb +2 -0
  42. data/spec/bus_driver_spec.rb +2 -0
  43. data/spec/bus_name_spec.rb +3 -1
  44. data/spec/bus_spec.rb +2 -0
  45. data/spec/byte_array_spec.rb +2 -0
  46. data/spec/client_robustness_spec.rb +4 -2
  47. data/spec/err_msg_spec.rb +2 -0
  48. data/spec/introspect_xml_parser_spec.rb +2 -0
  49. data/spec/introspection_spec.rb +2 -0
  50. data/spec/main_loop_spec.rb +2 -0
  51. data/spec/node_spec.rb +23 -0
  52. data/spec/object_path_spec.rb +2 -0
  53. data/spec/property_spec.rb +11 -2
  54. data/spec/proxy_object_spec.rb +2 -0
  55. data/spec/server_robustness_spec.rb +2 -0
  56. data/spec/server_spec.rb +2 -0
  57. data/spec/service_newapi.rb +19 -4
  58. data/spec/session_bus_spec.rb +3 -1
  59. data/spec/session_bus_spec_manual.rb +2 -0
  60. data/spec/signal_spec.rb +2 -0
  61. data/spec/spec_helper.rb +5 -3
  62. data/spec/thread_safety_spec.rb +2 -0
  63. data/spec/type_spec.rb +2 -0
  64. data/spec/value_spec.rb +16 -1
  65. data/spec/variant_spec.rb +4 -2
  66. metadata +8 -7
data/ruby-dbus.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- ruby -*-
2
4
  require "rubygems"
3
5
 
@@ -18,7 +20,7 @@ GEMSPEC = Gem::Specification.new do |s|
18
20
  ]
19
21
  s.require_path = "lib"
20
22
 
21
- s.required_ruby_version = ">= 2.1.0"
23
+ s.required_ruby_version = ">= 2.4.0"
22
24
 
23
25
  s.add_dependency "rexml"
24
26
 
@@ -28,7 +30,7 @@ GEMSPEC = Gem::Specification.new do |s|
28
30
  s.add_development_dependency "packaging_rake_tasks"
29
31
  s.add_development_dependency "rake"
30
32
  s.add_development_dependency "rspec", "~> 3"
31
- s.add_development_dependency "rubocop", "= 0.50.0"
33
+ s.add_development_dependency "rubocop", "= 1.0"
32
34
  s.add_development_dependency "simplecov"
33
35
  s.add_development_dependency "simplecov-lcov"
34
36
  end
data/spec/async_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the binding of dbus concepts to ruby concepts
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
data/spec/binding_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the binding of dbus concepts to ruby concepts
3
5
  require_relative "spec_helper"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the bus class
3
5
  require_relative "spec_helper"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -17,7 +19,7 @@ describe DBus::BusName do
17
19
  expect(described_class.valid?("Empty.Last.Component.")).to be_falsey
18
20
  expect(described_class.valid?("Invalid.Ch@r@cter")).to be_falsey
19
21
  expect(described_class.valid?("/Invalid-Character")).to be_falsey
20
- long_name = "a." + ("long." * 100) + "name"
22
+ long_name = "a.#{"long." * 100}name"
21
23
  expect(described_class.valid?(long_name)).to be_falsey
22
24
  expect(described_class.valid?("org.7_zip.Archiver")).to be_falsey
23
25
  end
data/spec/bus_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the bus class
3
5
  require_relative "spec_helper"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
 
4
6
  require "dbus"
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test that a client survives various error cases
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
@@ -12,14 +14,14 @@ describe "ClientRobustnessTest" do
12
14
  context "when the bus name is invalid" do
13
15
  it "tells the user the bus name is invalid" do
14
16
  # user mistake, should be "org.ruby.service"
15
- expect { @bus.service(".org.ruby.service") }.to raise_error(DBus::Error)
17
+ expect { @bus.service(".org.ruby.service") }.to raise_error(DBus::Error, /Invalid bus name/)
16
18
  end
17
19
  end
18
20
 
19
21
  context "when the object path is invalid" do
20
22
  it "tells the user the path is invalid" do
21
23
  # user mistake, should be "/org/ruby/MyInstance"
22
- expect { @svc.object("org.ruby.MyInstance") }.to raise_error(DBus::Error)
24
+ expect { @svc.object("org.ruby.MyInstance") }.to raise_error(DBus::Error, /Invalid object path/)
23
25
  end
24
26
  end
25
27
  end
data/spec/err_msg_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # should report it missing on org.ruby.SampleInterface
3
5
  # (on object...) instead of on DBus::Proxy::ObjectInterface
4
6
  require_relative "spec_helper"
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the main loop
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
data/spec/node_spec.rb ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "spec_helper"
5
+ require "dbus"
6
+
7
+ describe DBus::Node do
8
+ describe "#inspect" do
9
+ # the behavior needs improvement
10
+ it "shows the node, poorly" do
11
+ parent = described_class.new("parent")
12
+ parent.object = DBus::Object.new("/parent")
13
+
14
+ 3.times do |i|
15
+ child_name = "child#{i}"
16
+ child = described_class.new(child_name)
17
+ parent[child_name] = child
18
+ end
19
+
20
+ expect(parent.inspect).to match(/<DBus::Node [0-9a-f]+ {child0 => {},child1 => {},child2 => {}}>/)
21
+ end
22
+ end
23
+ end
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -50,7 +52,7 @@ describe "PropertyTest" do
50
52
 
51
53
  it "tests get all" do
52
54
  all = @iface.all_properties
53
- expect(all.keys.sort).to eq(["ReadMe", "ReadOrWriteMe"])
55
+ expect(all.keys.sort).to eq(["MyStruct", "ReadMe", "ReadOrWriteMe"])
54
56
  end
55
57
 
56
58
  it "tests get all on a V1 object" do
@@ -58,7 +60,7 @@ describe "PropertyTest" do
58
60
  iface = obj["org.ruby.SampleInterface"]
59
61
 
60
62
  all = iface.all_properties
61
- expect(all.keys.sort).to eq(["ReadMe", "ReadOrWriteMe"])
63
+ expect(all.keys.sort).to eq(["MyStruct", "ReadMe", "ReadOrWriteMe"])
62
64
  end
63
65
 
64
66
  it "tests unknown property reading" do
@@ -114,4 +116,11 @@ describe "PropertyTest" do
114
116
 
115
117
  expect(received["ReadOrWriteMe"]).to eq("VALUE")
116
118
  end
119
+
120
+ context "a struct-typed property" do
121
+ it "gets read as a struct, not an array (#97)" do
122
+ struct = @iface["MyStruct"]
123
+ expect(struct).to be_frozen
124
+ end
125
+ end
117
126
  end
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test that a server survives various error cases
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
data/spec/server_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test that a server survives various error cases
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
@@ -1,21 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
3
 
4
4
  require_relative "spec_helper"
5
5
  SimpleCov.command_name "Service Tests" if Object.const_defined? "SimpleCov"
6
6
  # find the library without external help
7
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
7
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
8
8
 
9
9
  require "dbus"
10
10
 
11
- PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties".freeze
11
+ PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties"
12
12
 
13
13
  class Test < DBus::Object
14
- INTERFACE = "org.ruby.SampleInterface".freeze
14
+ Point2D = Struct.new(:x, :y)
15
+
16
+ INTERFACE = "org.ruby.SampleInterface"
15
17
  def initialize(path)
16
18
  super path
17
19
  @read_me = "READ ME"
18
20
  @read_or_write_me = "READ OR WRITE ME"
21
+ @my_struct = ["three", "strings", "in a struct"].freeze
19
22
  end
20
23
 
21
24
  # Create an interface aggregating all upcoming dbus_method defines.
@@ -60,6 +63,16 @@ class Test < DBus::Object
60
63
  [bytes]
61
64
  end
62
65
 
66
+ dbus_method :Coordinates, "out coords:(dd)" do
67
+ coords = [3.0, 4.0].freeze
68
+ [coords]
69
+ end
70
+
71
+ dbus_method :Coordinates2, "out coords:(dd)" do
72
+ coords = Point2D.new(5.0, 12.0)
73
+ [coords]
74
+ end
75
+
63
76
  # Properties:
64
77
  # ReadMe:string, returns "READ ME" at first, then what WriteMe received
65
78
  # WriteMe:string
@@ -79,6 +92,8 @@ class Test < DBus::Object
79
92
  raise "Something failed"
80
93
  end
81
94
  dbus_reader :explosive, "s"
95
+
96
+ dbus_attr_reader :my_struct, "(sss)"
82
97
  end
83
98
 
84
99
  # closing and reopening the same interface
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
@@ -23,7 +25,7 @@ describe DBus::ASessionBus do
23
25
 
24
26
  before do
25
27
  # mocks of files for address_from_file method
26
- machine_id_path = File.expand_path("/etc/machine-id", __FILE__)
28
+ machine_id_path = File.expand_path("/etc/machine-id", __dir__)
27
29
  expect(Dir).to receive(:[]).with(any_args) { [machine_id_path] }
28
30
  expect(File).to receive(:read).with(machine_id_path) { "baz" }
29
31
  expect(File).to receive(:exist?).with(session_bus_file_path) { true }
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
data/spec/signal_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test the signal handlers
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  coverage = if ENV["COVERAGE"]
2
4
  ENV["COVERAGE"] == "true"
3
5
  else
@@ -7,7 +9,7 @@ coverage = if ENV["COVERAGE"]
7
9
 
8
10
  if coverage
9
11
  require "simplecov"
10
- SimpleCov.root File.expand_path("../..", __FILE__)
12
+ SimpleCov.root File.expand_path("..", __dir__)
11
13
 
12
14
  # do not cover specs
13
15
  SimpleCov.add_filter "_spec.rb"
@@ -34,7 +36,7 @@ if coverage
34
36
  end
35
37
  end
36
38
 
37
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
39
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
38
40
 
39
41
  if Object.const_defined? "RSpec"
40
42
  # http://betterspecs.org/#expect
@@ -48,7 +50,7 @@ end
48
50
  require "tempfile"
49
51
  require "timeout"
50
52
 
51
- TOPDIR = File.expand_path("../..", __FILE__)
53
+ TOPDIR = File.expand_path("..", __dir__)
52
54
 
53
55
  # path of config file for a private bus
54
56
  def config_file_path
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test thread safety
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
data/spec/type_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  require_relative "spec_helper"
3
5
  require "dbus"
4
6
 
data/spec/value_spec.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
- # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
3
4
  require_relative "spec_helper"
4
5
  require "dbus"
5
6
 
@@ -91,4 +92,18 @@ describe "ValueTest" do
91
92
  it "aligns short integers correctly" do
92
93
  expect(@obj.i16_plus(10, -30)[0]).to eq(-20)
93
94
  end
95
+
96
+ context "structs" do
97
+ it "they are returned as FROZEN arrays" do
98
+ struct = @obj.Coordinates[0]
99
+ expect(struct).to be_an(Array)
100
+ expect(struct).to be_frozen
101
+ end
102
+
103
+ it "they are returned also from structs" do
104
+ struct = @obj.Coordinates2[0]
105
+ expect(struct).to be_an(Array)
106
+ expect(struct).to be_frozen
107
+ end
108
+ end
94
109
  end
data/spec/variant_spec.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rspec
2
+ # frozen_string_literal: true
3
+
2
4
  # Test marshalling variants according to ruby types
3
5
  require_relative "spec_helper"
4
6
  require "dbus"
@@ -9,8 +11,8 @@ describe "VariantTest" do
9
11
  @svc = @bus.service("org.ruby.service")
10
12
  end
11
13
 
12
- def make_variant(a)
13
- DBus::PacketMarshaller.make_variant(a)
14
+ def make_variant(val)
15
+ DBus::PacketMarshaller.make_variant(val)
14
16
  end
15
17
 
16
18
  it "tests make variant scalar" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-dbus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruby DBus Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-11 00:00:00.000000000 Z
11
+ date: 2022-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rexml
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 0.50.0
75
+ version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 0.50.0
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +171,7 @@ files:
171
171
  - spec/introspect_xml_parser_spec.rb
172
172
  - spec/introspection_spec.rb
173
173
  - spec/main_loop_spec.rb
174
+ - spec/node_spec.rb
174
175
  - spec/object_path_spec.rb
175
176
  - spec/property_spec.rb
176
177
  - spec/proxy_object_spec.rb
@@ -201,12 +202,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
202
  requirements:
202
203
  - - ">="
203
204
  - !ruby/object:Gem::Version
204
- version: 2.1.0
205
+ version: 2.4.0
205
206
  required_rubygems_version: !ruby/object:Gem::Requirement
206
207
  requirements:
207
- - - ">="
208
+ - - ">"
208
209
  - !ruby/object:Gem::Version
209
- version: '0'
210
+ version: 1.3.1
210
211
  requirements: []
211
212
  rubyforge_project:
212
213
  rubygems_version: 2.7.6.3