tags:

views:

84

answers:

1

Currently I'm using Savon to work with WebService in ruby. It works pretty well but I have difficulty to pass parameter for argument of SOAP array type. Following code doesn't work properly:

ids = [0,1,2]
client.do_get_items { |soap| soap.body = {
    'item-list' => ids
}

I would appreciate if you can solve my problem or propose an alternative library for ruby&soap

+1  A: 

I just stumbled on the same problem and the temporary workaround that worked for me is as follows:

ids = [0,1,2]
client.do_get_items { |soap| soap.body = {
  'item-list' => {
    'item1' => 0,
    'item2' => 1,
    'item3' => 2
  }  
}

The names "item1", "item2" shouldn't matter at all.

I use the following helper method to convert regular arrays into SOAP mess:

def soap_array(array)
  returning({}) do |hash|
    array.each_with_index do |e, i|
      hash["item-#{i}"] = e
    end
  end
end
Jacek Becela
Good advice, though it may not always be enough. Some SOAP servers also ask for SOAP-ENC:Array or similar attributes. Savon support for arrays is still very limited.
tokland