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/