From: "drbrain (Eric Hodel)" Date: 2013-02-22T08:00:29+09:00 Subject: [ruby-core:52639] [ruby-trunk - Bug #7893][Rejected] Issues with loading YAML and respond_to_missing? Issue #7893 has been updated by drbrain (Eric Hodel). Category changed from core to ext Status changed from Open to Rejected Assignee set to tenderlovemaking (Aaron Patterson) As Hanmac noted, this exception is possible with Person.allocate.respond_to? which is exactly what Psych does. Perhaps Psych needs some documentation improvement around dump and load. ---------------------------------------- Bug #7893: Issues with loading YAML and respond_to_missing? https://bugs.ruby-lang.org/issues/7893#change-36722 Author: injekt (Lee Jarvis) Status: Rejected Priority: Normal Assignee: tenderlovemaking (Aaron Patterson) Category: ext Target version: ruby -v: 1.9.3p385 This is perhaps not a bug, I could be missing something, but shouldn't the following code work? require 'yaml' class Person def initialize(name) @attributes = { name: name } end def method_missing(m, *args, &block) @attributes.key?(m) ? @attributes[m] : super end def respond_to_missing?(m, include_private = false) @attributes.key?(m) || super end end dump = YAML.dump Person.new("lee") load = YAML.load dump The YAML.dump appears to work as expected, yet when I attempt to `load` the dump back, I get the following exception: /Users/lee/bin/rb:15:in `respond_to_missing?': undefined method `key?' for nil:NilClass (NoMethodError) from /Users/lee/.rubies/1.9.3-p385/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:291:in `respond_to?' from /Users/lee/.rubies/1.9.3-p385/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:291:in `init_with' from /Users/lee/.rubies/1.9.3-p385/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:284:in `revive' However doing the same thing with JSON for example, works fine: https://gist.github.com/injekt/0a4aa3e25f09ae2f8cba -- http://bugs.ruby-lang.org/