y object
Rails 3.2.6 / Ruby 1.9.3コンソールでActiveRecordオブジェクトの適切にフォーマットされたyaml出力を取得しようとしていますが、何らかの理由で機能しません。過去に使ったことがありますが、途中で壊れてしまいました。試してみると、次の出力が得られます。
NameError: undefined local variable or method `yaml' for main:Object
y object
Rails 3.2.6 / Ruby 1.9.3コンソールでActiveRecordオブジェクトの適切にフォーマットされたyaml出力を取得しようとしていますが、何らかの理由で機能しません。過去に使ったことがありますが、途中で壊れてしまいました。試してみると、次の出力が得られます。
NameError: undefined local variable or method `yaml' for main:Object
このy
メソッドは、実際にはSyckYAMLパーサー/エミッターKernel
によって配置されたオブジェクトの拡張です。これが最後の数行です: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はSyckの代わりにPsychパーサー/エミッターを使用し(発音が異なると推測できます)、Psychはそのようなメソッドを宣言していません。
本当に気に入った場合y
は、コンソールでPsychの代わりにSyckを使用できます。
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/ルビー2の場合は、
puts object.to_yaml