From: "Hanmac (Hans Mackowiak)" Date: 2013-02-20T21:53:41+09:00 Subject: [ruby-core:52577] [ruby-trunk - Bug #7893] Issues with loading YAML and respond_to_missing? Issue #7893 has been updated by Hanmac (Hans Mackowiak). the problem is in yaml: to_ruby.rb "if o.respond_to?(:init_with)" so eigher you need to define a init_with method or def respond_to_missing?(m, include_private = false) (@attributes && @attributes.key?(m)) || super end ---------------------------------------- Bug #7893: Issues with loading YAML and respond_to_missing? https://bugs.ruby-lang.org/issues/7893#change-36671 Author: injekt (Lee Jarvis) Status: Open Priority: Normal Assignee: Category: core 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/