summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-02-02 20:54:42 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-02-02 20:54:42 -0800
commit182f450bd8b60a1b615db517e54d74c8a836e2a1 (patch)
tree14475168b6f9c4693ad42d232d68b66b213d8960 /lib
parent35ca1ca580905574a075ccb4ec032744954e6f0b (diff)
downloadpsych-182f450bd8b60a1b615db517e54d74c8a836e2a1.zip
represent scalar works
Diffstat (limited to 'lib')
-rw-r--r--lib/psych/coder.rb6
-rw-r--r--lib/psych/visitors/to_ruby.rb12
-rw-r--r--lib/psych/visitors/yaml_tree.rb2
3 files changed, 19 insertions, 1 deletions
diff --git a/lib/psych/coder.rb b/lib/psych/coder.rb
index 05ee886..fe3dab2 100644
--- a/lib/psych/coder.rb
+++ b/lib/psych/coder.rb
@@ -19,6 +19,12 @@ module Psych
@scalar = nil
end
+ # Emit a scalar with +value+ and +tag+
+ def represent_scalar tag, value
+ self.tag = tag
+ self.scalar = value
+ end
+
# Emit a scalar with +value+
def scalar= value
@type = :scalar
diff --git a/lib/psych/visitors/to_ruby.rb b/lib/psych/visitors/to_ruby.rb
index e080ec6..a66b2e6 100644
--- a/lib/psych/visitors/to_ruby.rb
+++ b/lib/psych/visitors/to_ruby.rb
@@ -28,6 +28,18 @@ module Psych
def visit_Psych_Nodes_Scalar o
@st[o.anchor] = o.value if o.anchor
+ if klass = Psych.load_tags[o.tag]
+ instance = klass.allocate
+
+ if instance.respond_to?(:init_with)
+ coder = Psych::Coder.new(o.tag)
+ coder.scalar = o.value
+ instance.init_with coder
+ end
+
+ return instance
+ end
+
return o.value if o.quoted
return @ss.tokenize(o.value) unless o.tag
diff --git a/lib/psych/visitors/yaml_tree.rb b/lib/psych/visitors/yaml_tree.rb
index 9b7a560..2efbb61 100644
--- a/lib/psych/visitors/yaml_tree.rb
+++ b/lib/psych/visitors/yaml_tree.rb
@@ -255,7 +255,7 @@ module Psych
def emit_coder c
case c.type
when :scalar
- append Nodes::Scalar.new(c.scalar, nil, c.tag)
+ append Nodes::Scalar.new(c.scalar, nil, c.tag, c.tag.nil?)
when :map
map = append Nodes::Mapping.new(nil, c.tag, c.implicit, c.style)
@stack.push map