Help with state in CGI with Ruby

A few weeks back I helped write a small web application for some reporting
purposes using mod_ruby/eruby. Being completely ignorant of CGI programming,
it was a fun learning experience, and thanks to those on this list that helped
me.

Being well received, now a more complicated application (with some
similarities) has been requested, and this time I’d like it to be less ad hoc.

What I’m looking for is a Ruby package to help with the bookkeeping due to the
stateless nature of CGI programming.

The previous project used hidden HTML fields to keep state as the client would
fill in various form pages. The contents of the forms are dependent on
previous choices, hence the need to maintain state.

It really felt like a bad hack, but a colleague (who did most of the rhtml)
says that this is just how its done: the parts of the program that interact
directly with the web are just generally ugly.

There are several ideas that come to mind to help. Simply wrap some methods
around creating hidden fields to manage data, or use a session ID and the
Marshal module to write the state to disk. Is there a framework that will help
with this (and likely other related tasks)?

However my real question is: does something already exist that helps me with
this? I’ve looked through the RAA, and the closest thing I saw was borges, but
my platform is Apache (not WEBrick).

Realize I’m not very well versed in the proper terminology etc. so I may be
missing some obvious things. It may be that what I want is simple enough that
no one has made a package, if so I guess we’ll just write it. But I just have
this feeling that something this common has got to be part of a larger
framework.

Does anyone have any suggestions?

Thanks in advance,

···


---------------------------------------------- | --------------------------
Brett Williams |

Agilent Technologies brett_williams@agilent.com
> It really felt like a bad hack, but a colleague (who did most of the rhtml) > says that this is just how its done: the parts of the program that interact > directly with the web are just generally ugly. > > There are several ideas that come to mind to help. Simply wrap some methods > around creating hidden fields to manage data, or use a session ID and the > Marshal module to write the state to disk. Is there a framework that will > help with this (and likely other related tasks)? > > However my real question is: does something already exist that helps me > with this? I've looked through the RAA, and the closest thing I saw was > borges, but my platform is Apache (not WEBrick). > > Realize I'm not very well versed in the proper terminology etc. so I may be > missing some obvious things. It may be that what I want is simple enough > that no one has made a package, if so I guess we'll just write it. But I > just have this feeling that something this common has got to be part of a > larger framework. > > Does anyone have any suggestions?

this is super simple, and works great :

http://raa.ruby-lang.org/list.rhtml?name=cgi-sess-pstore

it allows one to store arbitrary objects using cgi sessions. sessions are
alot slicker than hidden fields, espcecially if you want to store more than
just strings - or data which is large - between page hits.

the session itself uses arbitrary objects in the way a hash does :

key_object -> value_object

usages is as in

require 'cgi’
require ‘cgi/session/pstore’

cgi = CGI.new
sessionn = CGI::Session.new(cgi, ‘database_manager’ => CGI::Session::PStore)

key = String.new('some_key_object)
value = [‘can’, ‘be’, ‘most’, ‘anything’]

session[key] = value

cgi stuff

session.update

you can download it from

http://raa.ruby-lang.org/list.rhtml?name=cgi-sess-pstore

see an example program at

http://eli.fsl.noaa.gov/ruby/class/0/cgi/session/pstore.cgi

it’s an anoying little program which caches the current time as a Time object
and displays it every few seconds using meta-refresh - which is terrible but
illustrates the point. :wink:

there’s a link there to view the source.

feel free to contact me with questions.

-a

···

On Wed, 16 Apr 2003, Brett H. Williams wrote:

Ara Howard
NOAA Forecast Systems Laboratory
Information and Technology Services
Data Systems Group
R/FST 325 Broadway
Boulder, CO 80305-3328
Email: ara.t.howard@fsl.noaa.gov
Phone: 303-497-7238
Fax: 303-497-7259
====================================