五十嵐です。

CGIのスクリプトを書いているのですが、cgi-lib.rb には
cookie を利用する機能がありません。そこで、cookie を
使えるようにしてみたのですが、このような機能を追加
して頂けないでしょうか?

一応パッチを付けます。

# ruby-listの方が良かったでしょうか?


--- cgi-lib.rb.orig Thu Jan 28 04:02:51 1999 +++ cgi-lib.rb Sat Jan 30 08:45:16 1999 @@ -18,6 +18,7 @@ class CGI < SimpleDelegator attr("inputs") + attr("cookie") # original is CGI.pm def read_from_cmdline @@ -70,10 +71,60 @@ end super(@inputs) + + @cookie = {} + if env_cookie = ENV['HTTP_COOKIE'] + env_cookie.split(/; */).each do |x| + key, val = x.split(/=/,2).collect{|x|unescape(x)} + if @cookie.include?(key) + @cookie[key] += "\0" + (val or "") + else + @cookie[key] = (val or "") + end + end + end + + @header = {"Content-Type"=>"text/html"} + @body = "" + @title = "" end - def CGI.message(msg, title = "") - print "Content-type: text/html\n\n" + def set_header(name, val) + if @header.include?(name) + @header[name] += "\0" + (val or "") + else + @header[name] = (val or "") + end + return @header + end + def set_title(title) + @title = title + end + def set_body(body) + @body = body + end + + def set_cookie(name, val, expires = "Thu, 1-Jan-2030 00:00:00 GMT", etc = nil) + expires = expires.strftime("%a, %d-%b-%Y %X %Z") if expires.type == Time + tmp = format("%s=%s; expires=%s;", name, escape(val), expires) + tmp.concat format(" %s;", etc) if etc + return set_header("Set-Cookie", tmp) + end + def clear_cookie(name) + set_cookie(name, "xx", "Thu, 1-Jan-1980 00:00:00 GMT") + end + + def flush + CGI.message(@body, @title, @header) + end + + def CGI.message(msg, title = "", header = {"Content-Type"=>"text/html"}) + for name, vals in header + for val in vals.split(/\0/) + print format("%s: %s\n", name, val) + end + end + print "\n" print "<html><head><title>" print title print "</title></head><body>\n"