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

ruby-changes:15465

From: tenderlove <ko1@a...>
Date: Sat, 17 Apr 2010 05:31:49 +0900 (JST)
Subject: [ruby-changes:15465] Ruby:r27364 (trunk): * ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods

tenderlove	2010-04-17 05:27:51 +0900 (Sat, 17 Apr 2010)

  New Revision: 27364

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27364

  Log:
    * ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods
    * ext/psych/lib/psych/deprecated.rb: supporting deprecated
      to_yaml_properties method

  Modified files:
    trunk/ChangeLog
    trunk/ext/psych/lib/psych/coder.rb
    trunk/ext/psych/lib/psych/deprecated.rb
    trunk/ext/psych/lib/psych/visitors/yaml_tree.rb
    trunk/test/psych/test_deprecated.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 27363)
+++ ChangeLog	(revision 27364)
@@ -1,3 +1,9 @@
+Sat Apr 17 05:25:15 2010  Aaron Patterson <aaron@t...>
+
+	* ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods
+	* ext/psych/lib/psych/deprecated.rb: supporting deprecated
+	  to_yaml_properties method
+
 Sat Apr 17 01:32:50 2010  Yusuke Endoh  <mame@t...>
 
 	* io.c (rb_io_rewind, rb_io_eof): add rdoc.  based on a patch from
Index: ext/psych/lib/psych/deprecated.rb
===================================================================
--- ext/psych/lib/psych/deprecated.rb	(revision 27363)
+++ ext/psych/lib/psych/deprecated.rb	(revision 27364)
@@ -1,6 +1,8 @@
 require 'date'
 
 module Psych
+  DEPRECATED = __FILE__ # :nodoc:
+
   module DeprecatedMethods # :nodoc:
     attr_accessor :taguri
     attr_accessor :to_yaml_style
@@ -19,3 +21,9 @@
     target.psych_to_yaml unless opts[:nodump]
   end
 end
+
+class Object
+  def to_yaml_properties # :nodoc:
+    instance_variables
+  end
+end
Index: ext/psych/lib/psych/visitors/yaml_tree.rb
===================================================================
--- ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 27363)
+++ ext/psych/lib/psych/visitors/yaml_tree.rb	(revision 27364)
@@ -182,9 +182,7 @@
           plain = !quote
         end
 
-        ivars = o.respond_to?(:to_yaml_properties) ?
-          o.to_yaml_properties :
-          o.instance_variables
+        ivars = find_ivars o
 
         scalar = create_scalar str, nil, tag, plain, quote
 
@@ -251,6 +249,19 @@
       end
 
       private
+      # FIXME: remove this method once "to_yaml_properties" is removed
+      def find_ivars target
+        m = target.method(:to_yaml_properties)
+        unless m.source_location.first.start_with?(Psych::DEPRECATED)
+          if $VERBOSE
+            warn "to_yaml_properties is deprecated, please implement \"encode_with(coder)\""
+          end
+          return target.to_yaml_properties
+        end
+
+        target.instance_variables
+      end
+
       def append o
         @stack.last.children << o
         o
@@ -295,9 +306,7 @@
       end
 
       def dump_ivars target, map
-        ivars = target.respond_to?(:to_yaml_properties) ?
-          target.to_yaml_properties :
-          target.instance_variables
+        ivars = find_ivars target
 
         ivars.each do |iv|
           map.children << create_scalar("#{iv.to_s.sub(/^@/, '')}")
Index: ext/psych/lib/psych/coder.rb
===================================================================
--- ext/psych/lib/psych/coder.rb	(revision 27363)
+++ ext/psych/lib/psych/coder.rb	(revision 27364)
@@ -7,7 +7,7 @@
   # called, respectively.
   class Coder
     attr_accessor :tag, :style, :implicit
-    attr_reader   :type, :scalar, :seq
+    attr_reader   :type, :seq
 
     def initialize tag
       @map        = {}
@@ -19,6 +19,15 @@
       @scalar     = nil
     end
 
+    def scalar *args
+      if args.length > 0
+        warn "#{caller[0]}: Coder#scalar(a,b,c) is deprecated" if $VERBOSE
+        @tag, @scalar, _ = args
+        @type = :scalar
+      end
+      @scalar
+    end
+
     # Emit a map.  The coder will be yielded to the block.
     def map tag = @tag, style = @style
       @tag   = tag
Index: test/psych/test_deprecated.rb
===================================================================
--- test/psych/test_deprecated.rb	(revision 27363)
+++ test/psych/test_deprecated.rb	(revision 27364)
@@ -131,5 +131,13 @@
       assert_equal 'TGIF!', yi.value
       assert_instance_of YamlInitAndInitWith, yi
     end
+
+    def test_coder_scalar
+      coder = Psych::Coder.new 'foo'
+      coder.scalar('tag', 'some string', :plain)
+      assert_equal 'tag', coder.tag
+      assert_equal 'some string', coder.scalar
+      assert_equal :scalar, coder.type
+    end
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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