Net::HTTPResponse в Ruby 1.9.3 -- как *не* надо депрекейтить методы
April 22, 2012 in Ruby on RailsВот эта ошибка заняла два часа моего времени.
В чем суть? Такая запись работала в Ruby 1.8.7 и перестала работать в Ruby 1.9.3
response, body = Net::HTTP.start(host) {|h| h.post(path,data)}
Метод post
возвращает объект Net::HTTPResponse
. Поскольку он присваивается не одной, а двум переменным, он неявным образом преобразовывается в массив.
В Ruby 1.8.7 есть метод Net::HTTPResponse#to_ary. Он и разбивает response на две переменные. Он же предупреждает о том, что такая запись устарела и неверна:
net/http.rb: warning: Net::HTTP v1.1 style assignment found at #{caller(1)[0]}; use `response = http.get(...)' instead.
Но в Ruby 1.9.3 этот метод просто выпилен вместе с предупреждением. Проблема в том, что неявное преобразование в массив все равно работает, и назначается только первая переменная из списка.
Мое мнение, что надо было в to_ary
кидать громкий и заметный эксепшен.
Понравился пост? Купи мне кофе