#
# Sample : put() : Put a message to a queue with a Refernce header
#          Open the queue so that multiple puts can be performed
#
require 'rubygems'
require 'wmq'

# The Rules Format header (MQRFH) allows a list of name value pairs to be sent along
# with a WMQ message. These name value pairs are represented as follows on the "wire":
#   Name1 Value1 Name2 Value2 Name3 Value3
#
# Ruby WMQ converts the above string of data into a Ruby hash by
# using the name as the key, as follows:
# data = {
#    'Name1' => 'Value1',
#    'Name2' => 'Value2',
#    'Name3' => 'Value3'
# }
#
# Since a name can consist of any character except null, it is stored as a String
#
# Note: It is possible to send or receive the same Name with multiple values using an array.
#   E.g.   Name1 Value1 Name2 Value2 Name1 Value3
#   Becomes:
# data = {
#    'Name1' => ['Value1', 'Value3'],
#    'Name2' => 'Value2'
# }
#
# Note: Since a Hash does not preserve order, reading a Rules Format Header and then writing
#       it out immediately again could result in re-ordering of the name value pairs.
#

WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
  qmgr.open_queue(:q_name=>'TEST.QUEUE', :mode=>:output) do |queue|
    message = WMQ::Message.new
    message.data = 'Hello World'

    message.headers = [
     {:header_type =>:rf_header,
      :name_value => {'name1' => 'value1',
                      'name2' => 'value2',
                      'name3' => ['value 3a', 'value 3b']}
     }]

    message.descriptor[:format] = WMQ::MQFMT_STRING

    queue.put(:message=>message)
  end
end

