mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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/trunk@20126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1d8b7bc624
commit
1343680398
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 07:12:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Fri Nov 7 07:12:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* thread_pthread.c (thread_timer): uses pthread_cond_timedwait always
|
* thread_pthread.c (thread_timer): uses pthread_cond_timedwait always
|
||||||
|
|
|
@ -379,6 +379,44 @@ class Float
|
||||||
end
|
end
|
||||||
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
|
class TrueClass
|
||||||
yaml_as "tag:yaml.org,2002:bool#yes"
|
yaml_as "tag:yaml.org,2002:bool#yes"
|
||||||
def to_yaml( opts = {} )
|
def to_yaml( opts = {} )
|
||||||
|
|
|
@ -1107,6 +1107,30 @@ EOY
|
||||||
|
|
||||||
end
|
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
|
def test_emitting_indicators
|
||||||
assert_to_yaml( "Hi, from Object 1. You passed: please, pretty please", <<EOY
|
assert_to_yaml( "Hi, from Object 1. You passed: please, pretty please", <<EOY
|
||||||
--- "Hi, from Object 1. You passed: please, pretty please"
|
--- "Hi, from Object 1. You passed: please, pretty please"
|
||||||
|
|
Loading…
Reference in a new issue