This "solution" feels rather like cheating, but I did discover the
lovely Facets library in the process, which I'm sure I'll be using
again.

===
require 'yaml'
require 'ostruct'
require 'rubygems'
require 'facet/hash/to_ostruct_recurse'

ostruct = YAML.load(File.open("example.yaml")).to_ostruct_recurse
===

--Alison