Repository: qpid-proton
Updated Branches:
  refs/heads/master 942085256 -> 9a8f9f59a


PROTON-1738: [ruby] Fixes to work with ruby 2.0.0

- old Queue method << does not return Queue, cannot be chained
- old URI parser does not allow empty host name
- fix compile warning in SWIG generated code


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

Branch: refs/heads/master
Commit: 83205db4c5c957588518b9028eb2ca7f5a906441
Parents: 9420852
Author: Alan Conway <acon...@redhat.com>
Authored: Mon Feb 12 18:31:26 2018 -0500
Committer: Alan Conway <acon...@redhat.com>
Committed: Wed Feb 14 11:29:59 2018 -0500

----------------------------------------------------------------------
 proton-c/bindings/ruby/lib/core/container.rb  |  3 ++-
 proton-c/bindings/ruby/lib/core/ssl_domain.rb |  2 +-
 proton-c/bindings/ruby/lib/core/uri.rb        | 24 ++++++++++-------
 proton-c/bindings/ruby/tests/test_uri.rb      | 30 +++++++++++-----------
 4 files changed, 33 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/83205db4/proton-c/bindings/ruby/lib/core/container.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/container.rb 
b/proton-c/bindings/ruby/lib/core/container.rb
index 7a69b58..f262ea1 100644
--- a/proton-c/bindings/ruby/lib/core/container.rb
+++ b/proton-c/bindings/ruby/lib/core/container.rb
@@ -125,7 +125,8 @@ module Qpid::Proton
       # - nil on the @work queue makes a #run thread exit
 
       @work = Queue.new
-      @work << :start << self   # Issue start and start start selecting
+      @work << :start
+      @work << self             # Issue start and start start selecting
       @wake = IO.pipe           # Wakes #run thread in IO.select
       @auto_stop = true         # Stop when @active drops to 0
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/83205db4/proton-c/bindings/ruby/lib/core/ssl_domain.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/ssl_domain.rb 
b/proton-c/bindings/ruby/lib/core/ssl_domain.rb
index 31a472f..813fc1a 100644
--- a/proton-c/bindings/ruby/lib/core/ssl_domain.rb
+++ b/proton-c/bindings/ruby/lib/core/ssl_domain.rb
@@ -48,7 +48,7 @@ module Qpid::Proton
     # @private
     def initialize(mode)
       @impl = Cproton.pn_ssl_domain(mode)
-      raise SSLUnavailable.new if @impl.nil?
+      raise Qpid::Proton::SSLError, "SSL Unavailable" if @impl.nil?
     end
 
     # Set the certificate that identifies the local node to the remote.

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/83205db4/proton-c/bindings/ruby/lib/core/uri.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/lib/core/uri.rb 
b/proton-c/bindings/ruby/lib/core/uri.rb
index e347849..272c2d2 100644
--- a/proton-c/bindings/ruby/lib/core/uri.rb
+++ b/proton-c/bindings/ruby/lib/core/uri.rb
@@ -37,9 +37,15 @@ module URI
 end
 
 module Qpid::Proton
-  # Returns +s+ converted to a {URI::AMQP} or {URI::AMQPS} object
+  private
+  # Make sure to allow empty hostnames, Ruby 2.0.0 does not.
+  DEFAULT_URI_PARSER = URI::Parser.new(:HOSTNAME => 
/(?:#{URI::PATTERN::HOSTNAME})|/)
+
+  public
+
+  # Convert +s+ to a {URI::AMQP} or {URI::AMQPS} object
   #
-  # Shortcut strings are allowed: an "amqp://" prefix is added if +s+ does
+  # Shortcut strings like "host:port" are allowed: an "amqp://" prefix is 
added if +s+ does
   # not already look like an 'amqp:', 'amqps:' URI.
   #
   # @note this does not give the same result as a standard URI parser in all 
cases.
@@ -54,19 +60,19 @@ module Qpid::Proton
   #
   def self.uri(s)
     case s
-      when URI::AMQP then s     # Pass-thru
-    when URI::Generic
-      s.scheme ||= 'amqp'
-      u = URI.parse(s.to_s)      # Re-parse as amqp
+    when URI::AMQP then s       # This is already an AMQP or AMQPS URL.
+    when URI::Generic           # Re-parse a generic URI that was not parsed 
as AMQP/AMQPS class
+      s.scheme ||= 'amqp'       # Default to amqp: scheme
+      u = DEFAULT_URI_PARSER.parse(s.to_s)
       raise URI::BadURIError, "Not an AMQP URI: '#{u}'" unless u.is_a? 
URI::AMQP
       u
     else
       s = String.try_convert s
       raise ::ArgumentError, "bad argument (expected URI object or URI 
string)" unless s
       case s
-      when %r{^amqps?:} then URI.parse(s)      # Looks like an AMQP URI
-      when %r{^//} then URI.parse("amqp:#{s}") # Looks like a scheme-less URI
-      else URI.parse("amqp://#{s}")            # Treat as a bare 
host:port/path string
+      when %r{^amqps?:} then DEFAULT_URI_PARSER.parse(s)      # Looks like an 
AMQP URI
+      when %r{^//} then DEFAULT_URI_PARSER.parse("amqp:#{s}") # Looks like an 
authority with no scheme
+      else DEFAULT_URI_PARSER.parse("amqp://#{s}")            # Treat as a 
bare host:port/path string
       end
     end
   end

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/83205db4/proton-c/bindings/ruby/tests/test_uri.rb
----------------------------------------------------------------------
diff --git a/proton-c/bindings/ruby/tests/test_uri.rb 
b/proton-c/bindings/ruby/tests/test_uri.rb
index 95887b1..7af2ea2 100644
--- a/proton-c/bindings/ruby/tests/test_uri.rb
+++ b/proton-c/bindings/ruby/tests/test_uri.rb
@@ -21,41 +21,40 @@ require 'qpid_proton'
 
 class TestURI < Minitest::Test
 
+  PARTS=[:scheme, :userinfo, :host, :port, :path] # Interesting URI components
   def uri(u) Qpid::Proton::uri(u); end
+  def uri_parts(u) uri(u).select(*PARTS); end
 
   # Extension to standard URI parser
   def test_standard
     u = URI("amqp://u:p@h/x")
     assert_equal URI::AMQP, u.class
-    assert_equal ['amqp', 'u:p', 'h', 5672, '/x'], u.select(:scheme, 
:userinfo, :host, :port, :path)
+    assert_equal ['amqp', 'u:p', 'h', 5672, '/x'], u.select(*PARTS)
 
     u = URI("amqps://u:p@h/x")
     assert_equal URI::AMQPS, u.class
-    assert_equal ['amqps', 'u:p', 'h', 5671, '/x'], u.select(:scheme, 
:userinfo, :host, :port, :path)
+    assert_equal ['amqps', 'u:p', 'h', 5671, '/x'], u.select(*PARTS)
 
-    assert_equal ['amqp', '[::1:2:3]', 5672], 
URI('amqp://[::1:2:3]').select(:scheme, :host, :port)
+    assert_equal ['amqp', nil, '[::1:2:3]', 5672, ""], 
URI('amqp://[::1:2:3]').select(*PARTS)
   end
 
   # Proton::uri on valid URIs
   def test_valid
     u = uri("amqp://u:p@h:1/x")
     assert_equal URI::AMQP, u.class
-    assert_equal u.select(:scheme, :userinfo, :host, :port, :path), ['amqp', 
'u:p', 'h', 1, '/x']
+    assert_equal ['amqp', 'u:p', 'h', 1, '/x'], u.select(*PARTS)
 
     u = uri("amqps://u:p@h:1/x")
     assert_equal URI::AMQPS, u.class
-    assert_equal u.select(:scheme, :userinfo, :host, :port, :path), ['amqps', 
'u:p', 'h', 1, '/x']
+    assert_equal ['amqps', 'u:p', 'h', 1, '/x'], u.select(*PARTS)
 
     # Schemeless string -> amqp
-    assert_equal URI("amqp://h:1/x"), uri("//h:1/x")
-    assert_equal URI("amqp:/x"), uri("/x")
-    assert_equal URI("amqp:"), uri("//")
-    assert_equal URI("amqp:"), uri("")
-    assert_equal URI("amqp://[::1]"), uri("//[::1]")
+    assert_equal ["amqp", nil, "h", 1, "/x"], uri_parts("//h:1/x")
+    assert_equal ["amqp", nil, "", 5672, "/x"], uri_parts("/x")
+    assert_equal ["amqp", nil, "[::1]", 5672, ""], uri_parts("//[::1]")
 
-    # Schemeless URI -> amqp, no re-parse for ambiguous case of path only
-    assert_equal URI("amqp:x"), uri(URI("x"))
-    assert_equal URI("amqp:/x"), uri(URI("/x"))
+    # Schemeless URI gets amqp: scheme
+    assert_equal ["amqp", nil, nil, 5672, "/x"], uri_parts(URI("/x"))
 
     # Pass-through
     u = uri('')
@@ -68,14 +67,15 @@ class TestURI < Minitest::Test
     assert_equal URI("amqp://h:1"), uri("h:1")
     assert_equal URI("amqp://h"), uri("h")
     assert_equal URI("amqp://h"), uri("h:")
-    assert_equal URI("amqp://:1"), uri(":1")
+    assert_equal ["amqp", nil, "", 1, ""], uri_parts(":1")
+    assert_equal ["amqp", nil, "", 1, ""], uri_parts("amqp://:1")
     assert_equal URI("amqp://[::1:2]:1"), uri("[::1:2]:1")
     assert_equal URI("amqp://[::1:2]"), uri("[::1:2]")
   end
 
   def test_error
     assert_raises(::ArgumentError) { uri(nil) }
-    assert_raises(URI::BadURIError) { uri(URI("http:x")) } # Don't re-parse a 
URI with wrong scheme
+    assert_raises(URI::BadURIError) { uri(URI("http://x";)) } # Don't re-parse 
a URI with wrong scheme
     assert_raises(URI::InvalidURIError) { uri("x:y:z") } # Nonsense
     assert_raises(URI::InvalidURIError) { uri("amqp://[foobar]") } # Bad host
   end


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

Reply via email to