summaryrefslogtreecommitdiff
path: root/cpp/bindings/qpid/ruby
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2011-07-15 16:58:20 +0000
committerTed Ross <tross@apache.org>2011-07-15 16:58:20 +0000
commitfeeba1d6a71494c19d71f903d7f9d735881343ec (patch)
tree188c6b174602f82699dfd65621dad765f0116d0d /cpp/bindings/qpid/ruby
parent7cff9ce1ed874ced2f7c195b48399af8dc01c611 (diff)
downloadqpid-python-feeba1d6a71494c19d71f903d7f9d735881343ec.tar.gz
QPID-3306 - Provides a more Ruby-like set of APIs on top of the bindings created by swig.
Applied patch from Darryl Pierce Created the Ruby bindings for Address. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1147240 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/bindings/qpid/ruby')
-rw-r--r--cpp/bindings/qpid/ruby/lib/qpid.rb1
-rw-r--r--cpp/bindings/qpid/ruby/lib/qpid/address.rb125
-rw-r--r--cpp/bindings/qpid/ruby/test/test_address.rb39
-rw-r--r--cpp/bindings/qpid/ruby/test/ts_bindings.rb1
4 files changed, 166 insertions, 0 deletions
diff --git a/cpp/bindings/qpid/ruby/lib/qpid.rb b/cpp/bindings/qpid/ruby/lib/qpid.rb
index 725fa45f77..f9d5822bbd 100644
--- a/cpp/bindings/qpid/ruby/lib/qpid.rb
+++ b/cpp/bindings/qpid/ruby/lib/qpid.rb
@@ -19,5 +19,6 @@
require 'qpid/errors'
require 'qpid/duration'
+require 'qpid/address'
require 'qpid/encoding'
diff --git a/cpp/bindings/qpid/ruby/lib/qpid/address.rb b/cpp/bindings/qpid/ruby/lib/qpid/address.rb
new file mode 100644
index 0000000000..73b61bb1c7
--- /dev/null
+++ b/cpp/bindings/qpid/ruby/lib/qpid/address.rb
@@ -0,0 +1,125 @@
+#
+# 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.
+#
+
+require 'cqpid'
+
+module Qpid
+
+ module Messaging
+
+ # Address represents an address to which messages can be sent or from
+ # which they can be received.
+ #
+ # An Address can be described using the following pattern:
+ #
+ # <address> [ / <subject> ] ; [ { <key> : <value> , ... } ]
+ #
+ # where *address* is a simple name and *subject* is a subject or subject
+ # pattern.
+ #
+ # The options, enclosed in curly braces, are key:value pairs delimited by
+ # a comma. The values can be nested maps also enclosed in curly braces.
+ # Or they can be lists of values, where they are contained within square
+ # brackets but still comma delimited, such as:
+ #
+ # [value1,value2,value3]
+ #
+ # The following are the list of supported options:
+ #
+ # create:: Indicates if the address should be created; values are *always*,
+ # *never*, *sender* or *reciever*.
+ #
+ # assert:: Indicates whether or not to assert any specified node properties;
+ # values are *always*, *never*, *sender* or *receiver*.
+ #
+ # delete:: Indicates whether or not to delete the addressed node when a
+ # sender or receiver is cancelled; values are *always*, *never*,
+ # *sender* or *receiver*.
+ #
+ # node:: A nested map describing properties for the addressed node.
+ # Properties are *type* (*topic* or *queue*), *durable* (a boolean),
+ # *x-declare* (a nested map of amqp 0.10-specific options) and
+ # *x-bindings*. (nested list which specifies a queue, exchange or
+ # a binding key and arguments.
+ #
+ # link:: A nested map through which properties of the link can be specified;
+ # properties are *durable*, *reliability*, *x-declare*, *x-subscribe*
+ # and *x-bindings*.
+ #
+ # mode:: (*For receivers only*) indicates whether the receiver should consume
+ # or browse messages; values are *consume* (the default) and *browse*.
+ class Address
+
+ def initialize(name, subject, options = {}, _type = "", address_impl = nil)
+ @address_impl = address_impl || Cqpid::Address.new(name, subject, convert_options(options), _type)
+ end
+
+ def address_impl # :nodoc:
+ @address_impl
+ end
+
+ # Returns the name.
+ def name; @address_impl.getName; end
+
+ # Sets the name.
+ def name=(name); @address_impl.setName name; end
+
+ # Returns the subject.
+ def subject; @address_impl.getSubject; end
+
+ # Sets the subject.
+ def subject=(subject); @address_impl.setSubject(subject); end
+
+ # Returns the type.
+ #---
+ # We cannot use "type" since that clashes with the Ruby object.type
+ # identifier.
+ def _type; @address_impl.getType; end
+
+ # Sets the type.
+ #
+ # The type of the address determines how Sender and Receiver objects
+ # are constructed for it. If no type is specified then it will be
+ # determined by querying the broker.
+ def _type=(_type); @address_impl.setType(_type); end
+
+ # Returns the options.
+ def options; @address_impl.getOptions; end
+
+ # Sets the options for the address.
+ # Any symbols are converted to strings.
+ def options=(options); @address_impl.setOptions(convert_options(options)); end
+
+ def to_s; @address_impl.str; end
+
+ private
+
+ def convert_options(options)
+ result = {}
+ options.each_pair {|key, value| result[key.to_s] = value.to_s}
+
+ return result
+ end
+
+ end
+
+ end
+
+end
+
diff --git a/cpp/bindings/qpid/ruby/test/test_address.rb b/cpp/bindings/qpid/ruby/test/test_address.rb
new file mode 100644
index 0000000000..f54e93aa3d
--- /dev/null
+++ b/cpp/bindings/qpid/ruby/test/test_address.rb
@@ -0,0 +1,39 @@
+#
+# 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.
+#
+
+$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
+
+require 'test/unit'
+require 'flexmock/test_unit'
+
+require 'cqpid'
+require 'qpid/address'
+
+class TestAddress < Test::Unit::TestCase
+
+ def test_constructor
+ result = Qpid::Messaging::Address.new "name", "subject", {:foo => :bar}, "type"
+
+ assert_equal "name", result.name
+ assert_equal "subject", result.subject
+ assert_equal "type", result._type
+ end
+
+end
+
diff --git a/cpp/bindings/qpid/ruby/test/ts_bindings.rb b/cpp/bindings/qpid/ruby/test/ts_bindings.rb
index 68af26786e..750d335b3b 100644
--- a/cpp/bindings/qpid/ruby/test/ts_bindings.rb
+++ b/cpp/bindings/qpid/ruby/test/ts_bindings.rb
@@ -21,4 +21,5 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
require 'test/unit'
require 'test_encoding'
+require 'test_address'