From 0d701774d8b885ffe70b044df817d60979a39632 Mon Sep 17 00:00:00 2001 From: why Date: Mon, 26 Apr 2004 23:37:37 +0000 Subject: * lib/yaml/rubytypes.rb: passing Range tests. * ext/syck/syck.h: version 0.44. * ext/syck/gram.c: transfers no longer open an indentation. fixed transfers which precede blocks. * ext/syck/token.c: ditto. * ext/syck/syck.c: fixed segfault if an anchor has been released already. * ext/syck/node.c (syck_free_members): organized order of free'd nodes. * ext/syck/rubyext.c (syck_emitter_write_m): test for proper string with StringValue. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6222 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/yaml/rubytypes.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'lib/yaml') diff --git a/lib/yaml/rubytypes.rb b/lib/yaml/rubytypes.rb index 61ade3765..7d36b468d 100644 --- a/lib/yaml/rubytypes.rb +++ b/lib/yaml/rubytypes.rb @@ -352,16 +352,20 @@ class Range end def to_yaml( opts = {} ) YAML::quick_emit( nil, opts ) { |out| - out << "!ruby/range " - self.to_s.to_yaml(:Emitter => out) + out << "!ruby/range '" + self.begin.to_yaml(:Emitter => out) + out << ( self.exclude_end? ? "..." : ".." ) + self.end.to_yaml(:Emitter => out) + out << "'" } end end YAML.add_ruby_type( 'range' ) { |type, val| - if String === val and val =~ /^(.*[^.])(\.{2,3})([^.].*)$/ + inr = '(\w+|[+-]*\d+(?:\.\d+)?|"(?:[^\\"]|\\.)*")' + if String === val and val =~ /^#{inr}(\.{2,3})#{inr}$/ r1, rdots, r2 = $1, $2, $3 - Range.new( YAML.try_implicit( r1 ), YAML.try_implicit( r2 ), rdots.length == 3 ) + Range.new( YAML.load( "--- #{r1}" ), YAML.load( "--- #{r2}" ), rdots.length == 3 ) elsif Hash === val Range.new( val['begin'], val['end'], val['exclude_end?'] ) else -- cgit