1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/psych/lib/psych/visitors/yaml_tree.rb: Rescue exceptions when

people implement the method method. Thanks Lin Jen-Shin.
  [ruby-core:35255]

* test/psych/visitors/test_yaml_tree.rb: test for implementation of
  method method.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31075 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2011-03-09 03:51:39 +00:00
parent 095b279464
commit 4df71924e4
3 changed files with 37 additions and 12 deletions

View file

@ -1,3 +1,12 @@
Wed Mar 9 12:50:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych/visitors/yaml_tree.rb: Rescue exceptions when
people implement the method method. Thanks Lin Jen-Shin.
[ruby-core:35255]
* test/psych/visitors/test_yaml_tree.rb: test for implementation of
method method.
Wed Mar 9 11:53:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
* enc/shift_jis.c: Change SJIS as an alias of Windows-31J.

View file

@ -79,15 +79,20 @@ module Psych
end
if target.respond_to?(:to_yaml)
loc = target.method(:to_yaml).source_location.first
if loc !~ /(syck\/rubytypes.rb|psych\/core_ext.rb)/
unless target.respond_to?(:encode_with)
if $VERBOSE
warn "implementing to_yaml is deprecated, please implement \"encode_with\""
end
begin
loc = target.method(:to_yaml).source_location.first
if loc !~ /(syck\/rubytypes.rb|psych\/core_ext.rb)/
unless target.respond_to?(:encode_with)
if $VERBOSE
warn "implementing to_yaml is deprecated, please implement \"encode_with\""
end
target.to_yaml(:nodump => true)
target.to_yaml(:nodump => true)
end
end
rescue
# public_method or source_location might be overridden,
# and it's OK to skip it since it's only to emit a warning
end
end
@ -300,12 +305,17 @@ module Psych
# FIXME: remove this method once "to_yaml_properties" is removed
def find_ivars target
loc = target.method(:to_yaml_properties).source_location.first
unless loc.start_with?(Psych::DEPRECATED) || loc.end_with?('rubytypes.rb')
if $VERBOSE
warn "#{loc}: to_yaml_properties is deprecated, please implement \"encode_with(coder)\""
begin
loc = target.method(:to_yaml_properties).source_location.first
unless loc.start_with?(Psych::DEPRECATED) || loc.end_with?('rubytypes.rb')
if $VERBOSE
warn "#{loc}: to_yaml_properties is deprecated, please implement \"encode_with(coder)\""
end
return target.to_yaml_properties
end
return target.to_yaml_properties
rescue
# public_method or source_location might be overridden,
# and it's OK to skip it since it's only to emit a warning.
end
target.instance_variables

View file

@ -38,6 +38,12 @@ module Psych
assert_equal s.foo, obj.foo
end
def test_override_method
s = Struct.new(:method).new('override')
obj = Psych.load(Psych.dump(s))
assert_equal s.method, obj.method
end
def test_exception
ex = Exception.new 'foo'
loaded = Psych.load(Psych.dump(ex))