ruby-dbus 0.18.0.beta6 → 0.18.0.beta7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/NEWS.md +12 -0
- data/VERSION +1 -1
- data/doc/Reference.md +13 -4
- data/lib/dbus/data.rb +39 -5
- data/lib/dbus/introspect.rb +13 -3
- data/lib/dbus/proxy_object_factory.rb +2 -0
- data/lib/dbus/proxy_object_interface.rb +37 -9
- data/lib/dbus/type.rb +2 -1
- data/lib/dbus/xml.rb +4 -0
- data/spec/data_spec.rb +44 -8
- data/spec/property_spec.rb +32 -2
- data/spec/service_newapi.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56815cd47f001f19c6d74cc02f0f1017e6e17d8df44e0949f020e4932adbc622
|
4
|
+
data.tar.gz: 4aeda5f0c4972671adf6ae24554aa08ce5e6208846f87f5793562e73b8e7d632
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2432d8ada23410027d00c7995c7514e3e927430844cf037fa8496509c47b10b4f5a431335762206bfc9966724d6d84014f57d9bbe31613bfd253145e25b82b77
|
7
|
+
data.tar.gz: c1b480afebcdaf53b6fbe084f6150b7c9758d1329a207b4941dd8256cbc3786d42341564b3b8220d9e897e7487d281fede15eab8a31d81741582272519e1ac19
|
data/NEWS.md
CHANGED
@@ -2,6 +2,18 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## Ruby D-Bus 0.18.0.beta7 - 2022-05-29
|
6
|
+
|
7
|
+
API:
|
8
|
+
* DBus.variant(type, value) is deprecated in favor of
|
9
|
+
Data::Variant.new(value, member_type:)
|
10
|
+
|
11
|
+
Bug fixes:
|
12
|
+
* Client-side properties: When calling Properties.Set in
|
13
|
+
ProxyObjectInterface#[]=, use the correct type ([#108][]).
|
14
|
+
|
15
|
+
[#108]: https://github.com/mvidner/ruby-dbus/issues/108
|
16
|
+
|
5
17
|
## Ruby D-Bus 0.18.0.beta6 - 2022-05-25
|
6
18
|
|
7
19
|
API:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.18.0.
|
1
|
+
0.18.0.beta7
|
data/doc/Reference.md
CHANGED
@@ -166,12 +166,21 @@ D-Bus has stricter typing than Ruby, so the library must decide
|
|
166
166
|
which D-Bus type to choose. Most of the time the choice is dictated
|
167
167
|
by the D-Bus signature.
|
168
168
|
|
169
|
+
For exact representation of D-Bus data types, use subclasses
|
170
|
+
of {DBus::Data::Base}, such as {DBus::Data::Int16} or {DBus::Data::UInt64}.
|
171
|
+
|
169
172
|
##### Variants
|
170
173
|
|
171
174
|
If the signature expects a Variant
|
172
175
|
(which is the case for all Properties!) then an explicit mechanism is needed.
|
173
176
|
|
174
|
-
1.
|
177
|
+
1. Any {DBus::Data::Base}.
|
178
|
+
|
179
|
+
2. A {DBus::Data::Variant} made by {DBus.variant}(signature, value).
|
180
|
+
(Formerly this produced the type+value pair below, now it is just an alias
|
181
|
+
to the Variant constructor.)
|
182
|
+
|
183
|
+
3. A pair [{DBus::Type}, value] specifies to marshall *value* as
|
175
184
|
that specified type.
|
176
185
|
The pair can be produced by {DBus.variant}(signature, value) which
|
177
186
|
gives the same result as [{DBus.type}(signature), value].
|
@@ -181,13 +190,13 @@ If the signature expects a Variant
|
|
181
190
|
|
182
191
|
`foo_i["Bar"] = DBus.variant("au", [0, 1, 1, 2, 3, 5, 8])`
|
183
192
|
|
184
|
-
|
193
|
+
4. Other values are tried to fit one of these:
|
185
194
|
Boolean, Double, Array of Variants, Hash of String keyed Variants,
|
186
195
|
String, Int32, Int64.
|
187
196
|
|
188
|
-
|
197
|
+
5. **Deprecated:** A pair [String, value], where String is a valid
|
189
198
|
signature of a single complete type, marshalls value as that
|
190
|
-
type. This will hit you when you rely on method (
|
199
|
+
type. This will hit you when you rely on method (4) but happen to have
|
191
200
|
a particular string value in an array.
|
192
201
|
|
193
202
|
##### Structs
|
data/lib/dbus/data.rb
CHANGED
@@ -601,8 +601,10 @@ module DBus
|
|
601
601
|
|
602
602
|
typed_value = case value
|
603
603
|
when Data::Array
|
604
|
-
|
605
|
-
|
604
|
+
unless value.type == type
|
605
|
+
raise ArgumentError,
|
606
|
+
"Specified type is #{type.inspect} but value type is #{value.type.inspect}"
|
607
|
+
end
|
606
608
|
|
607
609
|
value.exact_value
|
608
610
|
else
|
@@ -651,8 +653,10 @@ module DBus
|
|
651
653
|
|
652
654
|
typed_value = case value
|
653
655
|
when self.class
|
654
|
-
|
655
|
-
|
656
|
+
unless value.type == type
|
657
|
+
raise ArgumentError,
|
658
|
+
"Specified type is #{type.inspect} but value type is #{value.type.inspect}"
|
659
|
+
end
|
656
660
|
|
657
661
|
value.exact_value
|
658
662
|
else
|
@@ -751,13 +755,19 @@ module DBus
|
|
751
755
|
# @return [Type]
|
752
756
|
attr_reader :member_type
|
753
757
|
|
758
|
+
# Determine the type of *value*
|
759
|
+
# @param value [::Object]
|
760
|
+
# @return [Type]
|
761
|
+
# @api private
|
762
|
+
# See also {PacketMarshaller.make_variant}
|
754
763
|
def self.guess_type(value)
|
755
764
|
sct, = PacketMarshaller.make_variant(value)
|
756
765
|
DBus.type(sct)
|
757
766
|
end
|
758
767
|
|
759
|
-
# @param member_type [Type,nil]
|
768
|
+
# @param member_type [SingleCompleteType,Type,nil]
|
760
769
|
def initialize(value, member_type:)
|
770
|
+
member_type = Type::Factory.make_type(member_type) if member_type
|
761
771
|
# TODO: validate that the given *member_type* matches *value*
|
762
772
|
case value
|
763
773
|
when Data::Variant
|
@@ -775,6 +785,30 @@ module DBus
|
|
775
785
|
end
|
776
786
|
super(value)
|
777
787
|
end
|
788
|
+
|
789
|
+
# Internal helpers to keep the {DBus.variant} method working.
|
790
|
+
# Formerly it returned just a pair of [DBus.type(string_type), value]
|
791
|
+
# so let's provide [0], [1], .first, .last
|
792
|
+
def [](index)
|
793
|
+
case index
|
794
|
+
when 0
|
795
|
+
member_type
|
796
|
+
when 1
|
797
|
+
value
|
798
|
+
else
|
799
|
+
raise ArgumentError, "DBus.variant can only be indexed with 0 or 1, seen #{index.inspect}"
|
800
|
+
end
|
801
|
+
end
|
802
|
+
|
803
|
+
# @see #[]
|
804
|
+
def first
|
805
|
+
self[0]
|
806
|
+
end
|
807
|
+
|
808
|
+
# @see #[]
|
809
|
+
def last
|
810
|
+
self[1]
|
811
|
+
end
|
778
812
|
end
|
779
813
|
|
780
814
|
consts = constants.map { |c_sym| const_get(c_sym) }
|
data/lib/dbus/introspect.rb
CHANGED
@@ -238,19 +238,20 @@ module DBus
|
|
238
238
|
# An (exported) property
|
239
239
|
# https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-properties
|
240
240
|
class Property
|
241
|
-
# @return [
|
241
|
+
# @return [Symbol] The name of the property, for example FooBar.
|
242
242
|
attr_reader :name
|
243
243
|
# @return [SingleCompleteType]
|
244
244
|
attr_reader :type
|
245
245
|
# @return [Symbol] :read :write or :readwrite
|
246
246
|
attr_reader :access
|
247
247
|
|
248
|
-
# @return [Symbol] What to call at Ruby side.
|
248
|
+
# @return [Symbol,nil] What to call at Ruby side.
|
249
249
|
# (Always without the trailing `=`)
|
250
|
+
# It is `nil` IFF representing a client-side proxy.
|
250
251
|
attr_reader :ruby_name
|
251
252
|
|
252
253
|
def initialize(name, type, access, ruby_name:)
|
253
|
-
@name = name
|
254
|
+
@name = name.to_sym
|
254
255
|
@type = type
|
255
256
|
@access = access
|
256
257
|
@ruby_name = ruby_name
|
@@ -270,5 +271,14 @@ module DBus
|
|
270
271
|
def to_xml
|
271
272
|
" <property type=\"#{@type}\" name=\"#{@name}\" access=\"#{@access}\"/>\n"
|
272
273
|
end
|
274
|
+
|
275
|
+
# @param xml_node [AbstractXML::Node]
|
276
|
+
# @return [Property]
|
277
|
+
def self.from_xml(xml_node)
|
278
|
+
name = xml_node["name"].to_sym
|
279
|
+
type = xml_node["type"]
|
280
|
+
access = xml_node["access"].to_sym
|
281
|
+
new(name, type, access, ruby_name: nil)
|
282
|
+
end
|
273
283
|
end
|
274
284
|
end
|
@@ -29,11 +29,13 @@ module DBus
|
|
29
29
|
# @param pobj [ProxyObject]
|
30
30
|
# @param xml [String]
|
31
31
|
def self.introspect_into(pobj, xml)
|
32
|
+
# intfs [Array<Interface>], subnodes [Array<String>]
|
32
33
|
intfs, pobj.subnodes = IntrospectXMLParser.new(xml).parse
|
33
34
|
intfs.each do |i|
|
34
35
|
poi = ProxyObjectInterface.new(pobj, i.name)
|
35
36
|
i.methods.each_value { |m| poi.define(m) }
|
36
37
|
i.signals.each_value { |s| poi.define(s) }
|
38
|
+
i.properties.each_value { |p| poi.define(p) }
|
37
39
|
pobj[i.name] = poi
|
38
40
|
end
|
39
41
|
pobj.introspected = true
|
@@ -15,13 +15,16 @@ module DBus
|
|
15
15
|
# A class similar to the normal Interface used as a proxy for remote
|
16
16
|
# object interfaces.
|
17
17
|
class ProxyObjectInterface
|
18
|
-
#
|
19
|
-
|
20
|
-
#
|
21
|
-
|
22
|
-
#
|
18
|
+
# @return [Hash{String => DBus::Method}]
|
19
|
+
attr_reader :methods
|
20
|
+
# @return [Hash{String => Signal}]
|
21
|
+
attr_reader :signals
|
22
|
+
# @return [Hash{Symbol => Property}]
|
23
|
+
attr_reader :properties
|
24
|
+
|
25
|
+
# @return [ProxyObject] The proxy object to which this interface belongs.
|
23
26
|
attr_reader :object
|
24
|
-
# The name of the interface.
|
27
|
+
# @return [String] The name of the interface.
|
25
28
|
attr_reader :name
|
26
29
|
|
27
30
|
# Creates a new proxy interface for the given proxy _object_
|
@@ -31,6 +34,7 @@ module DBus
|
|
31
34
|
@name = name
|
32
35
|
@methods = {}
|
33
36
|
@signals = {}
|
37
|
+
@properties = {}
|
34
38
|
end
|
35
39
|
|
36
40
|
# Returns the string representation of the interface (the name).
|
@@ -81,13 +85,21 @@ module DBus
|
|
81
85
|
@signals[sig.name] = sig
|
82
86
|
end
|
83
87
|
|
88
|
+
# @param prop [Property]
|
89
|
+
def define_property_from_descriptor(prop)
|
90
|
+
@properties[prop.name] = prop
|
91
|
+
end
|
92
|
+
|
84
93
|
# Defines a signal or method based on the descriptor _ifc_el_.
|
94
|
+
# @param ifc_el [DBus::Method,Signal,Property]
|
85
95
|
def define(ifc_el)
|
86
96
|
case ifc_el
|
87
97
|
when Method
|
88
98
|
define_method_from_descriptor(ifc_el)
|
89
99
|
when Signal
|
90
100
|
define_signal_from_descriptor(ifc_el)
|
101
|
+
when Property
|
102
|
+
define_property_from_descriptor(ifc_el)
|
91
103
|
end
|
92
104
|
end
|
93
105
|
|
@@ -129,10 +141,26 @@ module DBus
|
|
129
141
|
end
|
130
142
|
|
131
143
|
# Write a property.
|
132
|
-
# @param
|
144
|
+
# @param property_name [String]
|
133
145
|
# @param value [Object]
|
134
|
-
def []=(
|
135
|
-
|
146
|
+
def []=(property_name, value)
|
147
|
+
property = properties[property_name.to_sym]
|
148
|
+
if !property
|
149
|
+
raise DBus.error("org.freedesktop.DBus.Error.UnknownProperty"),
|
150
|
+
"Property '#{name}.#{property_name}' (on object '#{object.path}') not found"
|
151
|
+
end
|
152
|
+
|
153
|
+
case value
|
154
|
+
# accommodate former need to explicitly make a variant with the right type
|
155
|
+
when Data::Variant
|
156
|
+
variant = value
|
157
|
+
else
|
158
|
+
type = property.type
|
159
|
+
typed_value = Data.make_typed(type, value)
|
160
|
+
variant = Data::Variant.new(typed_value, member_type: type)
|
161
|
+
end
|
162
|
+
|
163
|
+
object[PROPERTY_INTERFACE].Set(name, property_name, variant)
|
136
164
|
end
|
137
165
|
|
138
166
|
# Read all properties at once, as a hash.
|
data/lib/dbus/type.rb
CHANGED
@@ -415,8 +415,9 @@ module DBus
|
|
415
415
|
# @param string_type [SingleCompleteType]
|
416
416
|
# @param value [::Object]
|
417
417
|
# @return [Array(DBus::Type::Type,::Object)]
|
418
|
+
# @deprecated Use {Data::Variant.new} instead
|
418
419
|
def variant(string_type, value)
|
419
|
-
|
420
|
+
Data::Variant.new(value, member_type: string_type)
|
420
421
|
end
|
421
422
|
module_function :variant
|
422
423
|
end
|
data/lib/dbus/xml.rb
CHANGED
data/spec/data_spec.rb
CHANGED
@@ -193,7 +193,7 @@ RSpec.shared_examples "constructor rejects values from this list" do |bad_list|
|
|
193
193
|
describe "#initialize" do
|
194
194
|
bad_list.each do |(value, exc_class, msg_substr)|
|
195
195
|
it "rejects #{value.inspect} with #{exc_class}: #{msg_substr}" do
|
196
|
-
msg_re = Regexp.new(Regexp.quote(msg_substr))
|
196
|
+
msg_re = Regexp.try_convert(msg_substr) || Regexp.new(Regexp.quote(msg_substr))
|
197
197
|
expect { described_class.new(value) }.to raise_error(exc_class, msg_re)
|
198
198
|
end
|
199
199
|
end
|
@@ -204,7 +204,7 @@ RSpec.shared_examples "constructor (kwargs) rejects values" do |bad_list|
|
|
204
204
|
describe "#initialize" do
|
205
205
|
bad_list.each do |(value, kwargs_hash, exc_class, msg_substr)|
|
206
206
|
it "rejects #{value.inspect}, #{kwargs_hash.inspect} with #{exc_class}: #{msg_substr}" do
|
207
|
-
msg_re = Regexp.new(Regexp.quote(msg_substr))
|
207
|
+
msg_re = Regexp.try_convert(msg_substr) || Regexp.new(Regexp.quote(msg_substr))
|
208
208
|
expect { described_class.new(value, **kwargs_hash) }.to raise_error(exc_class, msg_re)
|
209
209
|
end
|
210
210
|
end
|
@@ -387,8 +387,9 @@ describe DBus::Data do
|
|
387
387
|
|
388
388
|
describe "containers" do
|
389
389
|
describe DBus::Data::Array do
|
390
|
+
aq = DBus::Data::Array.new([1, 2, 3], type: "aq")
|
391
|
+
|
390
392
|
good = [
|
391
|
-
# [[1, 2, 3], type: nil],
|
392
393
|
[[1, 2, 3], { type: "aq" }],
|
393
394
|
[[1, 2, 3], { type: T::Array[T::UINT16] }],
|
394
395
|
[[1, 2, 3], { type: T::Array["q"] }],
|
@@ -398,9 +399,14 @@ describe DBus::Data do
|
|
398
399
|
|
399
400
|
bad = [
|
400
401
|
# undesirable type guessing
|
401
|
-
|
402
|
-
|
403
|
-
|
402
|
+
[[1, 2, 3], { type: nil }, ArgumentError, /Expecting DBus::Type.*got nil/],
|
403
|
+
[[1, 2, 3], { type: "!" }, DBus::Type::SignatureException, "Unknown type code"],
|
404
|
+
[aq, { type: "q" }, ArgumentError, "Expecting \"a\""],
|
405
|
+
[aq, { type: "ao" }, ArgumentError,
|
406
|
+
"Specified type is ARRAY: [OBJECT_PATH] but value type is ARRAY: [UINT16]"]
|
407
|
+
# TODO: how to handle these?
|
408
|
+
# [{1 => 2, 3 => 4}, { type: "aq" }, ArgumentError, "?"],
|
409
|
+
# [/i am not an array/, { type: "aq" }, ArgumentError, "?"],
|
404
410
|
]
|
405
411
|
|
406
412
|
include_examples "#== and #eql? work for container types (inequal)",
|
@@ -506,7 +512,7 @@ describe DBus::Data do
|
|
506
512
|
value2 = result1
|
507
513
|
type2 = "(xxx)"
|
508
514
|
expect { described_class.new(value2, type: type2) }
|
509
|
-
.to raise_error(ArgumentError, /value type is
|
515
|
+
.to raise_error(ArgumentError, /value type is STRUCT.*UINT32/)
|
510
516
|
end
|
511
517
|
|
512
518
|
it "checks that size of type and value match" do
|
@@ -553,7 +559,7 @@ describe DBus::Data do
|
|
553
559
|
value2 = result1
|
554
560
|
type2 = T::Hash[T::UINT64, T::UINT64].child
|
555
561
|
expect { described_class.new(value2, type: type2) }
|
556
|
-
.to raise_error(ArgumentError, /value type is
|
562
|
+
.to raise_error(ArgumentError, /value type is DICT_ENTRY.*UINT32/)
|
557
563
|
end
|
558
564
|
|
559
565
|
it "checks that size of type and value match" do
|
@@ -632,6 +638,36 @@ describe DBus::Data do
|
|
632
638
|
|
633
639
|
include_examples "#== and #eql? work for container types (1 value)",
|
634
640
|
"/foo", { member_type: DBus.type(T::STRING) }
|
641
|
+
|
642
|
+
describe "DBus.variant compatibility" do
|
643
|
+
let(:v) { DBus.variant("o", "/foo") }
|
644
|
+
|
645
|
+
describe "#[]" do
|
646
|
+
it "returns the type for 0" do
|
647
|
+
expect(v[0]).to eq DBus.type(DBus::Type::OBJECT_PATH)
|
648
|
+
end
|
649
|
+
|
650
|
+
it "returns the value for 1" do
|
651
|
+
expect(v[1]).to eq DBus::ObjectPath.new("/foo")
|
652
|
+
end
|
653
|
+
|
654
|
+
it "returns an error for other indices" do
|
655
|
+
expect { v[2] }.to raise_error(ArgumentError, /DBus.variant can only be indexed with 0 or 1/)
|
656
|
+
end
|
657
|
+
end
|
658
|
+
|
659
|
+
describe "#first" do
|
660
|
+
it "returns the type" do
|
661
|
+
expect(v.first).to eq DBus.type(DBus::Type::OBJECT_PATH)
|
662
|
+
end
|
663
|
+
end
|
664
|
+
|
665
|
+
describe "#last" do
|
666
|
+
it "returns the value" do
|
667
|
+
expect(v.last).to eq DBus::ObjectPath.new("/foo")
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
635
671
|
end
|
636
672
|
end
|
637
673
|
end
|
data/spec/property_spec.rb
CHANGED
@@ -60,7 +60,7 @@ describe "PropertyTest" do
|
|
60
60
|
|
61
61
|
it "tests get all" do
|
62
62
|
all = @iface.all_properties
|
63
|
-
expect(all.keys.sort).to eq(["MyArray", "MyDict", "MyStruct", "MyVariant", "ReadMe", "ReadOrWriteMe"])
|
63
|
+
expect(all.keys.sort).to eq(["MyArray", "MyByte", "MyDict", "MyStruct", "MyVariant", "ReadMe", "ReadOrWriteMe"])
|
64
64
|
end
|
65
65
|
|
66
66
|
it "tests get all on a V1 object" do
|
@@ -68,7 +68,7 @@ describe "PropertyTest" do
|
|
68
68
|
iface = obj["org.ruby.SampleInterface"]
|
69
69
|
|
70
70
|
all = iface.all_properties
|
71
|
-
expect(all.keys.sort).to eq(["MyArray", "MyDict", "MyStruct", "MyVariant", "ReadMe", "ReadOrWriteMe"])
|
71
|
+
expect(all.keys.sort).to eq(["MyArray", "MyByte", "MyDict", "MyStruct", "MyVariant", "ReadMe", "ReadOrWriteMe"])
|
72
72
|
end
|
73
73
|
|
74
74
|
it "tests unknown property reading" do
|
@@ -200,6 +200,36 @@ describe "PropertyTest" do
|
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
+
context "a byte-typed property" do
|
204
|
+
# Slightly advanced RSpec:
|
205
|
+
# https://rspec.info/documentation/3.9/rspec-expectations/RSpec/Matchers.html#satisfy-instance_method
|
206
|
+
let(:a_byte_in_a_variant) do
|
207
|
+
satisfying { |x| x.is_a?(DBus::Data::Variant) && x.member_type.to_s == DBus::Type::BYTE }
|
208
|
+
# ^ This formatting keeps the matcher on a single line
|
209
|
+
# which enables RSpect to cite it if it fails, instead of saying "block".
|
210
|
+
end
|
211
|
+
|
212
|
+
let(:prop_iface) { @obj[DBus::PROPERTY_INTERFACE] }
|
213
|
+
|
214
|
+
it "gets set with a correct type (#108)" do
|
215
|
+
expect(prop_iface).to receive(:Set).with(
|
216
|
+
"org.ruby.SampleInterface",
|
217
|
+
"MyByte",
|
218
|
+
a_byte_in_a_variant
|
219
|
+
)
|
220
|
+
@iface["MyByte"] = 1
|
221
|
+
end
|
222
|
+
|
223
|
+
it "gets set with a correct type (#108), when using the DBus.variant workaround" do
|
224
|
+
expect(prop_iface).to receive(:Set).with(
|
225
|
+
"org.ruby.SampleInterface",
|
226
|
+
"MyByte",
|
227
|
+
a_byte_in_a_variant
|
228
|
+
)
|
229
|
+
@iface["MyByte"] = DBus.variant("y", 1)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
203
233
|
context "marshall.yaml round-trip via a VARIANT property" do
|
204
234
|
marshall_yaml.each do |test|
|
205
235
|
t = OpenStruct.new(test)
|
data/spec/service_newapi.rb
CHANGED
@@ -28,6 +28,8 @@ class Test < DBus::Object
|
|
28
28
|
"three" => [3, 3, 3]
|
29
29
|
}
|
30
30
|
@my_variant = @my_array.dup
|
31
|
+
# 201 is a RET instruction for ZX Spectrum which has turned 40 recently
|
32
|
+
@my_byte = 201
|
31
33
|
@main_loop = nil
|
32
34
|
end
|
33
35
|
|
@@ -111,6 +113,8 @@ class Test < DBus::Object
|
|
111
113
|
dbus_attr_accessor :my_array, "aq"
|
112
114
|
dbus_attr_accessor :my_dict, "a{sv}"
|
113
115
|
dbus_attr_accessor :my_variant, "v"
|
116
|
+
|
117
|
+
dbus_attr_accessor :my_byte, "y"
|
114
118
|
end
|
115
119
|
|
116
120
|
# closing and reopening the same interface
|
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.18.0.
|
4
|
+
version: 0.18.0.beta7
|
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-05-
|
11
|
+
date: 2022-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rexml
|