ruby-changes:15248
From: tenderlove <ko1@a...>
Date: Thu, 1 Apr 2010 02:57:45 +0900 (JST)
Subject: [ruby-changes:15248] Ruby:r27130 (trunk): * ext/psych/lib/psych/coder.rb: Adding Syck compatibility to the yaml coder
tenderlove 2010-04-01 02:56:55 +0900 (Thu, 01 Apr 2010) New Revision: 27130 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27130 Log: * ext/psych/lib/psych/coder.rb: Adding Syck compatibility to the yaml coder * test/psych/test_coder.rb: test for syck compatibility Modified files: trunk/ext/psych/lib/psych/coder.rb trunk/test/psych/test_coder.rb Index: ext/psych/lib/psych/coder.rb =================================================================== --- ext/psych/lib/psych/coder.rb (revision 27129) +++ ext/psych/lib/psych/coder.rb (revision 27130) @@ -7,7 +7,7 @@ # called, respectively. class Coder attr_accessor :tag, :style, :implicit - attr_reader :type, :map, :scalar, :seq + attr_reader :type, :scalar, :seq def initialize tag @map = {} @@ -19,6 +19,14 @@ @scalar = nil end + # Emit a map. The coder will be yielded to the block. + def map tag = @tag, style = @style + @tag = tag + @style = style + yield self if block_given? + @map + end + # Emit a scalar with +value+ and +tag+ def represent_scalar tag, value self.tag = tag @@ -53,6 +61,7 @@ @type = :map @map[k] = v end + alias :add :[]= def [] k @type = :map Index: test/psych/test_coder.rb =================================================================== --- test/psych/test_coder.rb (revision 27129) +++ test/psych/test_coder.rb (revision 27130) @@ -89,6 +89,31 @@ end end + def test_map_takes_block + coder = Psych::Coder.new 'foo' + tag = coder.tag + style = coder.style + coder.map { |map| map.add 'foo', 'bar' } + assert_equal 'bar', coder['foo'] + assert_equal tag, coder.tag + assert_equal style, coder.style + end + + def test_map_with_tag + coder = Psych::Coder.new 'foo' + coder.map('hello') { |map| map.add 'foo', 'bar' } + assert_equal 'bar', coder['foo'] + assert_equal 'hello', coder.tag + end + + def test_map_with_tag_and_style + coder = Psych::Coder.new 'foo' + coder.map('hello', 'world') { |map| map.add 'foo', 'bar' } + assert_equal 'bar', coder['foo'] + assert_equal 'hello', coder.tag + assert_equal 'world', coder.style + end + def test_represent_map thing = Psych.load(Psych.dump(RepresentWithMap.new)) assert_equal({ 'a' => 'b' }, thing.map) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/