diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-15 07:35:14 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-15 07:35:14 +0000 |
commit | 3498a7626b0b225ca11df5f441608704ca369e7c (patch) | |
tree | 566ed5a268701be4d60000769972440d4b6c553c /lib/cgi/session | |
parent | cccbc18533cf471b2ce777954af83adac3fe6ee3 (diff) | |
download | ruby-3498a7626b0b225ca11df5f441608704ca369e7c.tar.gz ruby-3498a7626b0b225ca11df5f441608704ca369e7c.tar.xz ruby-3498a7626b0b225ca11df5f441608704ca369e7c.zip |
* lib/matrix.rb: remove elements conversion to_f, to_i, to_r.
* lib/cgi/session/pstore.rb: add new file.
* process.c (proc_getgroups, proc_setmaxgroups): fix typo.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/cgi/session')
-rw-r--r-- | lib/cgi/session/pstore.rb | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/lib/cgi/session/pstore.rb b/lib/cgi/session/pstore.rb new file mode 100644 index 000000000..d681d994a --- /dev/null +++ b/lib/cgi/session/pstore.rb @@ -0,0 +1,78 @@ +require 'cgi/session' +require 'pstore' + +class CGI + class Session + def []=(key, val) + unless @write_lock + @write_lock = true + end + unless @data + @data = @dbman.restore + end + #@data[key] = String(val) + @data[key] = val + end + + class PStore + def check_id(id) + /[^0-9a-zA-Z]/ =~ id.to_s ? false : true + end + + def initialize session, option={} + dir = option['tmpdir'] || ENV['TMP'] || '/tmp' + prefix = option['prefix'] || '' + id = session.session_id + unless check_id(id) + raise ArgumentError, "session_id `%s' is invalid" % id + end + path = dir+"/"+prefix+id + path.untaint + unless File::exist? path + @hash = {} + end + @p = ::PStore.new path + end + + def restore + unless @hash + @p.transaction do + begin + @hash = @p['hash'] + rescue + @hash = {} + end + end + end + @hash + end + + def update + @p.transaction do + @p['hash'] = @hash + end + end + + def close + update + end + + def delete + path = @p.path + File::unlink path + end + + end + end +end + +if $0 == __FILE__ + STDIN.reopen("/dev/null") + cgi = CGI.new + session = CGI::Session.new cgi, 'database_manager' => CGI::Session::PStore + session['key'] = {'k' => 'v'} + puts session['key'].class + fail unless Hash === session['key'] + puts session['key'].inspect + fail unless session['key'].inspect == '{"k"=>"v"}' +end |