Помощник y'а консоли Rails возвращает NameError вместо вывода в формате yaml
Я пытаюсь использовать y object
в консоли Rails 3.2.6/Ruby 1.9.3 получить красиво отформатированный вывод yaml для объекта ActiveRecord, но по какой-то причине он не работает для меня. Я использовал это в прошлом, но где-то по пути это сломалось. Я получаю следующий вывод при попытке:
NameError: undefined local variable or method `yaml' for main:Object
2 ответа
y
Метод на самом деле является продолжением Kernel
объект, помещенный в синтаксический анализатор / эмиттер Syck YAML. Вот последние несколько строк lib/ruby/1.9.1/syck.rb
:
module Kernel
def y( object, *objects )
objects.unshift object
puts( if objects.length == 1
YAML.dump( *objects )
else
YAML.dump_stream( *objects )
end )
end
private :y
end
По умолчанию Ruby 1.9.3 использует синтаксический анализатор / излучатель Psych вместо Syck (я могу только предположить, что они произносятся по-разному), и Psych не объявляет такой метод.
Если вы действительно любили y
Вы можете просто использовать Syck вместо Psych в консоли:
Loading development environment (Rails 3.2.5)
1.9.3p194 :001 > y 'hello'
NoMethodError: undefined method 'y' for main:Object
1.9.3p194 :002 > YAML::ENGINE.yamler = 'syck'
"syck"
1.9.3p194 :003 > y 'hello'
--- hello
nil
Я также воспользуюсь этой возможностью, чтобы подключить awesome_print, который делает практически все, что y
делает для YAML.
Для рельсов 4/ruby 2 вы можете использовать только
puts object.to_yaml