On 28.04.2007 05:37, Bino Oetomo wrote:
> Dear All.
> 
> I'm learning to use yaml4r
> A friend of me, give a simple script for starting point, i save it as
> lyaml01
> 
> ---------Start lyaml01-----
> Nota = Struct.new(:nomor, :items)
> Item = Struct.new(:description, :quantity, :satuan, :harga_satuan,
> :total)
> 
> nota1 = Nota.new('nota-123', [])
> nota1.items << Item.new('gula', 2, 'kg', 100, 2*100)
> nota1.items << Item.new('kopi', 3, 'kg', 500, 3*500)
> 
> # convert to yaml string
> yaml_str = nota1.to_yaml
> 
> puts '--- save to file ---'
> open("/mnt/ramdisk0/yaml_file.yml", "w") do |file|
>   file.write(yaml_str)
>         puts '--- close the file ---'
>         file.close
> end
> 
> puts '--- reading yaml from file ---'
> nota = YAML::load(IO.read("/mnt/ramdisk0/yaml_file.yml"))
> puts '---- display it ----'
> puts nota
> puts '--- display part ---'
> puts nota.nomor
> 
> ---------Stop Lyaml01 -----
> 
> Next, I try to run that script :
> 
> ---Start lyaml01 run-----
> 
> 
> [root@kannel blajarruby]# ruby ./lyaml01
> --- save to file ---
> --- close the file ---
> --- reading yaml from file ---
> ---- display it ----
> #<struct Nota nomor="nota-123", items=[#<struct Item description="gula",
> quantity=2, satuan="kg", harga_satuan=100, total=200>, #<struct Item
> description="kopi", quantity=3, satuan="kg", harga_satuan=500,
> total=1500>]>
> --- display part ---
> nota-123
> 
> ---Stop lyaml01 run-----
> 
> hmmm look nice
> 
> And here is the result file generated by that script :
> 
> ----Start /mnt/ramdisk0/yaml_file.yml ----
> [root@kannel blajarruby]# more /mnt/ramdisk0/yaml_file.yml
> --- !ruby/struct:Nota
> nomor: nota-123
> items:
> - !ruby/struct:Item
>   description: gula
>   quantity: 2
>   satuan: kg
>   harga_satuan: 100
>   total: 200
> - !ruby/struct:Item
>   description: kopi
>   quantity: 3
>   satuan: kg
>   harga_satuan: 500
>   total: 1500
> 
> ----Stop /mnt/ramdisk0/yaml_file.yml ----
> 
> 
> Next i make a copy , just specific on the  "YAML::load" part, to try
> re-read the generated file via IRB :
> 
> ----Start load yaml irb ------
> 
> [root@kannel blajarruby]# irb
> irb(main):002:0> require 'yaml'
> => true
> irb(main):003:0> nota =
> YAML::load(IO.read("/mnt/ramdisk0/yaml_file.yml"))
> TypeError: invalid subclass
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `transfer'
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `node_import'
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `load'
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `load'
>         from (irb):3
> irb(main):004:0>
> 
> ----Stop load yaml irb ------
> 
> Look like there is problem on this part.
> 
> I tried to write a more simple script (i name it "lyaml02"), that will
> just re read the generated file :
> 
> -----Start lyaml02 file---------
> [root@kannel blajarruby]# more lyaml02
> require 'yaml'
> nota = YAML::load(IO.read("/mnt/ramdisk0/yaml_file.yml"))
> ----Start lyaml02 file---------
> 
> And try to run  lyaml02 script :
> 
> -----------Start lyaml02 run --------
> [root@kannel blajarruby]# ruby ./lyaml02
> /usr/local/lib/ruby/1.8/yaml.rb:133:in `transfer': invalid subclass
> (TypeError)
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `node_import'
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `load'
>         from /usr/local/lib/ruby/1.8/yaml.rb:133:in `load'
>         from ./lyaml02:2
> 
> -----------Stop lyaml02 run --------
> 
> question :
> 1. Is it caused by instability of YAML::load ? or
> 2. Could some body point me to something wrong that I did ?
> 
> regards
> -bino-
> 
Without looking too deep into your issue: did you make sure that all 
classes mentioned in the YAML file are defined when loading the file?

Kind regards

	robert