summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-16 20:27:51 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-16 20:27:51 +0000
commit2db7b7f3fe7de2b518d46ea11c26875f86d26136 (patch)
tree063260cf9c6da1074cbf3d7413b173206b5cb8f5
parent039219b2c978641d96fe28ba451148b0425ffd4e (diff)
* ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods
* ext/psych/lib/psych/deprecated.rb: supporting deprecated to_yaml_properties method git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--ext/psych/lib/psych/coder.rb11
-rw-r--r--ext/psych/lib/psych/deprecated.rb8
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb21
-rw-r--r--test/psych/test_deprecated.rb8
5 files changed, 47 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ff7491430..68d027c5d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sat Apr 17 05:25:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * 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@tsg.ne.jp>
* io.c (rb_io_rewind, rb_io_eof): add rdoc. based on a patch from
diff --git a/ext/psych/lib/psych/coder.rb b/ext/psych/lib/psych/coder.rb
index eff0cc3dcb..c06c9c1e61 100644
--- a/ext/psych/lib/psych/coder.rb
+++ b/ext/psych/lib/psych/coder.rb
@@ -7,7 +7,7 @@ module Psych
# 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 @@ module Psych
@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
diff --git a/ext/psych/lib/psych/deprecated.rb b/ext/psych/lib/psych/deprecated.rb
index c0c9abef7a..26e431dd81 100644
--- a/ext/psych/lib/psych/deprecated.rb
+++ b/ext/psych/lib/psych/deprecated.rb
@@ -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 @@ module Psych
target.psych_to_yaml unless opts[:nodump]
end
end
+
+class Object
+ def to_yaml_properties # :nodoc:
+ instance_variables
+ end
+end
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 3cbb695bce..4f990a73d6 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -182,9 +182,7 @@ module Psych
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 @@ module Psych
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 @@ module Psych
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(/^@/, '')}")
diff --git a/test/psych/test_deprecated.rb b/test/psych/test_deprecated.rb
index 7e36daaa37..e77d18c10c 100644
--- a/test/psych/test_deprecated.rb
+++ b/test/psych/test_deprecated.rb
@@ -131,5 +131,13 @@ module Psych
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