summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-19 23:05:53 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-01-19 23:05:53 +0000
commita17cdfdde29faa7e6c5feb1c31d41e4f42328daa (patch)
tree9abdd148b52ae4019955d386c3aabaedc5cac723 /ext
parent64847a9cfe467b808ca5e8148dfa85a059198963 (diff)
* ext/psych/lib/psych/coder.rb (represent_object): arbitrary objects
may be passed to the Psych::Coder object. * ext/psych/lib/psych/visitors/yaml_tree.rb: support for visiting arbitrary objects set on the coder. * test/psych/test_coder.rb: supporting test case. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/lib/psych/coder.rb24
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb2
2 files changed, 18 insertions, 8 deletions
diff --git a/ext/psych/lib/psych/coder.rb b/ext/psych/lib/psych/coder.rb
index c06c9c1e61..2b830d2b21 100644
--- a/ext/psych/lib/psych/coder.rb
+++ b/ext/psych/lib/psych/coder.rb
@@ -6,17 +6,18 @@ module Psych
# objects like Sequence and Scalar may be emitted if +seq=+ or +scalar=+ are
# called, respectively.
class Coder
- attr_accessor :tag, :style, :implicit
+ attr_accessor :tag, :style, :implicit, :object
attr_reader :type, :seq
def initialize tag
- @map = {}
- @seq = []
- @implicit = false
- @type = :map
- @tag = tag
- @style = Psych::Nodes::Mapping::BLOCK
- @scalar = nil
+ @map = {}
+ @seq = []
+ @implicit = false
+ @type = :map
+ @tag = tag
+ @style = Psych::Nodes::Mapping::BLOCK
+ @scalar = nil
+ @object = nil
end
def scalar *args
@@ -54,6 +55,13 @@ module Psych
self.map = map
end
+ # Emit an arbitrary object +obj+ and +tag+
+ def represent_object tag, obj
+ @tag = tag
+ @type = :object
+ @object = obj
+ end
+
# Emit a scalar with +value+
def scalar= value
@type = :scalar
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index b862528502..e7d182f707 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -342,6 +342,8 @@ module Psych
accept v
end
@emitter.end_mapping
+ when :object
+ accept c.object
end
end