Forum: Ruby bug in YAML for Ruby?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Matt R. (Guest)
on 2006-03-23 02:57
I'm getting some strange behavior with YAML in ruby regarding the
characters '08' in a hash.

This code:
#
require 'yaml'
test = { "08" => '01', '01' => '08', '8' => '01'
}
File.open("test.yml", "w") {|f| YAML.dump(test, f)}
#

produces this file:
---
"01": 08
"8": "01"
08: "01"

I do not understand why the 08s are not quoted. I tried it under ruby
1.8.2 and 1.8.4.

Is this expected?

thanks,
-Matt
Daniel H. (Guest)
on 2006-03-23 03:44
(Received via mailing list)
On Mar 23, 2006, at 1:57 AM, Matt R. wrote:

>
> produces this file:
> ---
> "01": 08
> "8": "01"
> 08: "01"
>
> I do not understand why the 08s are not quoted. I tried it under ruby
> 1.8.2 and 1.8.4.
>
> Is this expected?

It is not a bug, but it is confusing. According the the YAML spec[1]
numbers prefixed with a 0 signal an octal base (as does in Ruby).
However 08 is not a valid octal number, so it doesn't get quoted.

[1] http://yaml.org/type/int.html

-- Daniel
Joel VanderWerf (Guest)
on 2006-03-23 03:47
(Received via mailing list)
Matt R. wrote:
>
> produces this file:
> ---
> "01": 08
> "8": "01"
> 08: "01"
>
> I do not understand why the 08s are not quoted. I tried it under ruby
> 1.8.2 and 1.8.4.
>
> Is this expected?

I think so. The quotes are needed to disambiguate the string "01" from
the octal number. If quotes were not added by dump, then 01 would be
loaded as the fixnum 1 rather than the string "01". There's no ambiguity
with 08 because it is not legal octal, so it must be a string.

irb(main):004:0> YAML.load "foo: 08"
=> {"foo"=>"08"}
irb(main):005:0> YAML.load "foo: 07"
=> {"foo"=>7}
irb(main):006:0> YAML.load "foo: 017"
=> {"foo"=>15}

Note in the last case the conversion from octal.
Logan C. (Guest)
on 2006-03-23 03:50
(Received via mailing list)
On Mar 22, 2006, at 7:57 PM, Matt R. wrote:

>
>
> thanks,
> -Matt
>
> --
> Posted via http://www.ruby-forum.com/.
>

Well just guessing here, but you  don't have to quote 08 because it
couldn't be an octal number anyway, so it must be a string. I don't
know if this is why this happens or if this is what the YAML spec
says but it makes sense to me, sorta.
This topic is locked and can not be replied to.