- def register_yaml klass, props
- vars = props.map { |p| "@#{p}" }
- path = klass.name.gsub(/::/, "/")
-
- klass.instance_eval do
- define_method(:to_yaml_properties) { vars }
- define_method(:to_yaml_type) { "!#{YAML_DOMAIN},#{YAML_DATE}/#{path}" }
- end
-
- YAML.add_domain_type("#{YAML_DOMAIN},#{YAML_DATE}", path) do |type, val|
- klass.new(*props.map { |p| val[p] })
- end
- end
-
- def save_yaml_obj object, fn, compress=false
- if compress
- Zlib::GzipWriter.open(fn) { |f| f.puts object.to_yaml }
+ def save_yaml_obj object, fn, safe=false
+ if safe
+ safe_fn = "#{File.dirname fn}/safe_#{File.basename fn}"
+ mode = File.stat(fn) if File.exists? fn
+ File.open(safe_fn, "w", mode) { |f| f.puts object.to_yaml }
+ FileUtils.mv safe_fn, fn