From 9ef8a2a5db011a0071a4232b368b1cc4d2346351 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 15 Jul 2003 07:35:14 +0000 Subject: * 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@4072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/cgi/session/pstore.rb | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 lib/cgi/session/pstore.rb (limited to 'lib/cgi/session') diff --git a/lib/cgi/session/pstore.rb b/lib/cgi/session/pstore.rb new file mode 100644 index 0000000000..d681d994a9 --- /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 -- cgit v1.2.3