baffling undefined method error

T

Tom Cloyd

I'm getting an error I can't account for. In a method I've written I
open a file and access a yaml store:

archive_stored_list = 'archive_stored_list.yml'
archives_stored_catalog = File.open(archive_stored_list) {|i| YAML.load(i)}

I massage the data a bit, and want to write it back out to the same
file. I try to close the file so I can open it for output, but get an error:

archives_stored_catalog.close # <= "undefined method `close'" error is
written to log file here
open(archive_stored_list,"w") {|i| YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn't the IO.close method always available?
Very confusing.

This usage is straight out of Programming Ruby 2nd edition, but it
doesn't work for me, and I can't see the error.

Would appreciate any help.

Tom

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
D

David A. Black

Hi --

I'm getting an error I can't account for. In a method I've written I open a
file and access a yaml store:

archive_stored_list = 'archive_stored_list.yml'
archives_stored_catalog = File.open(archive_stored_list) {|i| YAML.load(i)}

I massage the data a bit, and want to write it back out to the same file. I
try to close the file so I can open it for output, but get an error:

archives_stored_catalog.close # <= "undefined method `close'" error is
written to log file here
open(archive_stored_list,"w") {|i| YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn't the IO.close method always available? Very
confusing.

This usage is straight out of Programming Ruby 2nd edition, but it doesn't
work for me, and I can't see the error.

When you use a block with File.open, the filehandle is closed
automatically when the block exits. There's no point even saving it,
because the value of the whole operation will be nil.


David
 
T

Tom Cloyd

Tom said:
I'm getting an error I can't account for. In a method I've written I
open a file and access a yaml store:

archive_stored_list = 'archive_stored_list.yml'
archives_stored_catalog = File.open(archive_stored_list) {|i|
YAML.load(i)}

I massage the data a bit, and want to write it back out to the same
file. I try to close the file so I can open it for output, but get an
error:

archives_stored_catalog.close # <= "undefined method `close'" error is
written to log file here
open(archive_stored_list,"w") {|i| YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn't the IO.close method always
available? Very confusing.

This usage is straight out of Programming Ruby 2nd edition, but it
doesn't work for me, and I can't see the error.

Would appreciate any help.

Tom
If I do NOT try to close the file (and in all the examples I've found,
this isn't done - I just see an open to read, followed by another open
to write), I get a "Permission denied - archive_stored_list.yml"
message. That makes no sense. There CAN'T be a permission problem. I
just READ the file.

I await higher wisdom.

t.

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
D

Dave Thomas

I'm getting an error I can't account for. In a method I've written I
open a file and access a yaml store:

archive_stored_list = 'archive_stored_list.yml'
archives_stored_catalog = File.open(archive_stored_list) {|i|
YAML.load(i)}

I massage the data a bit, and want to write it back out to the same
file. I try to close the file so I can open it for output, but get
an error:

archives_stored_catalog.close # <= "undefined method `close'" error
is written to log file here
open(archive_stored_list,"w") {|i|
YAML.dump(archives_stored_catalog,i)}

Why is this giving an error? Isn't the IO.close method always
available? Very confusing.


The block form of Io_Open returns the value of the block. So, what is
the class of archives_stored_catalog? It isn't an IO object. It's your
loaded YAML data. So it doesn't have a close method.

Regards


Dave Thomas
 
D

David A. Black

Hi --

The block form of Io_Open returns the value of the block. So, what is the
class of archives_stored_catalog? It isn't an IO object. It's your loaded
YAML data. So it doesn't have a close method.

Yeah, that :) (I said nil, which was an over-generalization from a
case where the block called puts.)


David
 
B

Bob Hutchison

If I do NOT try to close the file (and in all the examples I've
found, this isn't done - I just see an open to read, followed by
another open to write), I get a "Permission denied -
archive_stored_list.yml" message. That makes no sense. There CAN'T
be a permission problem. I just READ the file.

I await higher wisdom.

Don't count on it from me, but do you have write permission on the file?

Cheers,
Bob
 
T

Tom Cloyd

David said:
Hi --



Yeah, that :) (I said nil, which was an over-generalization from a
case where the block called puts.)


David
OK, thanks, that's very clarifying. I utterly missed the fact that I was
using a block open. So, once the data's loaded, the file should be
closed, and thus available for re-openning.

But it isn't. THAT was my original problem - the reason I was
(mistakenly) trying to close it - so I could open it. All this code is
in the same method. "archive_stored_list" should be something I can
open, but as I said before, upon trying I get a "Permission denied -
archive_stored_list.yml" error. I have NO idea why. If I can't open that
file, I can't dump my yaml data.

Any ideas?

t.

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
T

Tom Cloyd

Bob said:
Don't count on it from me, but do you have write permission on the file?

Cheers,
Bob
Yes I sure do.

~t .

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
P

Phillip Gawlowski

Tom said:
But it isn't. THAT was my original problem - the reason I was
(mistakenly) trying to close it - so I could open it. All this code is
in the same method. "archive_stored_list" should be something I can
open, but as I said before, upon trying I get a "Permission denied -
archive_stored_list.yml" error. I have NO idea why. If I can't open that
file, I can't dump my yaml data.

Close the editor reading it? Something is blocking your write access,
and it looks like an OS "error", rather than a Ruby error.

- Phillip Gawlowski
 
T

Tom Cloyd

Phillip said:
Close the editor reading it? Something is blocking your write access,
and it looks like an OS "error", rather than a Ruby error.

- Phillip Gawlowski
Thanks Phillip - that redirected my attention. It turns out, amazingly
enough, that you cannot open a file in a directory where it isn't! I
wasn't paying enough attention to my present working directory - it got
changed, and I didn't change it back. Doing so fixed the problem.
Another first - never had that problem before.

t.

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC
Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website & psychotherapy weblog)
<< sleightmind.wordpress.com >> (mental health issues weblog)
<< directpathdesign.com >> (web site design & consultation)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

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,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top