Net::HTTPResponse в Ruby 1.9.3 -- как *не* надо депрекейтить методы

April 22, 2012 Ruby Ruby 1.9 Ruby 1.9.3

Вот эта ошибка заняла два часа моего времени.

В чем суть? Такая запись работала в 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 кидать громкий и заметный эксепшен.

Buy Me a Coffee at ko-fi.com