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).
Thanks,
Eric
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.
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.
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…
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
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>