mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
This commit is contained in:
parent
5952025834
commit
55c389f8dd
3 changed files with 67 additions and 0 deletions
|
|
@ -1,3 +1,8 @@
|
|||
Fri Nov 7 07:32:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* 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 <matz@ruby-lang.org>
|
||||
|
||||
* string.c (Init_String): remove Symbol#===. [ruby-dev:37026]
|
||||
|
|
|
|||
|
|
@ -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 = {} )
|
||||
|
|
|
|||
|
|
@ -1107,6 +1107,30 @@ EOY
|
|||
|
||||
end
|
||||
|
||||
def test_ruby_rational
|
||||
assert_to_yaml( Rational(1, 2), <<EOY )
|
||||
--- !ruby/object:Rational
|
||||
numerator: 1
|
||||
denominator: 2
|
||||
EOY
|
||||
|
||||
# Read YAML dumped by the ruby 1.8.3.
|
||||
assert_to_yaml( Rational(1, 2), "!ruby/object:Rational 1/2\n" )
|
||||
assert_raise( ArgumentError ) { YAML.load("!ruby/object:Rational INVALID/RATIONAL\n") }
|
||||
end
|
||||
|
||||
def test_ruby_complex
|
||||
assert_to_yaml( Complex(3, 4), <<EOY )
|
||||
--- !ruby/object:Complex
|
||||
image: 4
|
||||
real: 3
|
||||
EOY
|
||||
|
||||
# Read YAML dumped by the ruby 1.8.3.
|
||||
assert_to_yaml( Complex(3, 4), "!ruby/object:Complex 3+4i\n" )
|
||||
assert_raise( ArgumentError ) { YAML.load("!ruby/object:Complex INVALID+COMPLEXi\n") }
|
||||
end
|
||||
|
||||
def test_emitting_indicators
|
||||
assert_to_yaml( "Hi, from Object 1. You passed: please, pretty please", <<EOY
|
||||
--- "Hi, from Object 1. You passed: please, pretty please"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue