summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-01-09 17:46:16 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-01-09 17:46:16 -0800
commitd8a5a0a33345755bd5b60b4bb6dd535c2139d53b (patch)
treea2ef77701400f75f0a678e54816ab9db5ce8b7ea /lib
parente41fa645ae0b1bdf105f6dda1c75ec0ecae86205 (diff)
downloadpsych-d8a5a0a33345755bd5b60b4bb6dd535c2139d53b.zip
adding init api
Diffstat (limited to 'lib')
-rw-r--r--lib/psych/visitors/to_ruby.rb6
-rw-r--r--lib/psych/visitors/yaml_tree.rb23
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