Accessing session with session.each


#1

I’d like to traverse thru the contents of the session object

I’ve been looking at C:\ruby\lib\ruby\1.8\cgi\session.rb and found out
that there’s no each method in it.

So I tried to make accesible the data collection.

First I tried with something like this

def each(block)
  unless @data
    @data = @dbman.restore
  end
  @data.each block
end

I edited the file, but nothing seems to happen.

I even tried to set a breakpoint, but again nothing happens.

Is there some way to debug that file???

And then, taking into account that ruby is a fully interpreted language,
how come my changes are being ignored???

Saludos

Sas

PS: I apologize if this is a stupid question. I’m just taking my very
first steps with ruby and with rails.


#2

unknown wrote:

On Fri, 7 Apr 2006, sas sas wrote:

 unless @data

And then, taking into account that ruby is a fully interpreted language,
how come my changes are being ignored???

Saludos

Sas

PS: I apologize if this is a stupid question. I’m just taking my very
first steps with ruby and with rails.

if you are running in fastcgi mode you script, and it’s dependancies,
are
loaded only once. is this the case?

-a

I followed the install method from Agile Web D. with Rails,
that is I’m using WEBrick, and started it with ruby script/server (well,
in fact I’m using radrails, but I guess it’s the same), so I guess I’m
not using fastcgi.

Besides I tried reinitiating the server.

Any other idea?


#3

On Fri, 7 Apr 2006, sas sas wrote:

 unless @data

And then, taking into account that ruby is a fully interpreted language,
how come my changes are being ignored???

Saludos

Sas

PS: I apologize if this is a stupid question. I’m just taking my very
first steps with ruby and with rails.

if you are running in fastcgi mode you script, and it’s dependancies,
are
loaded only once. is this the case?

-a


#4

On Fri, 7 Apr 2006, sas sas wrote:

 unless @data
   @data = @dbman.restore
 end
 @data.each block

end

def each(&block)
unless @data
@data = @dbman.restore
end
@data.each &block
end

-a


#5

On Fri, 7 Apr 2006, sas sas wrote:

<%= session.sayHello %>

but then I get the following error

Showing app/views/resolucion/list.rhtml where line #19 raised:

undefined method `sayHello’ for #CGI::Session:0x38f6bd0

Seems like my changes are completely ignored…

any idea???

only one of three things can be happening

  • you are not using that session.rb, another one exists on your
    system

  • you are putting you edit in the wrong place in that file, show us
    the
    actual code, not a snippet

  • you are not restarting your server or otherwise loading the code

you can easily test this from the command line, which will be a whole
lot
easier than doing from within rails. for example

ruby -r cgi -r cgi/session -e’ s = CGI::Session.new(CGI.new); p
s.sayHello ’ < /dev/null

when this works you will have made the edit in the right place.

btw. it’s a horrible idea to change the core lib files in that way.
ruby’s
open classes provides a method about 1000 times easier and safer than
that to
make changes to core classes:

jib:~ > cat a.rb
class CGI
class Session
def say_hello
puts ‘hi’
end
end
end

jib:~ > ruby -r cgi -r cgi/session -r ./a.rb -e’ s =
CGI::Session.new(CGI.new); s.say_hello ’ < /dev/null
hi

in otherwords you do not need to, nor should you, edit session.rb to
make this
change.

hth.

-a


#6

thanks for the advice, but I’m stuck with something even more trivial

I tried adding the following in C:\ruby\lib\ruby\1.8\cgi\session.rb

def sayHello
  "hello"
end

and then in a view

<%= session.sayHello %>

but then I get the following error

Showing app/views/resolucion/list.rhtml where line #19 raised:

undefined method `sayHello’ for #CGI::Session:0x38f6bd0

Seems like my changes are completely ignored…

any idea???


#7

well, I’ve finally solved the thing

I tried in the controller the following

class Session
def sayHello
“hello”
end
end

and then, I saw the error saying something about
CGI::Session

In the C:\ruby\lib\ruby\1.8\cgi\session.rb file, the Session declaration
wa inside the CGI class, so I had to

class CGI::Session
def sayHello
“hello”
end
end

and it just worked

so I went on and defined

class CGI::Session
def data
unless @data
@data = @dbman.restore
end
@data
end
def each(&block)
data.each &block
end
def each_pair(&block)
data.each_pair &block
end
end

BTW, is there some way to redirect a bunch of methods (each, each_key,
each_pair, each_value, empty?, to_a, etc… I guess you know what I
mean) from self to self.data?

and then, to give it a try, in a view I added the following

<% session.each_pair { |key, value| %> <% } %>
params
key value
<%= h key %> <%= h value %>

Well, that’s all

Saludos

Sas

PS: I’m pretty impressed with how easy is to extend ruby. Just imagine
doing such a thing in asp…


#8

On Apr 7, 2006, at 12:11 AM, sas sas wrote:

BTW, is there some way to redirect a bunch of methods (each, each_key,
each_pair, each_value, empty?, to_a, etc… I guess you know what I
mean) from self to self.data?

ri Forwardable
ri SimpleDelegator


#9

On Fri, 7 Apr 2006, sas sas wrote:

well, I’ve finally solved the thing

great.

BTW, is there some way to redirect a bunch of methods (each, each_key,
each_pair, each_value, empty?, to_a, etc… I guess you know what I
mean) from self to self.data?

see

http://www.ruby-doc.org/stdlib/libdoc/forwardable/rdoc/classes/Forwardable.html
http://www.ruby-doc.org/stdlib/libdoc/delegate/rdoc/index.html

hth.

-a


#10

Well, I’m even more impressed

Just had to

class CGI::Session

extend Forwardable
def_delegators :data, :each, :each_pair, :length, :size

def data
unless @data
@data = @dbman.restore
end
@data
end
end

and that’s it

saludos

Sas

PS: theres a typo in

http://www.ruby-doc.org/stdlib/libdoc/forwardable/rdoc/classes/Forwardable.html

where it says

class RecordCollection
extends Forwardable
def_delegator :@records, :[], :record_number
end

it should be “extend Forwardable” and not “extends Forwardable”

I’ll send a mail to removed_email_address@domain.invalid

Saludos

Sas


#11

so, is there some way to configure the whole thing so as to be able to
debug the rails code???

I’ve figured it out, just had to restart webrick

And then, debugging rails code it’s just like debugging any other piece
of ruby

Saludos

Sas


#12

Ah, one last thing

I tried to set a breakpoint on the C:\ruby\lib\ruby\1.8\cgi\session.rb
but I couldn’t do it.

I guess it’s because that file is outside my app, and when I start the
irb I run c:\work\webResolucion>ruby script\breakpointer

so, is there some way to configure the whole thing so as to be able to
debug the rails code???

Thanks again

saludos

sas