PROTON-1064: [ruby] Pass options to open connections/sessions/links Consistent option passing to endpoints
Minor cleanup: - Removed UUID class, use standard library - Fixed ruby code that was out of date with C library. - Remove dead 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/b3d1b074 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b3d1b074 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b3d1b074 Branch: refs/heads/master Commit: b3d1b0742225b53ea2c4d950cc62788584d62f3c Parents: 3d25815 Author: Alan Conway <acon...@redhat.com> Authored: Mon Sep 18 22:34:42 2017 -0400 Committer: Alan Conway <acon...@redhat.com> Committed: Tue Nov 7 13:31:51 2017 -0500 ---------------------------------------------------------------------- proton-c/bindings/ruby/lib/codec/data.rb | 4 +- proton-c/bindings/ruby/lib/codec/mapping.rb | 29 ++-- proton-c/bindings/ruby/lib/core/connection.rb | 79 ++++++----- proton-c/bindings/ruby/lib/core/session.rb | 54 ++++---- proton-c/bindings/ruby/lib/core/terminus.rb | 8 +- proton-c/bindings/ruby/lib/core/transport.rb | 10 ++ proton-c/bindings/ruby/lib/core/url.rb | 4 +- proton-c/bindings/ruby/lib/event/collector.rb | 2 +- proton-c/bindings/ruby/lib/qpid_proton.rb | 1 - proton-c/bindings/ruby/lib/reactor/backoff.rb | 10 +- proton-c/bindings/ruby/lib/reactor/connector.rb | 8 +- proton-c/bindings/ruby/lib/reactor/container.rb | 134 ++++++------------- .../bindings/ruby/lib/reactor/link_option.rb | 13 +- proton-c/bindings/ruby/lib/util/uuid.rb | 32 ----- proton-c/bindings/ruby/spec/array_spec.rb | 2 +- proton-c/bindings/ruby/tests/test_smoke.rb | 64 --------- 16 files changed, 170 insertions(+), 284 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/codec/data.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/codec/data.rb b/proton-c/bindings/ruby/lib/codec/data.rb index afd4e31..be13512 100644 --- a/proton-c/bindings/ruby/lib/codec/data.rb +++ b/proton-c/bindings/ruby/lib/codec/data.rb @@ -849,10 +849,10 @@ module Qpid::Proton::Codec # Puts a symbolic value. # - # @param value [String] The symbolic string value. + # @param value [String|Symbol] The symbolic string value. # def symbol=(value) - check(Cproton.pn_data_put_symbol(@data, value)) + check(Cproton.pn_data_put_symbol(@data, value.to_s)) end # If the current node is a symbol, returns its value. Otherwise, it http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/codec/mapping.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/codec/mapping.rb b/proton-c/bindings/ruby/lib/codec/mapping.rb index 421aadc..5a498b4 100644 --- a/proton-c/bindings/ruby/lib/codec/mapping.rb +++ b/proton-c/bindings/ruby/lib/codec/mapping.rb @@ -105,11 +105,18 @@ module Qpid::Proton::Codec DECIMAL128 = Mapping.new(Cproton::PN_DECIMAL128, "decimal128") UUID = Mapping.new(Cproton::PN_UUID, "uuid") BINARY = Mapping.new(Cproton::PN_BINARY, "binary") - STRING = Mapping.new(Cproton::PN_STRING, "string", [String, Symbol, + STRING = Mapping.new(Cproton::PN_STRING, "string", [::String, Qpid::Proton::Types::UTFString, Qpid::Proton::Types::BinaryString]) + SYMBOL = Mapping.new(Cproton::PN_SYMBOL, "symbol", [::Symbol]) + DESCRIBED = Mapping.new(Cproton::PN_DESCRIBED, "described", [Qpid::Proton::Types::Described], "get_described") + ARRAY = Mapping.new(Cproton::PN_ARRAY, "array", nil, "get_array") + LIST = Mapping.new(Cproton::PN_LIST, "list", [::Array], "get_array") + MAP = Mapping.new(Cproton::PN_MAP, "map", [::Hash], "get_map") + + + private - # @private class << STRING def put(data, value) # if we have a symbol then convert it to a string @@ -134,17 +141,9 @@ module Qpid::Proton::Codec data.string = value if isutf data.binary = value if !isutf - end end - SYMBOL = Mapping.new(Cproton::PN_SYMBOL, "symbol") - DESCRIBED = Mapping.new(Cproton::PN_DESCRIBED, "described", [Qpid::Proton::Types::Described], "get_described") - ARRAY = Mapping.new(Cproton::PN_ARRAY, "array", nil, "get_array") - LIST = Mapping.new(Cproton::PN_LIST, "list", [::Array], "get_array") - MAP = Mapping.new(Cproton::PN_MAP, "map", [::Hash], "get_map") - - # @private class << MAP def put(data, map, options = {}) data.put_map @@ -166,4 +165,14 @@ module Qpid::Proton::Codec end end + class << DESCRIBED + def put(data, described) + data.put_described + data.enter + data.object = described.descriptor + data.object = described.value + data.exit + end + end + end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/core/connection.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/connection.rb b/proton-c/bindings/ruby/lib/core/connection.rb index 784b193..ef785b2 100644 --- a/proton-c/bindings/ruby/lib/core/connection.rb +++ b/proton-c/bindings/ruby/lib/core/connection.rb @@ -19,15 +19,14 @@ module Qpid::Proton - # A Connection has at most one Qpid::Proton::Transport instance. - # + # An AMQP connection. class Connection < Endpoint - # @private + protected + PROTON_METHOD_PREFIX = "pn_connection" include Util::SwigHelper - # @private - PROTON_METHOD_PREFIX = "pn_connection" + public # @!attribute hostname # @@ -45,8 +44,6 @@ module Qpid::Proton proton_writer :password # @private - proton_reader :attachments - attr_accessor :overrides attr_accessor :session_policy @@ -127,15 +124,10 @@ module Qpid::Proton @collector = collector end - # Get the AMQP container name advertised by the remote connection - # endpoint. + # Get the AMQP container name advertised by the remote connection. # # This will return nil until the REMOTE_ACTIVE state is reached. # - # Any non-nil container returned by this operation will be valid - # until the connection is unbound from a transport, or freed, - # whichever happens sooner. - # # @return [String] The remote connection's AMQP container name. # # @see #container @@ -144,11 +136,8 @@ module Qpid::Proton Cproton.pn_connection_remote_container(@impl) end - def container=(name) - Cproton.pn_connection_set_container(@impl, name) - end - - def container + # AMQP container ID string for the local end of the connection. + def container_id Cproton.pn_connection_get_container(@impl) end @@ -204,18 +193,28 @@ module Qpid::Proton data_to_object(Cproton.pn_connection_remote_properites(@impl)) end - # Opens the connection. + # Open the local end of the connection. + # + # @option options [String] :container_id Unique AMQP container ID, defaults to a UUID + # @option [String] :link_prefix Prefix for generated link names, default is container_id # - def open - object_to_data(@offered_capabilities, - Cproton.pn_connection_offered_capabilities(@impl)) - object_to_data(@desired_capabilities, - Cproton.pn_connection_desired_capabilities(@impl)) - object_to_data(@properties, - Cproton.pn_connection_properties(@impl)) + def open(options={}) + object_to_data(@offered_capabilities, Cproton.pn_connection_offered_capabilities(@impl)) + object_to_data(@desired_capabilities, Cproton.pn_connection_desired_capabilities(@impl)) + object_to_data(@properties, Cproton.pn_connection_properties(@impl)) + cid = options[:container_id] || SecureRandom.uuid + Cproton.pn_connection_set_container(@impl, cid) + @link_prefix = options[:link_prefix] || cid + @link_prefix = SecureRandom.uuid if !@link_prefix || @link_prefix.empty? + @link_count = 0 Cproton.pn_connection_open(@impl) end + # @private Generate a unique link name, internal use only. + def link_name() + @link_prefix + "/" + (@link_count += 1).to_s(16) + end + # Closes the connection. # # Once this operation has completed, the #LOCAL_CLOSED state flag will be @@ -239,14 +238,30 @@ module Qpid::Proton Cproton.pn_connection_state(@impl) end - # Returns the session for this connection. + # Returns the default session for this connection. # # @return [Session] The session. # - def session - @session ||= Session.wrap(Cproton.pn_session(@impl)) + def default_session + @session ||= open_session + end + + # @deprecated use #default_session() + alias_method :session, :default_session + + # Open a new session on this connection. + def open_session + s = Session.wrap(Cproton.pn_session(@impl)) + s.open + return s end + # Open a sender on the default_session + def open_sender(*args, &block) default_session.open_sender(*args, &block) end + + # Open a on the default_session + def open_receiver(*args, &block) default_session.open_receiver(*args, &block) end + # Returns the first session from the connection that matches the specified # state mask. # @@ -322,16 +337,16 @@ module Qpid::Proton Cproton.pn_error_code(Cproton.pn_connection_error(@impl)) end - # @private + protected + def _local_condition Cproton.pn_connection_condition(@impl) end - # @private def _remote_condition Cproton.pn_connection_remote_condition(@impl) end + proton_reader :attachments end - end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/core/session.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/session.rb b/proton-c/bindings/ruby/lib/core/session.rb index 1dbb9bd..81135eb 100644 --- a/proton-c/bindings/ruby/lib/core/session.rb +++ b/proton-c/bindings/ruby/lib/core/session.rb @@ -120,40 +120,42 @@ module Qpid::Proton Connection.wrap(Cproton.pn_session_connection(@impl)) end - # Constructs a new sender. - # - # Each sender between two AMQP containers must be uniquely named. Note that - # this uniqueness cannot be enforced at the library level, so some - # consideration should be taken in choosing link names. - # - # @param name [String] The link name. - # - # @return [Sender, nil] The sender, or nil if an error occurred. - # - def sender(name) - Sender.new(Cproton.pn_sender(@impl, name)) + # @deprecated use {#open_sender} + def sender(name) Sender.new(Cproton.pn_sender(@impl, name)); end + + # @deprecated use {#open_receiver} + def receiver(name) Receiver.new(Cproton.pn_receiver(@impl, name)); end + + # TODO aconway 2016-01-04: doc options or target param + def open_receiver(options = {}) + options = { :source => options } if options.is_a? String + receiver = Receiver.new Cproton.pn_receiver(@impl, options[:name] || connection.link_name) + receiver.source.address ||= options[:source] + receiver.target.address ||= options[:target] + receiver.source.dynamic = true if options[:dynamic] + receiver.handler = options[:handler] if !options[:handler].nil? + receiver.open + return receiver end - # Constructs a new receiver. - # - # Each receiver between two AMQP containers must be uniquely named. Note - # that this uniqueness cannot be enforced at the library level, so some - # consideration should be taken in choosing link names. - # - # @param name [String] The link name. - # - # @return [Receiver, nil] The receiver, or nil if an error occurred. - # - def receiver(name) - Receiver.new(Cproton.pn_receiver(@impl, name)) + # TODO aconway 2016-01-04: doc options or target param + def open_sender(options = {}) + options = { :target => options } if options.is_a? String + sender = Sender.new Cproton.pn_sender(@impl, options[:name] || connection.link_name) + sender.target.address ||= options[:target] + sender.source.address ||= options[:source] + sender.target.dynamic = true if options[:dynamic] + sender.handler = options[:handler] if !options[:handler].nil? + sender.open + return sender end - # @private + private + def _local_condition Cproton.pn_session_condition(@impl) end - # @private def _remote_condition # :nodoc: Cproton.pn_session_remote_condition(@impl) end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/core/terminus.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/terminus.rb b/proton-c/bindings/ruby/lib/core/terminus.rb index fa2d8ab..b4927d8 100644 --- a/proton-c/bindings/ruby/lib/core/terminus.rb +++ b/proton-c/bindings/ruby/lib/core/terminus.rb @@ -157,7 +157,7 @@ module Qpid::Proton # @return [Data] The terminus properties. # def properties - Data.new(Cproton.pn_terminus_properties(@impl)) + Codec::Data.new(Cproton.pn_terminus_properties(@impl)) end # Access and modify the AMQP capabilities data for the Terminus. @@ -172,7 +172,7 @@ module Qpid::Proton # @return [Data] The terminus capabilities. # def capabilities - Data.new(Cproton.pn_terminus_capabilities(@impl)) + Codec::Data.new(Cproton.pn_terminus_capabilities(@impl)) end # Access and modify the AMQP outcomes for the Terminus. @@ -187,7 +187,7 @@ module Qpid::Proton # @return [Data] The terminus outcomes. # def outcomes - Data.new(Cproton.pn_terminus_outcomes(@impl)) + Codec::Data.new(Cproton.pn_terminus_outcomes(@impl)) end # Access and modify the AMQP filter set for the Terminus. @@ -202,7 +202,7 @@ module Qpid::Proton # @return [Data] The terminus filter. # def filter - Data.new(Cproton.pn_terminus_filter(@impl)) + Codec::Data.new(Cproton.pn_terminus_filter(@impl)) end # Copy another Terminus into this instance. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/core/transport.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/transport.rb b/proton-c/bindings/ruby/lib/core/transport.rb index 04697a3..61767fd 100644 --- a/proton-c/bindings/ruby/lib/core/transport.rb +++ b/proton-c/bindings/ruby/lib/core/transport.rb @@ -252,6 +252,16 @@ module Qpid::Proton condition_to_object Cproton.pn_transport_condition(@impl) end + # Set the condition of the transport. + # + # Setting a non-empty condition before closing the transport will cause a + # TRANSPORT_ERROR event. + # + # @param c [Condition] The condition to set + def condition=(c) + object_to_condition c, Cproton.pn_transport_condition(@impl) + end + # Binds to the given connection. # # @param connection [Connection] The connection. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/core/url.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/url.rb b/proton-c/bindings/ruby/lib/core/url.rb index 9034487..30d2d87 100644 --- a/proton-c/bindings/ruby/lib/core/url.rb +++ b/proton-c/bindings/ruby/lib/core/url.rb @@ -30,9 +30,7 @@ module Qpid::Proton # Parse a string, return a new URL # @param url [#to_s] the URL string - def initialize(url = nil, options = {}) - options[:defaults] = true - + def initialize(url = nil) if url @url = Cproton.pn_url_parse(url.to_s) if @url.nil? http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/event/collector.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/event/collector.rb b/proton-c/bindings/ruby/lib/event/collector.rb index c86b0f2..74e0182 100644 --- a/proton-c/bindings/ruby/lib/event/collector.rb +++ b/proton-c/bindings/ruby/lib/event/collector.rb @@ -112,7 +112,7 @@ module Qpid::Proton::Event # @return [nil] if it was elided # def put(context, event_type) - Cproton.pn_collector_put(@impl, Cproton.pn_rb2void(context), event_type.type_code) + Cproton.pn_collector_put(@impl, Cproton.pn_class(context.impl), context.impl, event_type.number) end # Access the head event. http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/qpid_proton.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/qpid_proton.rb b/proton-c/bindings/ruby/lib/qpid_proton.rb index 1d614a4..0180291 100644 --- a/proton-c/bindings/ruby/lib/qpid_proton.rb +++ b/proton-c/bindings/ruby/lib/qpid_proton.rb @@ -39,7 +39,6 @@ require "util/condition" require "util/wrapper" require "util/class_wrapper" require "util/engine" -require "util/uuid" require "util/timeout" require "util/handler" require "util/reactor" http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/reactor/backoff.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/reactor/backoff.rb b/proton-c/bindings/ruby/lib/reactor/backoff.rb index 99682e5..54bb401 100644 --- a/proton-c/bindings/ruby/lib/reactor/backoff.rb +++ b/proton-c/bindings/ruby/lib/reactor/backoff.rb @@ -21,8 +21,10 @@ module Qpid::Proton::Reactor class Backoff - def initialize - @delay = 0 + def initialize min_ = 0, max_ = 3 + @min = min_ > 0 ? min_ : 0.1 + @max = [max_, min_].max + reset end def reset @@ -31,11 +33,9 @@ module Qpid::Proton::Reactor def next current = @delay - current = 0.1 if current.zero? - @delay = [10, 2 * current].min + @delay = @delay.zero? ? @min : [@max, 2 * @delay].min return current end - end end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/reactor/connector.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/reactor/connector.rb b/proton-c/bindings/ruby/lib/reactor/connector.rb index 0971141..b2d0c66 100644 --- a/proton-c/bindings/ruby/lib/reactor/connector.rb +++ b/proton-c/bindings/ruby/lib/reactor/connector.rb @@ -21,10 +21,10 @@ module Qpid::Proton::Reactor class Connector < Qpid::Proton::BaseHandler - def initialize(connection, url, opts) - @connection, @opts = connection, opts + def initialize(connection, url, options) + @connection, @options = connection, options @urls = URLs.new(url) if url - opts.each do |k,v| + options.each do |k,v| case k when :url, :urls, :address @urls = URLs.new(v) unless @urls @@ -80,7 +80,7 @@ module Qpid::Proton::Reactor def connect(connection) url = @urls.next transport = Qpid::Proton::Transport.new - @opts.each do |k,v| + @options.each do |k,v| case k when :user connection.user = v http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/reactor/container.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/reactor/container.rb b/proton-c/bindings/ruby/lib/reactor/container.rb index 2828bb9..fbe199e 100644 --- a/proton-c/bindings/ruby/lib/reactor/container.rb +++ b/proton-c/bindings/ruby/lib/reactor/container.rb @@ -47,19 +47,18 @@ module Qpid::Proton::Reactor include Qpid::Proton::Util::Reactor - include Qpid::Proton::Util::UUID - attr_accessor :container_id attr_accessor :global_handler - def initialize(handlers, options = {}) - super(handlers, options) + def initialize(handlers, opts = {}) + super(handlers, opts) # only do the following if we're creating a new instance - if !options.has_key?(:impl) + if !opts.has_key?(:impl) + @container_id = String.new(opts[:container_id] || SecureRandom.uuid).freeze @ssl = SSLConfig.new - if options[:global_handler] - self.global_handler = GlobalOverrides.new(options[:global_handler]) + if opts[:global_handler] + self.global_handler = GlobalOverrides.new(opts[:global_handler]) else # very ugly, but using self.global_handler doesn't work in the constructor ghandler = Reactor.instance_method(:global_handler).bind(self).call @@ -67,7 +66,6 @@ module Qpid::Proton::Reactor Reactor.instance_method(:global_handler=).bind(self).call(ghandler) end @trigger = nil - @container_id = generate_uuid end end @@ -95,72 +93,41 @@ module Qpid::Proton::Reactor # @return [Connection] the new connection # def connect(url, opts = {}) - # Backwards compatible with old connect(options) + # Backwards compatible with old connect(opts) if url.is_a? Hash and opts.empty? opts = url url = nil end conn = self.connection(opts[:handler]) - conn.container = self.container_id || generate_uuid connector = Connector.new(conn, url, opts) return conn end - private - def _session(context) - if context.is_a?(Qpid::Proton::URL) - return _session(self.connect(:url => context)) - elsif context.is_a?(Qpid::Proton::Session) - return context - elsif context.is_a?(Qpid::Proton::Connection) - if context.session_policy? - return context.session_policy.session(context) - else - return self.create_session(context) - end - else - return context.session - end - end - - public # Initiates the establishment of a link over which messages can be sent. # # @param context [String, URL] The context. - # @param opts [Hash] Additional options. - # @option opts [String, Qpid::Proton::URL] The target address. - # @option opts [String] :source The source address. - # @option opts [Boolean] :dynamic - # @option opts [Object] :handler - # @option opts [Object] :tag_generator The tag generator. - # @option opts [Hash] :options Addtional link options + # @param opts [Hash] Additional opts. + # @param opts [String] :target The target address. + # @param opts [String] :source The source address. + # @param opts [Boolean] :dynamic + # @param opts [Object] :handler # # @return [Sender] The sender. # - def create_sender(context, opts = {}) + def open_sender(context, opts = {}) if context.is_a?(::String) context = Qpid::Proton::URL.new(context) end - - target = opts[:target] - if context.is_a?(Qpid::Proton::URL) && target.nil? - target = context.path + if context.is_a?(Qpid::Proton::URL) + opts[:target] ||= context.path end - session = _session(context) - - sender = session.sender(opts[:name] || - id(session.connection.container, - target, opts[:source])) - sender.source.address = opts[:source] if !opts[:source].nil? - sender.target.address = target if target - sender.handler = opts[:handler] if !opts[:handler].nil? - sender.tag_generator = opts[:tag_generator] if !opts[:tag_gnenerator].nil? - _apply_link_options(opts[:options], sender) - sender.open - return sender + return _session(context).open_sender(opts) end + # @deprecated use @{#open_sender} + alias_method :create_sender, :open_sender + # Initiates the establishment of a link over which messages can be received. # # There are two accepted arguments for the context @@ -172,41 +139,29 @@ module Qpid::Proton::Reactor # # The name will be generated for the link if one is not specified. # - # @param context [Connection, URL, String] The connection or the address. - # @param opts [Hash] Additional otpions. - # @option opts [String, Qpid::Proton::URL] The source address. + # @param context [Connection, URL, String] The connection or the connection address. + # @param opts [Hash] Additional opts. + # @option opts [String] :source The source address. # @option opts [String] :target The target address # @option opts [String] :name The link name. # @option opts [Boolean] :dynamic # @option opts [Object] :handler - # @option opts [Hash] :options Additional link options. # - # @return [Receiver + # @return [Receiver] # - def create_receiver(context, opts = {}) + def open_receiver(context, opts = {}) if context.is_a?(::String) context = Qpid::Proton::URL.new(context) end - - source = opts[:source] - if context.is_a?(Qpid::Proton::URL) && source.nil? - source = context.path + if context.is_a?(Qpid::Proton::URL) + opts[:source] ||= context.path end - - session = _session(context) - - receiver = session.receiver(opts[:name] || - id(session.connection.container, - source, opts[:target])) - receiver.source.address = source if source - receiver.source.dynamic = true if opts.has_key?(:dynamic) && opts[:dynamic] - receiver.target.address = opts[:target] if !opts[:target].nil? - receiver.handler = opts[:handler] if !opts[:handler].nil? - _apply_link_options(opts[:options], receiver) - receiver.open - return receiver + return _session(context).open_receiver(opts) end + # @deprecated use @{#open_sender} + alias_method :create_receiver, :open_receiver + def declare_transaction(context, handler = nil, settle_before_discharge = false) if context.respond_to? :txn_ctl && !context.__send__(:txn_ctl).nil? class << context @@ -239,26 +194,25 @@ module Qpid::Proton::Reactor private - def id(container, remote, local) - if !local.nil? && !remote.nil? - "#{container}-#{remote}-#{local}" - elsif !local.nil? - "#{container}-#{local}" - elsif !remote.nil? - "#{container}-#{remote}" + def _session(context) + if context.is_a?(Qpid::Proton::URL) + return _session(self.connect(:url => context)) + elsif context.is_a?(Qpid::Proton::Session) + return context + elsif context.is_a?(Qpid::Proton::Connection) + return context.default_session else - "#{container}-#{generate_uuid}" + return context.session end end - def _apply_link_options(options, link) - if !options.nil? && !options.empty? - if !options.is_a?(::List) - options = [Options].flatten - end + def do_work(timeout = nil) + self.timeout = timeout unless timeout.nil? + self.process + end - options.each {|option| o.apply(link) if o.test(link)} - end + def _apply_link_opts(opts, link) + opts.each {|o| o.apply(link) if o.test(link)} end def to_s http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/reactor/link_option.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/reactor/link_option.rb b/proton-c/bindings/ruby/lib/reactor/link_option.rb index 628a811..2066bab 100644 --- a/proton-c/bindings/ruby/lib/reactor/link_option.rb +++ b/proton-c/bindings/ruby/lib/reactor/link_option.rb @@ -64,9 +64,9 @@ module Qpid::Proton::Reactor def apply(link) if link.receiver? - link.source.properties.dict = @properties + link.source.properties.object = @properties else - link.target.properties.dict = @properties + link.target.properties.object = @properties end end end @@ -77,14 +77,9 @@ module Qpid::Proton::Reactor end def apply(receiver) - receiver.source.filter.dict = @filter_set + receiver.source.filter.object = @filter_set end - end - #class Selector < Filter - # def initialize(value, name = 'selector') - # - # end - #end + end end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/lib/util/uuid.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/util/uuid.rb b/proton-c/bindings/ruby/lib/util/uuid.rb deleted file mode 100644 index 882715b..0000000 --- a/proton-c/bindings/ruby/lib/util/uuid.rb +++ /dev/null @@ -1,32 +0,0 @@ -#-- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -#++ - -module Qpid::Proton::Util - - module UUID - - def generate_uuid - # generate a UUID based on what APIs are available with the current - # version of Ruby - SecureRandom.uuid - end - - end - -end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/spec/array_spec.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/spec/array_spec.rb b/proton-c/bindings/ruby/spec/array_spec.rb index 5d91f1a..3bfe559 100644 --- a/proton-c/bindings/ruby/spec/array_spec.rb +++ b/proton-c/bindings/ruby/spec/array_spec.rb @@ -39,7 +39,7 @@ describe "The extended array type" do end it "raises an error when putting into a nil Data object" do - expect { @list.proton_put(nil) }.must_raise + expect { @list.proton_put(nil) }.must_raise(TypeError) end it "raises an error when getting from a nil Data object" do http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b3d1b074/proton-c/bindings/ruby/tests/test_smoke.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/tests/test_smoke.rb b/proton-c/bindings/ruby/tests/test_smoke.rb deleted file mode 100755 index 61cc7cf..0000000 --- a/proton-c/bindings/ruby/tests/test_smoke.rb +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env ruby - -require 'minitest/autorun' -require 'minitest/unit' -require 'qpid_proton' - -class SmokeTest < MiniTest::Test - - Messenger = Qpid::Proton::Messenger::Messenger - Message = Qpid::Proton::Message - - def setup - @server = Messenger.new() - @client = Messenger.new() - @server.blocking = false - @client.blocking = false - @server.subscribe("~0.0.0.0:12345") - @server.start() - @client.start() - pump() - end - - def pump - while (@server.work(0) or @client.work(0)) do end - end - - def teardown - @server.stop() - @client.stop() - - pump() - - assert @client.stopped? - assert @server.stopped? - end - - def testSmoke(count=10) - msg = Message.new() - msg.address = "0.0.0.0:12345" - - @server.receive() - - count.times {|i| - msg.body = "Hello World! #{i}" - @client.put(msg) - } - - msg2 = Message.new() - - count.times {|i| - if (@server.incoming == 0) then - pump() - end - @server.get(msg2) - assert msg2.body == "Hello World! #{i}" - } - - assert(@client.outgoing == 0, - "Expected 0 outgoing messages, found #{@client.outgoing}") - assert(@server.incoming == 0, - "Expected 0 incoming messages, found #{@server.incoming}") - end - -end --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org