From: Ohad Lutzky Date: 2006-05-01T21:05:55+09:00 Subject: YAML in limbo? When I was writing a simple DNS Sniffer/IDS (for a university project), I wanted to be able to export DNS responses to YAML, for later comparison (to detect spoofing). The IPAddr class was widely used within the project - however, its YAML export looks like this: irb(main):002:0> i = IPAddr.new('127.0.0.1') => # irb(main):003:0> y i --- !ruby/object:IPAddr addr: 2130706433 family: 2 mask_addr: 340282366920938463463374607431768211455 After much effort, I figured out how to get it to export like this: --- !ruby/ipaddr 64.233.167.99 This was done with the following code: class IPAddr def to_yaml_type "!ruby/ipaddr" end def to_yaml( opts = {} ) YAML::quick_emit(self.object_id, opts) { |out| out << "#{to_yaml_type} " self.to_s.to_yaml(:Emitter => out) } end end YAML.add_ruby_type(/^ipaddr/) { |type, val| IPAddr.new(val) } This works just fine in Ruby 1.8.3 (Syck 0.45), but b0rks completely in 1.8.4 (Syck 0.6). The +out+ stream no longer has a << operator, and there is a pretty obvious error in the add_ruby_type method, which seems to be unused. Now, _why says that the new version is much smarter about these kinds of things, but the documentation is currently [even more] lacking [than the previous versions']. So my question splits into two parts: - How can I make my code work in the new version? (preferably backwards-compatibly) - What's up with the docs? -- Posted via http://www.ruby-forum.com/.