Search code examples
rubysoapsavon

How to pass Array as parameter to SOAP in Ruby


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


Solution

  • 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