[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

How to preserve line endings in strings with YAML?

Tom Payne

12/11/2005 1:23:00 AM

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

--
Posted via http://www.ruby-....


3 Answers

Bill Kelly

12/11/2005 2:10:00 AM

0

From: "Tom Payne" <ruby@tompayne.org>
>
> 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.

On my system, ruby 1.8.2 (2004-12-25) [i386-mswin32], the first two
seemed to work:

>> YAML.load("abc\r\n".to_yaml)
=> "abc\r\n"
>> YAML.load("\r\n".to_yaml)
=> "\r\n"

But the third didn't:

>> YAML.load("\n".to_yaml)
=> " "

I guess if all else fails you could:

>> CGI.unescape(YAML.load(CGI.escape("\n").to_yaml))
=> "\n"


Regards,

Bill




Tom Payne

12/13/2005 10:54:00 PM

0

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

No more bumps (promise!)

Cheers,
--
Tom

--
Posted via http://www.ruby-....


Johannes Friestad

12/14/2005 5:52:00 AM

0

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...
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
>
> No more bumps (promise!)
>
> Cheers,
> --
> Tom
>
> --
> Posted via http://www.ruby-....
>
>


--
Johannes Friestad
johannes.friestad@gmail.com