<< | Index | >>
export oddb.yaml only (no export job.)
ch.oddb> YamlExporter.new(self).export
oddb.yalm should have about 24000 products
ch.oddb> a = 0; companies.values.each {|c| a += c.packages.length }; p a;
-> 24850
YAML syck engine dose not have support for UTF-8 (without ascii). 
In Psych engine, If yaml data has unicode String as ascii, it is replaced as binary.
...
 # FIXME: remove this method once "to_yaml_properties" is removed
...
 warn "#{loc}: to_yaml_properties is deprecated, please implement \"encode_with(coder)\""
...
I could re-create and confirm replaced binary problem with using encode_with in this sample script.
Attach:yaml_dump_test-20120619.txt
---
- Grüße
- Öl
- Käse
- !ruby/Test:Foo
  foo: föö
  bar: !ruby/Test:Bar
    bar: !binary |-
      YsOkcg==
    def encode_with(coder=nil)
      self::class::EXPORT_PROPERTIES.each do |a| 
        value = instance_variable_get(a)
        if value.is_a? String
          if value.encoding.to_s.downcase != 'utf-8'
            value.force_encoding('utf-8')
          end 
        end 
        coder[a[1..-1]] = value
      end 
      coder.tag = self.to_yaml_type
    end
module Psych
  module Visitors
    class YAMLTree < Psych::Visitors::Visitor
      def binary? string
        false
      end 
      private :binary?
    end 
  end 
end
Attach:yaml_dump_test-20120619-2.txt
This way works with sample script.
But it does not work for ODBA::Stub. 
Object has gone what has binary data.