From 55c389f8dd67d4b3c45e72b72fedac553963a776 Mon Sep 17 00:00:00 2001 From: yugui Date: Tue, 11 Nov 2008 08:41:13 +0000 Subject: merges r20126 from trunk into ruby_1_9_1. * lib/yaml/rubytypes.rb: support Rational and Complex as 1.8 does. a patch from Hiroshi Moriyama in [ruby-dev:36899]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@20184 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ lib/yaml/rubytypes.rb | 38 ++++++++++++++++++++++++++++++++++++++ test/yaml/test_yaml.rb | 24 ++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/ChangeLog b/ChangeLog index dbe52979cb..23a0f803dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Nov 7 07:32:55 2008 Yukihiro Matsumoto + + * lib/yaml/rubytypes.rb: support Rational and Complex as 1.8 + does. a patch from Hiroshi Moriyama in [ruby-dev:36899]. + Fri Nov 7 06:58:59 2008 Yukihiro Matsumoto * string.c (Init_String): remove Symbol#===. [ruby-dev:37026] diff --git a/lib/yaml/rubytypes.rb b/lib/yaml/rubytypes.rb index 35b719196e..ae65b355e1 100644 --- a/lib/yaml/rubytypes.rb +++ b/lib/yaml/rubytypes.rb @@ -379,6 +379,44 @@ class Float end end +class Rational + yaml_as "tag:ruby.yaml.org,2002:object:Rational" + def Rational.yaml_new( klass, tag, val ) + if val.is_a? String + Rational( val ) + else + Rational( val['numerator'], val['denominator'] ) + end + end + def to_yaml( opts = {} ) + YAML::quick_emit( self, opts ) do |out| + out.map( taguri, nil ) do |map| + map.add( 'denominator', denominator ) + map.add( 'numerator', numerator ) + end + end + end +end + +class Complex + yaml_as "tag:ruby.yaml.org,2002:object:Complex" + def Complex.yaml_new( klass, tag, val ) + if val.is_a? String + Complex( val ) + else + Complex( val['real'], val['image'] ) + end + end + def to_yaml( opts = {} ) + YAML::quick_emit( self, opts ) do |out| + out.map( taguri, nil ) do |map| + map.add( 'image', imaginary ) + map.add( 'real', real ) + end + end + end +end + class TrueClass yaml_as "tag:yaml.org,2002:bool#yes" def to_yaml( opts = {} ) diff --git a/test/yaml/test_yaml.rb b/test/yaml/test_yaml.rb index 74a2fa851e..ed94705fcf 100644 --- a/test/yaml/test_yaml.rb +++ b/test/yaml/test_yaml.rb @@ -1107,6 +1107,30 @@ EOY end + def test_ruby_rational + assert_to_yaml( Rational(1, 2), <