[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]