Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-ruby-dbus for 
openSUSE:Factory checked in at 2022-04-12 21:43:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-ruby-dbus (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-ruby-dbus.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-ruby-dbus"

Tue Apr 12 21:43:20 2022 rev:25 rq:968278 version:0.18.0.beta3

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-ruby-dbus/rubygem-ruby-dbus.changes      
2022-04-05 19:55:11.698406481 +0200
+++ 
/work/SRC/openSUSE:Factory/.rubygem-ruby-dbus.new.1900/rubygem-ruby-dbus.changes
    2022-04-12 21:43:25.883618186 +0200
@@ -1,0 +2,8 @@
+Sun Apr 10 06:26:55 UTC 2022 - Martin Vidner <mvid...@suse.com>
+
+- 0.18.0.beta3
+ Bug fixes:
+ * Service-side properties: Fix Properties.Get, Properties.GetAll
+   for Array, Dict, and Variant types (gh#mvidner/ruby-dbus#105).
+
+-------------------------------------------------------------------

Old:
----
  ruby-dbus-0.18.0.beta2.gem

New:
----
  ruby-dbus-0.18.0.beta3.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-ruby-dbus.spec ++++++
--- /var/tmp/diff_new_pack.19TDwz/_old  2022-04-12 21:43:30.635563538 +0200
+++ /var/tmp/diff_new_pack.19TDwz/_new  2022-04-12 21:43:30.639563492 +0200
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-ruby-dbus
-Version:        0.18.0.beta2
+Version:        0.18.0.beta3
 Release:        0
 %define mod_name ruby-dbus
 %define mod_full_name %{mod_name}-%{version}

++++++ ruby-dbus-0.18.0.beta2.gem -> ruby-dbus-0.18.0.beta3.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/NEWS.md new/NEWS.md
--- old/NEWS.md 2022-04-04 12:08:55.000000000 +0200
+++ new/NEWS.md 2022-04-10 19:57:37.000000000 +0200
@@ -2,6 +2,14 @@
 
 ## Unreleased
 
+## Ruby D-Bus 0.18.0.beta3 - 2022-04-10
+
+Bug fixes:
+ * Service-side properties: Fix Properties.Get, Properties.GetAll for Array,
+   Dict, and Variant types ([#105][]).
+
+[#105]: https://github.com/mvidner/ruby-dbus/pull/105
+
 ## Ruby D-Bus 0.18.0.beta2 - 2022-04-04
 
 API:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/VERSION new/VERSION
--- old/VERSION 2022-04-04 12:08:55.000000000 +0200
+++ new/VERSION 2022-04-10 19:57:37.000000000 +0200
@@ -1 +1 @@
-0.18.0.beta2
+0.18.0.beta3
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dbus/data.rb new/lib/dbus/data.rb
--- old/lib/dbus/data.rb        2022-04-04 12:08:55.000000000 +0200
+++ new/lib/dbus/data.rb        2022-04-10 19:57:37.000000000 +0200
@@ -165,6 +165,9 @@
 
     # Represents integers
     class Int < Fixed
+      # @!method self.range
+      # @return [Range] the full range of allowed values
+
       # @param value [::Integer,DBus::Data::Int]
       # @raise RangeError
       def initialize(value)
@@ -174,10 +177,6 @@
 
         super(value)
       end
-
-      def self.range
-        raise NotImplementedError, "Abstract"
-      end
     end
 
     # Byte.
@@ -542,7 +541,7 @@
           Data.make_typed(member_type, i)
         end
 
-        new(items) # initialize(::Array<Data::Base>)
+        new(items, member_type: member_type) # initialize(::Array<Data::Base>)
       end
 
       # FIXME: should Data::Array be mutable?
@@ -603,8 +602,6 @@
         # TODO: validation
         raise unless value.size == member_types.size
 
-        @member_types = member_types
-
         items = member_types.zip(value).map do |item_type, item|
           Data.make_typed(item_type, item)
         end
@@ -643,14 +640,20 @@
         # assert member_types.empty?
 
         # decide on type of value
-        new(value)
+        new(value, member_type: nil)
+      end
+
+      # @return [Type]
+      def self.type
+        # memoize
+        @type ||= Type.new(type_code).freeze
       end
 
-      # Note that for Variants type=="v",
+      # Note that for Variants type.to_s=="v",
       # for the specific see {Variant#member_type}
       # @return [Type] the exact type of this value
       def type
-        "v"
+        self.class.type
       end
 
       # @return [Type]
@@ -708,6 +711,22 @@
         value
       end
 
+      # @param value [::Object] (#size, #each)
+      # @param member_types [::Array<Type>]
+      # @return [DictEntry]
+      def self.from_typed(value, member_types:)
+        # assert member_types.size == 2
+        # TODO: duplicated from Struct. Inherit/delegate?
+        # TODO: validation
+        raise unless value.size == member_types.size
+
+        items = member_types.zip(value).map do |item_type, item|
+          Data.make_typed(item_type, item)
+        end
+
+        new(items, member_types: member_types) # 
initialize(::Array<Data::Base>)
+      end
+
       def initialize(value, member_types:)
         @member_types = member_types
         @type = nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/dbus/marshall.rb new/lib/dbus/marshall.rb
--- old/lib/dbus/marshall.rb    2022-04-04 12:08:55.000000000 +0200
+++ new/lib/dbus/marshall.rb    2022-04-10 19:57:37.000000000 +0200
@@ -102,6 +102,8 @@
         packet = data_class.from_raw(value, mode: mode)
       elsif data_class.basic?
         size = aligned_read_value(data_class.size_class)
+        # @raw_msg.align(data_class.alignment)
+        # ^ is not necessary because we've just read a suitably-aligned *size*
         value = @raw_msg.read(size)
         nul = @raw_msg.read(1)
         if nul != "\u0000"
@@ -250,7 +252,7 @@
         when Type::ARRAY
           append_array(type.child, val)
         when Type::STRUCT, Type::DICT_ENTRY
-          val = val.value if val.is_a?(Data::Struct)
+          val = val.value if val.is_a?(Data::Struct) || 
val.is_a?(Data::DictEntry)
           unless val.is_a?(Array) || val.is_a?(Struct)
             type_name = Type::TYPE_MAPPING[type.sigtype].first
             raise TypeException, "#{type_name} expects an Array or Struct, 
seen #{val.class}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2022-04-04 12:08:55.000000000 +0200
+++ new/metadata        2022-04-10 19:57:37.000000000 +0200
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: ruby-dbus
 version: !ruby/object:Gem::Version
-  version: 0.18.0.beta2
+  version: 0.18.0.beta3
 platform: ruby
 authors:
 - Ruby DBus Team
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2022-04-04 00:00:00.000000000 Z
+date: 2022-04-10 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: rexml
@@ -197,6 +197,7 @@
 - spec/type_spec.rb
 - spec/value_spec.rb
 - spec/variant_spec.rb
+- spec/zzz_quit_spec.rb
 homepage: https://github.com/mvidner/ruby-dbus
 licenses:
 - LGPL-2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/data_spec.rb new/spec/data_spec.rb
--- old/spec/data_spec.rb       2022-04-04 12:08:55.000000000 +0200
+++ new/spec/data_spec.rb       2022-04-10 19:57:37.000000000 +0200
@@ -183,6 +183,14 @@
 
       include_examples "constructor accepts plain or typed values", good
       include_examples "constructor rejects values from this list", bad
+
+      describe ".alignment" do
+        # this overly specific test avoids a redundant alignment call
+        # in the production code
+        it "returns the correct value" do
+          expect(described_class.alignment).to eq 4
+        end
+      end
     end
 
     describe DBus::Data::ObjectPath do
@@ -198,6 +206,14 @@
 
       include_examples "constructor accepts plain or typed values", good
       include_examples "constructor rejects values from this list", bad
+
+      describe ".alignment" do
+        # this overly specific test avoids a redundant alignment call
+        # in the production code
+        it "returns the correct value" do
+          expect(described_class.alignment).to eq 4
+        end
+      end
     end
 
     describe DBus::Data::Signature do
@@ -215,6 +231,14 @@
 
       include_examples "constructor accepts plain or typed values", good
       include_examples "constructor rejects values from this list", bad
+
+      describe ".alignment" do
+        # this overly specific test avoids a redundant alignment call
+        # in the production code
+        it "returns the correct value" do
+          expect(described_class.alignment).to eq 1
+        end
+      end
     end
   end
 
@@ -238,6 +262,13 @@
 
       include_examples "constructor (kwargs) accepts values", good
       include_examples "constructor (kwargs) rejects values", bad
+
+      describe ".from_typed" do
+        it "creates new instance from given object and type" do
+          type = DBus::Type.new("s")
+          expect(described_class.from_typed(["test", "lest"], member_types: 
[type])).to be_a(described_class)
+        end
+      end
     end
 
     describe DBus::Data::Struct do
@@ -287,9 +318,33 @@
 
       include_examples "constructor (kwargs) accepts values", good
       # include_examples "constructor (kwargs) rejects values", bad
+
+      describe ".from_typed" do
+        it "creates new instance from given object and type" do
+          type = DBus::Type.new("s")
+          expect(described_class.from_typed(["test", "lest"].freeze, 
member_types: [type, type]))
+            .to be_a(described_class)
+        end
+      end
     end
 
     describe DBus::Data::Variant do
+      describe ".from_typed" do
+        it "creates new instance from given object and type" do
+          type = DBus::Type.new("s")
+          expect(described_class.from_typed("test", member_types: [type])).to 
be_a(described_class)
+        end
+
+        it "ignores the member_types argument" do
+          type = DBus::Type.new("s")
+          # Base.from_typed is a generic interface with a fixed signature;
+          # So it must offer the member_types parameter, which is misleading
+          # for a Variant
+          value = described_class.from_typed("test", member_types: [type])
+          expect(value.type.to_s).to eq "v"
+          expect(value.member_type.to_s).to eq "s"
+        end
+      end
     end
 
     describe DBus::Data::DictEntry do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/property_spec.rb new/spec/property_spec.rb
--- old/spec/property_spec.rb   2022-04-04 12:08:55.000000000 +0200
+++ new/spec/property_spec.rb   2022-04-10 19:57:37.000000000 +0200
@@ -52,7 +52,7 @@
 
   it "tests get all" do
     all = @iface.all_properties
-    expect(all.keys.sort).to eq(["MyStruct", "ReadMe", "ReadOrWriteMe"])
+    expect(all.keys.sort).to eq(["MyArray", "MyDict", "MyStruct", "MyVariant", 
"ReadMe", "ReadOrWriteMe"])
   end
 
   it "tests get all on a V1 object" do
@@ -60,7 +60,7 @@
     iface = obj["org.ruby.SampleInterface"]
 
     all = iface.all_properties
-    expect(all.keys.sort).to eq(["MyStruct", "ReadMe", "ReadOrWriteMe"])
+    expect(all.keys.sort).to eq(["MyArray", "MyDict", "MyStruct", "MyVariant", 
"ReadMe", "ReadOrWriteMe"])
   end
 
   it "tests unknown property reading" do
@@ -147,4 +147,29 @@
       expect(reply).to match(/variant\s+struct {\s+string "three"\s+string 
"strings"\s+string "in a struct"\s+}/)
     end
   end
+
+  context "an array-typed property" do
+    it "gets read as an array" do
+      val = @iface["MyArray"]
+      expect(val).to eq([42, 43])
+    end
+  end
+
+  context "an dict-typed property" do
+    it "gets read as a hash" do
+      val = @iface["MyDict"]
+      expect(val).to eq({
+                          "one" => 1,
+                          "two" => "dva",
+                          "three" => [3, 3, 3]
+                        })
+    end
+  end
+
+  context "a variant-typed property" do
+    it "gets read at all" do
+      val = @iface["MyVariant"]
+      expect(val).to eq([42, 43])
+    end
+  end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/service_newapi.rb new/spec/service_newapi.rb
--- old/spec/service_newapi.rb  2022-04-04 12:08:55.000000000 +0200
+++ new/spec/service_newapi.rb  2022-04-10 19:57:37.000000000 +0200
@@ -13,16 +13,30 @@
 class Test < DBus::Object
   Point2D = Struct.new(:x, :y)
 
+  attr_writer :main_loop
+
   INTERFACE = "org.ruby.SampleInterface"
   def initialize(path)
     super path
     @read_me = "READ ME"
     @read_or_write_me = "READ OR WRITE ME"
     @my_struct = ["three", "strings", "in a struct"].freeze
+    @my_array = [42, 43]
+    @my_dict = {
+      "one" => 1,
+      "two" => "dva",
+      "three" => [3, 3, 3]
+    }
+    @my_variant = @my_array.dup
+    @main_loop = nil
   end
 
   # Create an interface aggregating all upcoming dbus_method defines.
   dbus_interface INTERFACE do
+    dbus_method :quit, "" do
+      @main_loop&.quit
+    end
+
     dbus_method :hello, "in name:s, in name2:s" do |name, name2|
       puts "hello(#{name}, #{name2})"
     end
@@ -94,6 +108,9 @@
     dbus_reader :explosive, "s"
 
     dbus_attr_reader :my_struct, "(sss)"
+    dbus_attr_reader :my_array, "aq"
+    dbus_attr_reader :my_dict, "a{sv}"
+    dbus_attr_reader :my_variant, "v"
   end
 
   # closing and reopening the same interface
@@ -193,6 +210,7 @@
 puts "listening, with ruby-#{RUBY_VERSION}"
 main = DBus::Main.new
 main << bus
+myobj.main_loop = main
 begin
   main.run
 rescue SystemCallError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/spec_helper.rb new/spec/spec_helper.rb
--- old/spec/spec_helper.rb     2022-04-04 12:08:55.000000000 +0200
+++ new/spec/spec_helper.rb     2022-04-10 19:57:37.000000000 +0200
@@ -15,6 +15,8 @@
   SimpleCov.add_filter "_spec.rb"
   # do not cover the activesupport helpers
   SimpleCov.add_filter "/core_ext/"
+  # measure all if/else branches on a line
+  SimpleCov.enable_coverage :branch
 
   SimpleCov.start
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/zzz_quit_spec.rb new/spec/zzz_quit_spec.rb
--- old/spec/zzz_quit_spec.rb   1970-01-01 01:00:00.000000000 +0100
+++ new/spec/zzz_quit_spec.rb   2022-04-10 19:57:37.000000000 +0200
@@ -0,0 +1,16 @@
+#!/usr/bin/env rspec
+# frozen_string_literal: true
+
+require_relative "spec_helper"
+require "dbus"
+
+describe "Quit the service" do
+  it "Tells the service to quit and waits, to collate coverage data" do
+    session_bus = DBus::ASessionBus.new
+    @svc = session_bus.service("org.ruby.service")
+    @obj = @svc.object("/org/ruby/MyInstance")
+    @obj.default_iface = "org.ruby.SampleInterface"
+    @obj.quit
+    sleep 3
+  end
+end

Reply via email to