diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-01-09 17:46:16 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-01-09 17:46:16 -0800 |
commit | d8a5a0a33345755bd5b60b4bb6dd535c2139d53b (patch) | |
tree | a2ef77701400f75f0a678e54816ab9db5ce8b7ea /lib | |
parent | e41fa645ae0b1bdf105f6dda1c75ec0ecae86205 (diff) | |
download | psych-d8a5a0a33345755bd5b60b4bb6dd535c2139d53b.zip |
adding init api
Diffstat (limited to 'lib')
-rw-r--r-- | lib/psych/visitors/to_ruby.rb | 6 | ||||
-rw-r--r-- | lib/psych/visitors/yaml_tree.rb | 23 |
2 files changed, 21 insertions, 8 deletions
diff --git a/lib/psych/visitors/to_ruby.rb b/lib/psych/visitors/to_ruby.rb index ab5e766..3b53edb 100644 --- a/lib/psych/visitors/to_ruby.rb +++ b/lib/psych/visitors/to_ruby.rb @@ -173,7 +173,11 @@ module Psych private def init_with o, h - h.each { |k,v| o.instance_variable_set(:"@#{k}", v) } + if o.respond_to?(:init_with) + o.init_with h + else + h.each { |k,v| o.instance_variable_set(:"@#{k}", v) } + end o end diff --git a/lib/psych/visitors/yaml_tree.rb b/lib/psych/visitors/yaml_tree.rb index 52f5595..bbcb1c0 100644 --- a/lib/psych/visitors/yaml_tree.rb +++ b/lib/psych/visitors/yaml_tree.rb @@ -233,13 +233,22 @@ module Psych end def dump_ivars target, map - ivars = target.respond_to?(:to_yaml_properties) ? - target.to_yaml_properties : - target.instance_variables - - ivars.each do |iv| - map.children << Nodes::Scalar.new("#{iv.to_s.sub(/^@/, '')}") - accept target.instance_variable_get(iv) + if target.respond_to?(:encode_with) + coder = {} + target.encode_with(coder) + coder.each do |k,v| + map.children << Nodes::Scalar.new(k) + accept v + end + else + ivars = target.respond_to?(:to_yaml_properties) ? + target.to_yaml_properties : + target.instance_variables + + ivars.each do |iv| + map.children << Nodes::Scalar.new("#{iv.to_s.sub(/^@/, '')}") + accept target.instance_variable_get(iv) + end end end end |