PROTON-1861: [ruby] offered/desired capabilities should be decoded as 
"multiple" fields

capabilities are encoded as a "multiple" symbol field. "multiple" fields can be
encoded either as an array or a single value. The connection accessors return an
Array in all cases.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/27f9aec2
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/27f9aec2
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/27f9aec2

Branch: refs/heads/master
Commit: 27f9aec21d737279f117282f136ba9b1b0fd1c06
Parents: af93c80
Author: Alan Conway <acon...@redhat.com>
Authored: Wed Jun 13 18:24:06 2018 -0400
Committer: Alan Conway <acon...@redhat.com>
Committed: Wed Jun 13 18:24:06 2018 -0400

----------------------------------------------------------------------
 ruby/examples/server.rb     |  2 +-
 ruby/lib/codec/data.rb      | 10 +++++++++-
 ruby/lib/core/connection.rb |  6 ++++--
 3 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/27f9aec2/ruby/examples/server.rb
----------------------------------------------------------------------
diff --git a/ruby/examples/server.rb b/ruby/examples/server.rb
index 7538d61..7ebd807 100644
--- a/ruby/examples/server.rb
+++ b/ruby/examples/server.rb
@@ -37,7 +37,7 @@ class Server < Qpid::Proton::MessagingHandler
 
   def on_connection_open(connection)
     if connection.offered_capabilities &&
-        connection.offered_capabilities.contain?("ANONYMOUS-RELAY")
+        connection.offered_capabilities.include?(:"ANONYMOUS-RELAY")
       @relay = connection.open_sender({:target => nil})
     end
   end

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/27f9aec2/ruby/lib/codec/data.rb
----------------------------------------------------------------------
diff --git a/ruby/lib/codec/data.rb b/ruby/lib/codec/data.rb
index ec74756..b6ce869 100644
--- a/ruby/lib/codec/data.rb
+++ b/ruby/lib/codec/data.rb
@@ -42,6 +42,15 @@ module Qpid::Proton
       end
 
       # @private
+      # Convert a pn_data_t* containing an AMQP "multiple" field to an Array 
or nil.
+      # A "multiple" field can be encoded as an array or a single value - 
always return Array.
+      # @return [Array, nil] The ruby Array extracted from +impl+ or nil if 
impl is empty
+      def self.to_multiple(impl)
+        o = self.to_object(impl)
+        Array(o) if o
+      end
+
+      # @private
       # Clear a pn_data_t* and convert a ruby object into it. If x==nil leave 
it empty.
       def self.from_object(impl, x)
         d = Data.new(impl)
@@ -676,7 +685,6 @@ module Qpid::Proton
           return err
         end
       end
-
     end
   end
 end

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/27f9aec2/ruby/lib/core/connection.rb
----------------------------------------------------------------------
diff --git a/ruby/lib/core/connection.rb b/ruby/lib/core/connection.rb
index e54ce16..3586790 100644
--- a/ruby/lib/core/connection.rb
+++ b/ruby/lib/core/connection.rb
@@ -77,13 +77,15 @@ module Qpid::Proton
 
     # @return [Array<Symbol>] offered capabilities provided by the remote peer
     def offered_capabilities
-      
Codec::Data.to_object(Cproton.pn_connection_remote_offered_capabilities(@impl))
+      # Provide capabilities consistently as an array, even if encoded as a 
single symbol
+      
Codec::Data.to_multiple(Cproton.pn_connection_remote_offered_capabilities(@impl))
     end
     deprecated_alias :remote_offered_capabilities, :offered_capabilities
 
     # @return [Array<Symbol>] desired capabilities provided by the remote peer
     def desired_capabilities
-      
Codec::Data.to_object(Cproton.pn_connection_remote_desired_capabilities(@impl))
+      # Provide capabilities consistently as an array, even if encoded as a 
single symbol
+      
Codec::Data.to_multiple(Cproton.pn_connection_remote_desired_capabilities(@impl))
     end
     deprecated_alias :remote_desired_capabilities, :desired_capabilities
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to