Normally I would expect that
YAML.load(x.to_yaml) == x
for all sensible values of x.
However, this does not seem to be the case if the string contains
certain new line characters, for example:
YAML.load("abc\r\n".to_yaml) # => "abc\n" ("\r" lost)
YAML.load("\r\n".to_yaml) # => "" ("\r\n" lost)
YAML.load("\n".to_yaml) # => "" ("\n" lost)
My question is: how can I configure YAML to preserve my line endings?
I'm using Ruby 1.8.4-preview2 and have Googled for a solution without
success. Note that the :UseBlock option to to_yaml does not help.
The reason that I need this functionality is that I would like to store
a string which includes a digital signature in a YAML document. Any
corruption of the line endings changes the string and consequently
invalidates the digital signature.
My question is: how can I configure YAML to preserve my line endings? I'm using Ruby 1.8.4-preview2 and have Googled for a solution without success. Note that the :UseBlock option to to_yaml does not help.
On my system, ruby 1.8.2 (2004-12-25) [i386-mswin32], the first two
seemed to work:
Sorry to bump, but the timing of my initial posting (early hours of
Sunday morning European time, late Saturday US time, Sunday Japanese
time) was probably unwise.
Tom Payne wrote:
Hi all,
Normally I would expect that
YAML.load(x.to_yaml) == x
for all sensible values of x.
However, this does not seem to be the case if the string contains
certain new line characters, for example:
YAML.load("abc\r\n".to_yaml) # => "abc\n" ("\r" lost)
YAML.load("\r\n".to_yaml) # => "" ("\r\n" lost)
YAML.load("\n".to_yaml) # => "" ("\n" lost)
My question is: how can I configure YAML to preserve my line endings?
I'm using Ruby 1.8.4-preview2 and have Googled for a solution without
success. Note that the :UseBlock option to to_yaml does not help.
The reason that I need this functionality is that I would like to store
a string which includes a digital signature in a YAML document. Any
corruption of the line endings changes the string and consequently
invalidates the digital signature.
That's part of the YAML specification.
To keep newlines, use the pipe syntax, like this:
···
---
signature: |
ax890a
b0098b
=> { 'signature' => "ax890a\nb0098b\n" }
---
There are several other newline-keeping options..
Suggested reading: http://yaml4r.sourceforge.net/cookbook/
Look under 'blocks'
cheers,
jf
On 12/13/05, Tom Payne <ruby@tompayne.org> wrote:
Sorry to bump, but the timing of my initial posting (early hours of
Sunday morning European time, late Saturday US time, Sunday Japanese
time) was probably unwise.
Tom Payne wrote:
> Hi all,
>
> Normally I would expect that
> YAML.load(x.to_yaml) == x
> for all sensible values of x.
>
> However, this does not seem to be the case if the string contains
> certain new line characters, for example:
> YAML.load("abc\r\n".to_yaml) # => "abc\n" ("\r" lost)
> YAML.load("\r\n".to_yaml) # => "" ("\r\n" lost)
> YAML.load("\n".to_yaml) # => "" ("\n" lost)
>
> My question is: how can I configure YAML to preserve my line endings?
> I'm using Ruby 1.8.4-preview2 and have Googled for a solution without
> success. Note that the :UseBlock option to to_yaml does not help.
>
> The reason that I need this functionality is that I would like to store
> a string which includes a digital signature in a YAML document. Any
> corruption of the line endings changes the string and consequently
> invalidates the digital signature.
>
> Thanks very much,
> --
> Tom
> > My question is: how can I configure YAML to preserve my line endings?
> > I'm using Ruby 1.8.4-preview2 and have Googled for a solution without
> > success. Note that the :UseBlock option to to_yaml does not help.
> >
> > The reason that I need this functionality is that I would like to store
> > a string which includes a digital signature in a YAML document. Any
> > corruption of the line endings changes the string and consequently
> > invalidates the digital signature.
> >