# Puzzling over why ri can open the std ruby/ri .yaml files, b

**URL:** <https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612>\
**Category:** Ruby\
**Created:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612 "2006-11-07T10:50:05Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![epasquier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/2bfe46/32.png) [@epasquier](https://www.ruby-forum.com/u/epasquier)\
**Post date:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612/1 "2006-11-07T10:50:05Z")

</div>

If I run \<\>, no problem.

But with this code:

##########  
require ‘yaml’  
require ‘pp’

class RiFinder  
def initialize(sysdir)  
@sysdir = sysdir  
end

def get\_class\_info(clsName, info)  
clsFile = “#{@sysdir}/#{clsName}/cdesc-#{clsName}.yaml”  
puts “About to yaml \<\<#{clsFile}\>\>”  
clsInfo = File.open(clsFile) { |io| YAML.load(io) }  
pp clsInfo  
end  
end

rifinder = RiFinder.new(“c:/ruby/share/ri/1.8/system”, nil, nil)  
rifinder.get\_class\_info(“Abbrev”, nil)

#===========

About to yaml \<\<c:/ruby/share/ri/1.8/system/Abbrev/cdesc-Abbrev.yaml\>\>  
I get this error:  
c:/ruby/lib/ruby/1.8/yaml.rb:133:in `transfer': invalid subclass (TypeError) from c:/ruby/lib/ruby/1.8/yaml.rb:133:in `load’  
from get\_yaml\_info.rb:19:in `get_class_info' from get_yaml_info.rb:19:in `get\_class\_info’  
from get\_yaml\_info.rb:25

ruby 1.8.4 (2006-04-14) [i386-mswin32]

It’s the same code, and I don’t see ri setting any options in the YAML  
namespace  
telling it to process types like “!ruby/struct:SM::Flow::P”  
differently, although I gather  
this is the problem.

Any advice?

I can use yaml.rb to read back files I’ve written out with it. The  
problem is with the  
rdoc files. But it works when I go through ri (after adding the bug  
fix at line 99  
of ri\_descriptions.rb given in  
[http://ruby.about.com/od/gettingstarted/qt/ruby\_ri.htm](http://ruby.about.com/od/gettingstarted/qt/ruby_ri.htm)).

Thanks,  
Eric

---

<div class="post-metadata">

**Author:** ![epasquier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/2bfe46/32.png) [@epasquier](https://www.ruby-forum.com/u/epasquier)\
**Post date:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612/2 "2006-11-07T10:50:11Z")

</div>

Simple workaround…

clsInfo = YAML.load(File.open(clsFile) { |io| io.read.gsub(/- !.\*/, '-  
') }

But I’d still appreciate hearing the cause for this bug.

Happens with the stock Ruby 1.8.2 on OS X 10.4 running on an i386,  
but with a different error message.

- Eric

---

<div class="post-metadata">

**Author:** ![epasquier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/2bfe46/32.png) [@epasquier](https://www.ruby-forum.com/u/epasquier)\
**Post date:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612/3 "2006-11-07T10:50:15Z")

</div>

On Oct 31, 2006, at 1:05 PM, Eric P. wrote:

> ```
> @sysdir = sysdir
> 
> ```
> 
> rifinder = RiFinder.new(“c:/ruby/share/ri/1.8/system”, nil, nil)  
> rifinder.get\_class\_info(“Abbrev”, nil)

Because you need to load/define all the classes it is trying to  
deserialize. yaml doesn’t know where they are. Just pop in the  
appropriate requires up top and get rid of your munger.

FWIW, I went the munging route for risearch and for that matter…  
you seem to be writing much of the same sort of thing. Check my blog  
for the code. I’ll release it to seattlerb sooner or later.

---

<div class="post-metadata">

**Author:** ![epasquier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/2bfe46/32.png) [@epasquier](https://www.ruby-forum.com/u/epasquier)\
**Post date:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612/4 "2006-11-07T10:50:18Z")

</div>

Thanks, Ryan,

require ‘rdoc/markup/simple\_markup/to\_flow’

does it, no munging needed. Now if you can tell me how to setup the  
current release of cygwin on a win box to build mozilla you’ll have  
totally made my day. In the meantime, running a find script to zap  
all the 13s out of each .sh file seems to be the way to go. Right,  
wrong newsgroup…

- Eric

This seems wrong though. I want to load a set of YAML descriptions  
I didn’t write, and I need to know all possible subtypes

---

<div class="post-metadata">

**Author:** ![epasquier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/2bfe46/32.png) [@epasquier](https://www.ruby-forum.com/u/epasquier)\
**Post date:** [November 7, 2006, 10:50am UTC](https://www.ruby-forum.com/t/puzzling-over-why-ri-can-open-the-std-ruby-ri-yaml-files-b/74612/5 "2006-11-07T10:50:16Z")

</div>

On Wed, Nov 01, 2006 at 06:05:12AM +0900, Eric P. wrote:

> It’s the same code, and I don’t see ri setting any options in the YAML  
> namespace telling it to process types like “!ruby/struct:SM::Flow::P”  
> differently, although I gather this is the problem.
> 
> Any advice?

$ cat ri-problem.rb  
require ‘yaml’  
require ‘pp’

class RiFinder  
def initialize(sysdir)  
@sysdir = sysdir  
end

def get\_class\_info(clsName, info)  
clsFile = “#{@sysdir}/#{clsName}/cdesc-#{clsName}.yaml”  
puts “About to yaml \<\<#{clsFile}\>\>”  
clsInfo = File.open(clsFile) { |io| YAML.load(io) }  
pp clsInfo  
end  
end

rifinder = RiFinder.new("/usr/share/ri/1.8/system/")  
rifinder.get\_class\_info(“Abbrev”, nil)

$ ruby ri-problem.rb  
About to yaml \<\</usr/share/ri/1.8/system//Abbrev/cdesc-Abbrev.yaml\>\>  
/home/batsman/usr//lib/ruby/1.8/yaml.rb:133:in `transfer': invalid subclass (TypeError) from /home/batsman/usr//lib/ruby/1.8/yaml.rb:133:in`node\_import’  
from /home/batsman/usr//lib/ruby/1.8/yaml.rb:133:in `load' from /home/batsman/usr//lib/ruby/1.8/yaml.rb:133:in`load’  
from ri-problem.rb:12:in `get_class_info' from ri-problem.rb:12:in`open’  
from ri-problem.rb:12:in `get\_class\_info’  
from ri-problem.rb:18  
$ echo ‘require “rdoc/ri/ri\_reader”’ | cat - ri-problem.rb \>  
ri-no-problem.rb  
$ ruby ri-no-problem.rb  
About to yaml \<\</usr/share/ri/1.8/system//Abbrev/cdesc-Abbrev.yaml\>\>  
#\<RI::ClassDescription:0xa7db27f0  
@attributes=[],  
@class\_methods=[],  
@comment=  
[#,  
#,  
#,  
#,  
#],  
@constants=[],  
@full\_name=“Abbrev”,  
@includes=[],  
@instance\_methods=[#\<RI::MethodSummary:0xa7db3024 @name=“abbrev”\>],  
@name=“Abbrev”,  
@superclass=nil\>
