YAML dump, load: class not properly reconstituted

P

Pito Salas

Here's some yaml:

---
- :status: :failure
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw001.tif
- :status: :failure
:skew_angle: -0.72217746154481
:rotated: -0.72217746154481
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw002.tif

When I load this back into Ruby, I get something like this from pp:

#<PBScorer:0x1010d9bc8

{:filename=>
#<Pathname:0x1010d5370
@class="Pathname",
@ivars=
{"path"=>"/mydev/iaharness/ballotsamples/432Leon200dpibw003.tif"}>}
...

In the debugger, the class of :filename seems to be YAML::something

So, it looks like the re-encoding of Pathname by Yaml got a bit
flumoxed. I've tried a bunch of small examples and can't seem to get it
to reproduce.

Anyone spot whats wrong before I go deeper and deeper and depper?

Thanks,

Pito
 
R

Ryan Davis

Here's some yaml:
=20
---
- :status: :failure
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw001.tif
- :status: :failure
:skew_angle: -0.72217746154481
:rotated: -0.72217746154481
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw002.tif
=20
When I load this back into Ruby, I get something like this from pp:
=20
#<PBScorer:0x1010d9bc8
=20
{:filename=3D>
#<Pathname:0x1010d5370
@class=3D"Pathname",
@ivars=3D
=
{"path"=3D>"/mydev/iaharness/ballotsamples/432Leon200dpibw003.tif"}>}

I suspect you're not telling us all the relevant details. The following =
code works fine:
#!/usr/bin/ruby -w
=20
require 'yaml'
require 'pathname'
=20
# I had to fix your YAML indentation
yaml =3D "---
- :status: :failure
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw001.tif
- :status: :failure
:skew_angle: -0.72217746154481
:rotated: -0.72217746154481
:filename: !ruby/object:pathname
path: /mydev/ballots/432Leon200dpibw002.tif
"
=20
array =3D YAML.load(StringIO.new(yaml))
=20
p array.first[:filename].absolute? # =3D> true

If you comment out the pathname require, then it is a YAML object but it =
is obvious about it:
#<YAML::Object:0x1004abb80 @class=3D"Pathname", =
@ivars=3D{"path"=3D>"/mydev/ballots/432Leon200dpibw001.tif"}>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top