diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-02-02 20:54:42 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-02-02 20:54:42 -0800 |
commit | 182f450bd8b60a1b615db517e54d74c8a836e2a1 (patch) | |
tree | 14475168b6f9c4693ad42d232d68b66b213d8960 /lib | |
parent | 35ca1ca580905574a075ccb4ec032744954e6f0b (diff) | |
download | psych-182f450bd8b60a1b615db517e54d74c8a836e2a1.zip |
represent scalar works
Diffstat (limited to 'lib')
-rw-r--r-- | lib/psych/coder.rb | 6 | ||||
-rw-r--r-- | lib/psych/visitors/to_ruby.rb | 12 | ||||
-rw-r--r-- | lib/psych/visitors/yaml_tree.rb | 2 |
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 |