Используя Savon 2.12.0, несколько ответов поступают в массив, но один ответ - это хеш - PullRequest
0 голосов
/ 07 сентября 2018

Я успешно вызываю операцию, используя Savon для получения данных от конечной точки SOAP. Каждый возвращаемый объект является хешем ~ 15 элементов.

Когда API необходимо вернуть несколько объектов, он возвращает их в массиве, например: data = [{key1a => val1a, key1b => val1b, key1c => val1c}, {key2a => val2a, key2b => val2b, key2c => val2c}, {key3a => val3a, key3b ​​=> val3b, key3c = > val3c}]

Это позволяет мне перебирать ответы с data.each, а затем разбивать хеш внутри блока.

Если я получаю один ответ, он возвращает только хэш, не заключенный в массив. Это означает, что когда я запускаю .each против него, он смотрит на элементы Hash (key1a и т. Д.)

data = {key => val, key2 => val2, key3 => val3}

Чтобы обойти это, мне пришлось запустить .class для возвращаемого объекта и обращаться с ним по-разному, если это массив или хэш.

Я посмотрел на необработанные возвращенные данные из API, и структура разметки выглядит одинаково, поэтому я подозреваю, что это поведение Savon больше, чем поведение API.

Есть ли способ изменить это? Не уверен, что это «ошибка» как таковая, но, безусловно, делает мой код более запутанным, чем нужно.

1 Ответ

0 голосов
/ 08 сентября 2018

вы можете использовать оператор splat

data = *{ key: 'val', key2: 'val2', key3: 'val3' }

, он преобразует хеш в массив массивов.Я использовал это много в моих источниках Savon.

...