[#35937] WeRDS (the Weekly Ruby-Doc Summary) 2002-09-13 — maili31s@... (SugHimsi == SUGIHARA Hiroshi)

すぎむし。

14 messages 2002/09/16
[#36004] WeRDS (the Weekly Ruby-Doc Summary) 2002-09-22 — maili31s@... (SugHimsi == SUGIHARA Hiroshi) 2002/09/25

すぎむし%くどいようですが、うるさければ謹慎しますので。

[#35940] 9.2 の数値が 9.199999999999999 — "Inoue" <rubyist@...1.117.ne.jp>

井上です。

16 messages 2002/09/17
[#35941] Re: 9.2 の数値が 9.199999999999999 — matz@... (Yukihiro Matsumoto) 2002/09/17

まつもと ゆきひろです

[#35942] Re: 9.2 の数値が 9.199999999999999 — Fujimaru Hiroyasu <f-hiro@...> 2002/09/17

 藤丸です。

[#35977] [ANN] Exerb 2.1.0 — Yuya Kato <yuya-ml@4th.to>

Yuyaです。

18 messages 2002/09/20
[#35978] Cookie — 金光雅夫 (KANEMITSU Masao) <masao-k@...> 2002/09/20

金光です。どもっ (_ _)

[#35979] Re: Cookie — rio-t@... 2002/09/20

こんにちは、高石です。

[#35980] Re: Cookie — 金光雅夫 (KANEMITSU Masao) <masao-k@...> 2002/09/20

金光です。どもっ。

[ruby-list:35989] Re: Cookie

From: Shinji Miura <snj@...>
Date: 2002-09-22 05:12:47 UTC
List: ruby-list #35989
三浦@大阪電通大です。

From: 金光雅夫 (KANEMITSU Masao) <masao-k@a-net.email.ne.jp>
Subject: [ruby-list:35988] Re: Cookie
Date: Sun, 22 Sep 2002 09:55:16 +0900

> > # 一つ思い付いたのですが、マーシャリング機能を用いて
> > # 色々なdatabase_managerに接続できるようなクラスを作っても
> > # おもしろいかもしれません。
> > --------------------------------------------------------------
> > 「三浦真磁」
> > snj@users.sourceforge.jp
> 
> すばらしいっ!!!
> 
ちょっとネタで作ってみました。

動作にはCGI及びCGI::Sessionが必要です。
基本的にCGI::Sessionと同じ使い方ですが、唯一の異なる点が
これ一つであらゆるdatabase_managerで文字列以外のオブジェクトを
扱えてしまう点です。
CGI::Session.new ( ... )とする代わりに
CGI::Session::WithMarshaling.new ( ... )として下さい。

仕組みはオリジナルのCGI::Sessionを委譲先にして
[]メソッドと[]=メソッドを呼び出す際、その中でキーに対応する
値を対象にマーシャリング機能を使用しています。また、
そのままではコントロールコードが含まれているため
CGIクラスのURLエンコード・デコード機能も用いています。

とりあえずdatabase_managerはFileStoreで動作確認を取ってますが
冗談にもテストが十分とは言えない状態です。しかし理論上、
文字列を扱えるdatabase_managerではIOクラスのインスタンス、特異オブジェクト
以外の全ての型のオブジェクトを扱えるようになるはずです。

注意点はマーシャルダンプした値以外がデータベース中に混ざらないようにとか、
セッションを復元する際の型の確認とか、そのあたりになると思います。
後、欠点はわずかに処理が遅くなるとか…。

==ここから

#[  N A M E  ] CGI/Session/WithMarshaling
#[LAST UPDATE] 2002/09/22 Sun.
#[A U T H O R] Shinji Miura
#                   Copyright(C) Shinji Miura 2002

require 'cgi'
require 'cgi/session.rb'

class CGI
  class Session

    require 'delegate'

    class WithMarshaling < DelegateClass (CGI::Session)

      def initialize(request, option={})
	@session_man = CGI::Session.new (request, option={})
	super (@session_man)
      end

      def [](key)
	Marshal.load (CGI.unescape @session_man[key])
      end

      def []=(key, val)
	@session_man[key] = CGI.escape (Marshal.dump val)
      end

    end
  end
end

==ここまで
--------------------------------------------------------------
「三浦真磁」
snj@users.sourceforge.jp

In This Thread