From speakillof @ yahoo.co.jp Mon Aug 15 23:38:39 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Mon, 15 Aug 2005 23:38:39 +0900 (JST)
Subject: [cgikit-dev 56] CGIKit::Application#document_root and
CGIKit::ResourceManager#url
Message-ID: <20050815143839.39583.qmail@web3507.mail.bbt.yahoo.co.jp>
speakillofです。
CGIKit::Application#document_root が設定されないと、
CGIKit::ResourceManager#url がエラーになります。
CGIKit::ResourceManager#initialize で
@dcument_root を カレントディレクトリ にすれば
とおりますけど、デフォルト値は何が良いでしょうか?
def initialize( application, main_package_options = {} )
@application = application
@resource_store = @application.resource_store
@resources = @application.resources
@web_server_resources = @application.web_server_resources
@document_root = @application.document_root || "." # <--
@keys = {}
もちろん、
CGIKit::Application#document_root にデフォルト値を設定してもOKです。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Tue Aug 16 21:05:16 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Tue, 16 Aug 2005 21:05:16 +0900
Subject: [cgikit-dev 57] Re: CGIKit::Application#document_root and
CGIKit::ResourceManager#url
In-Reply-To: <20050815143839.39583.qmail@web3507.mail.bbt.yahoo.co.jp>
References: <20050815143839.39583.qmail@web3507.mail.bbt.yahoo.co.jp>
Message-ID: <7C0367F2-AF5B-4E39-95D5-4002C5694DAF@spice-of-life.net>
鈴木です。
On 2005/08/15, at 23:38, speakillof wrote:
> CGIKit::Application#document_root が設定されないと、
> CGIKit::ResourceManager#url がエラーになります。
>
> CGIKit::ResourceManager#initialize で
> @dcument_root を カレントディレクトリ にすれば
> とおりますけど、デフォルト値は何が良いでしょうか?
エラーが出なければいいので、"." でいいと思います。
ResourceManager#document_rootにセットするようコミットしておきま
した。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Tue Aug 16 22:04:39 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Tue, 16 Aug 2005 22:04:39 +0900 (JST)
Subject: [cgikit-dev 58] Ajax Handler
Message-ID: <20050816130439.89522.qmail@web3511.mail.bbt.yahoo.co.jp>
speakillof です。
Ajax on CGIKit を試していて色々気になったことがありました。
1 prototype.js の 置き場所
現在は packages/CGIKit に prototype.js があります。
これをプロジェクトの www に持ってこないで使えるようになりますか?
setup.rb で インストールすると {root}/share 以下に置かれるので、
HTTPサーバーで公開できないですよね。
パッケージとしてインストールしても
{project_root}/www
{project_root}/packages/CGIKIt/www
は違うディレクトリなので、
www 以下に prototype.js をコピーするか、
{project_root}/package/CGIKIt/www を HTTPサーバーで参照可能にするか、
のいずれかが必要になります。
多分、鈴木さんとしては後者が好みだと思うんですが、
サーバーの設定が面倒なんですよね...。
2 Ajax によってアクセスする URI
正確には session ID についてです。
以下に試用したCKoody::MainPage を載せます。
------------------
module CKoody
class MainPage < CGIKit::Component
attr_accessor :keyword
def init
#super
@keyword = "123456"
end
def display
res = CGIKit::Response.new # <-- ここが問題
res.content = "keyword = #{@keyword}"
res
end
end
end
------------------
{
:load => {
:element => Ajax::LoadScripts,
},
:live => {
:element => Ajax::ObservedField,
:value => :keyword,
:action => :display,
:update => "results",
:frequency => 0.25
},
}
------------------
MainPage
FugaFuga
Ffoo
HogeHoge
------------------
これでちゃんと id="results" の部分が置き換わるのですが、
CKoody::MainPage の出力する HTML の Ajax の URI の
session ID が固定されてしまうため
何回やっても "keyword = 123456" が表示されてしまいます。
おそらく動的にsession ID を取得して Ajax.Updater の
引数を変化させないとこの問題は回避できないでしょう。
回避できないというのならそれでまったく構わないのですが、
回避できない場合、DirectAction よりコンポーネントを
使うほうが自然のような気がします。
ちなみに
def display
"keyword = #{@keyword}"
end
とすると、Ajax 実行中の innerHTML で
CKoody::MainPage の ...
全体が設定されてしまいます。
3 Insertion(prototype.js)
http://wiki.fdiary.net/rails/?AjaxOnRails を参照
Rails では
<%= link_to_remote( "click here",
:update => "time_div",
:url => { :action => :say_when },
:position => "after" ) %>
というパラメーターが使えます。
update と url は良いとして、ここで言いたいのはposition属性です。
この属性は update で指定したID属性のどこに
Ajax の出力を挿入するかを決定します。
prototype.js レベルでは Insertion.Top, Butom, After, Before で
実装されており、これを Ajax.Updator のコンストラクタ
のオプションに指定すると良いみたいです。
例
new Ajax.Updater('#{@values[:update]}',
'#{context.ajax_component_action_url}',
{
asynchronous:true,
evalScripts:true,
onComplete:function(request) {
alert(request.responseText);
},
insertion: Insertion.After, /* ここ */
})
これに対応する予定はありますか?
4 Logger
これは Ajax とはまったく関係ないのですが、
CGIKit::Application#logger= で Logger のオブジェクトを
設定しても set_handler で上書きされてしまいます。
logger= を無効にするか、set_handler の実装を変えて
@logger が nil でない場合に @log_options を無視するかの
いずれかにしないといけないでしょう。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From speakillof @ yahoo.co.jp Tue Aug 16 22:20:51 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Tue, 16 Aug 2005 22:20:51 +0900 (JST)
Subject: [cgikit-dev 59] Re: Ajax Handler
In-Reply-To: <20050816130439.89522.qmail@web3511.mail.bbt.yahoo.co.jp>
Message-ID: <20050816132051.92485.qmail@web3502.mail.bbt.yahoo.co.jp>
speakillofです。
> 回避できないというのならそれでまったく構わないのですが、
> 回避できない場合、DirectAction よりコンポーネントを
> 使うほうが自然のような気がします。
すいません。
「コンポーネント より DirectAction を」です。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Wed Aug 17 17:45:09 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Wed, 17 Aug 2005 17:45:09 +0900
Subject: [cgikit-dev 60] Re: Ajax Handler
In-Reply-To: <20050816130439.89522.qmail@web3511.mail.bbt.yahoo.co.jp>
References: <20050816130439.89522.qmail@web3511.mail.bbt.yahoo.co.jp>
Message-ID: <020230B5-21FD-408A-AB4E-CDDEBBDF6B94@spice-of-life.net>
鈴木です。
On 2005/08/16, at 22:04, speakillof wrote:
> 1 prototype.js の 置き場所
> 現在は packages/CGIKit に prototype.js があります。
> これをプロジェクトの www に持ってこないで使えるようにな
> りますか?
使えます。
パッケージの www のみ、Webサーバのドキュメントルート
下に置きます。
setup.rb を使うと ../share にパッケージがインストールされ
ますが、
www のみドキュメントルート下、 (DOCROOT)/cgikit/packages に
手動でコピーしてもらいます。
ResourceManager#url でリソースのURLを取得すると、
そのドキュメントルートからパッケージリソースを検索します。
> 2 Ajax によってアクセスする URI
> 正確には session ID についてです。
...
> これでちゃんと id="results" の部分が置き換わるのですが、
> CKoody::MainPage の出力する HTML の Ajax の
> URI の
> session ID が固定されてしまうため
> 何回やっても "keyword = 123456" が表示されてしまいます。
> おそらく動的にsession ID を取得して Ajax.Updater の
> 引数を変化させないとこの問題は回避できないでしょう。
あれ?私の環境だと入力したキーワードが表示されますが…。
それと context ID ですよね?
Response を返しても session ID は変わらないと思いますが。
> ちなみに
>
> def display
> "keyword = #{@keyword}"
> end
>
> とすると、Ajax 実行中の innerHTML で
> CKoody::MainPage の ...
> 全体が設定されてしまいます。
XMLにして返すよう修正します。
XMLを直接書くために String はそのまま返すようにしました
が、不便ですね。
XML書くならResponseを返すようにするべきでした。
> 3 Insertion(prototype.js)
...
> Rails では
>
> <%= link_to_remote( "click here",
> :update => "time_div",
> :url => { :action => :say_when },
> :position => "after" ) %>
>
> というパラメーターが使えます。
...
> これに対応する予定はありますか?
対応します。まだよくAjaxもprototype.jsもわかっていな
いので、
できそうな箇所から属性を実装しています。
これが欲しい、というのがあれば突っ込んでください。
> 4 Logger
> これは Ajax とはまったく関係ないのですが、
> CGIKit::Application#logger= で Logger のオブジェクトを
> 設定しても set_handler で上書きされてしまいます。
> logger= を無効にするか、set_handler の実装を変えて
> @logger が nil でない場合に @log_options を無視す
> るかの
> いずれかにしないといけないでしょう。
後者に修正しておきます。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From suzuki @ spice-of-life.net Wed Aug 17 17:51:37 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Wed, 17 Aug 2005 17:51:37 +0900
Subject: [cgikit-dev 61] Re: Ajax Handler
In-Reply-To: <020230B5-21FD-408A-AB4E-CDDEBBDF6B94@spice-of-life.net>
References: <20050816130439.89522.qmail@web3511.mail.bbt.yahoo.co.jp>
<020230B5-21FD-408A-AB4E-CDDEBBDF6B94@spice-of-life.net>
Message-ID: <205369D4-D917-4257-9300-5CB344F9738F@spice-of-life.net>
鈴木です。
On 2005/08/17, at 17:45, SUZUKI Tetsuya wrote:
> 対応します。まだよくAjaxもprototype.jsもわかってい
> ないので、
> できそうな箇所から属性を実装しています。
> これが欲しい、というのがあれば突っ込んでください。
Ajaxエレメントを追加する予定はありますが、
すぐに実装するかどうかはわかりません。
JavaScript関連の処理は、デリゲートで既存のエレメントを拡張すれば
ある程度対応できるのではないかと考え中です。
# デリゲートについては日記に少し書いてます。
# http://www.spice-of-life.net/diary/?date=20050813#p01
# http://www.spice-of-life.net/diary/?date=20050816#p01
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Wed Aug 17 18:27:28 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Wed, 17 Aug 2005 18:27:28 +0900 (JST)
Subject: [cgikit-dev 62] Re: Ajax Handler
In-Reply-To: <020230B5-21FD-408A-AB4E-CDDEBBDF6B94@spice-of-life.net>
Message-ID: <20050817092728.82462.qmail@web3503.mail.bbt.yahoo.co.jp>
speakillof です。
> 鈴木です。
>
> > 1 prototype.js の 置き場所
> > 現在は packages/CGIKit に prototype.js があります。
> > これをプロジェクトの www に持ってこないで使えるようにな
> > りますか?
>
> 使えます。
>
> パッケージの www のみ、Webサーバのドキュメントルート
> 下に置きます。
> setup.rb を使うと ../share にパッケージがインストールされ
> ますが、
> www のみドキュメントルート下、 (DOCROOT)/cgikit/packages に
> 手動でコピーしてもらいます。
>
http://lists.sourceforge.jp/mailman/archives/cgikit-dev/2005-May/000024.html
の時にもう少し仕様を話し合っておくべきでした。
例えば、
# pwd
/home/hoge/
# ruby ckproject Hoge
とした場合、
(DOCROOT)/cgikit/packages は
/home/hoge/Hoge/cgikit/packages になりますよね。
# これ cgikit/packages と packages/CGIKit のどっちが良いんでしょうか?
この時、鈴木さんがHTTPサーバーが公開するディレクトリとしては
/home/hoge/Hoge/
全体を考えておられるんですよね?
ゆえに公開したくないデータ(components以下とか)は
サーバー設定で不可視にするという方針ですか?
私は /home/hoge/Hoge/www 以下を公開すべきと
だと考えたんですが...。
でも、汎用的(WEBrick, CGI, mod_ruby ...)に
この仕様にするのは無理っぽいですねえ。
> > 2 Ajax によってアクセスする URI
> > 正確には session ID についてです。
> ...
> > これでちゃんと id="results" の部分が置き換わるのですが、
> > CKoody::MainPage の出力する HTML の Ajax の
> > URI の
> > session ID が固定されてしまうため
> > 何回やっても "keyword = 123456" が表示されてしまいます。
> > おそらく動的にsession ID を取得して Ajax.Updater の
> > 引数を変化させないとこの問題は回避できないでしょう。
>
> あれ?私の環境だと入力したキーワードが表示されますが…。
うーん、もう一回試してみます。
私は WEBrick を使ったんですけど、
鈴木さんのほうは何で試されましたか?
> Response を返しても session ID は変わらないと思いますが。
そうです。変わらないことが問題かなと思ったんですが...。
でも、下の仕様になるなら問題ないと思います。
> > def display
> > "keyword = #{@keyword}"
> > end
> >
> > とすると、Ajax 実行中の innerHTML で
> > CKoody::MainPage の ...
> > 全体が設定されてしまいます。
>
> XMLにして返すよう修正します。
>
> XMLを直接書くために String はそのまま返すようにしました
> が、不便ですね。
> XML書くならResponseを返すようにするべきでした。
そのほうが楽だと思います。
セッションもつかえますし、
CGIKit::Component#to_s があれば
String オブジェクトも柔軟に使えます。
> JavaScript関連の処理は、デリゲートで既存のエレメントを拡張すれば
> ある程度対応できるのではないかと考え中です。
デリゲートの仕様で分からない点が...。
1 エレメントの属性のうちどれが拡張可能なのか?
一部の属性が拡張可能なのか、すべて拡張可能なのか
2 拡張できる属性名とデリゲートで拡張するためのメソッド名との対応
http://www.spice-of-life.net/diary/?date=20050816#p01
例えば、上の日記では CGIKit::String の value 属性を
デリゲートで拡張しています。
この時 value と StringDelegate#string_append_value_to_response の
対応付けは機械的になされるのでしょうか?
string_ <- CGIKit::String
append_ <- append_to_response
value_ <- value 属性
to_reponse <- append_to_response
# Repetition の list 属性なら repetition_xxx_list_yyy になる?
それとも、関連付けを定義したテーブルを使うのでしょうか?
3 デリゲートのメソッドの引数
メソッドの引数はとりあえず4つあれば十分だと思います。
が、毎回4つの引数を使うのは面倒かもしれません。
# どうでも良いけど、パスタおいしそうです。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Wed Aug 17 22:17:13 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Wed, 17 Aug 2005 22:17:13 +0900
Subject: [cgikit-dev 63] Re: Ajax Handler
In-Reply-To: <20050817092728.82462.qmail@web3503.mail.bbt.yahoo.co.jp>
References: <20050817092728.82462.qmail@web3503.mail.bbt.yahoo.co.jp>
Message-ID:
鈴木です。
On 2005/08/17, at 18:27, speakillof wrote:
> 例えば、
>
> # pwd
> /home/hoge/
> # ruby ckproject Hoge
>
> とした場合、
> (DOCROOT)/cgikit/packages は
> /home/hoge/Hoge/cgikit/packages になりますよね。
パッケージのうち www 以下だけを
ドキュメントルートに置くというのは、次のような構造を想定していま
す。
例えばドキュメントルートが /var/www のマシンに
Hoge パッケージをインストールするとしたら、
/usr/share/cgikit/packages/Hoge
/lib
/component
/resources
/locale
...
/var/www/cgikit/packages/Hoge
/www
のように、一つのパッケージの内容を分散します。
コンポーネントやライブラリはデータディレクトリに置き、
www のリソースのみドキュメントルートにコピーします。
(パッケージのパスをドキュメントルートに設定するのではなくて、
ドキュメントルートにパッケージの一部のみ移動します)
分散させるのは管理が面倒になるかもしれませんが、
パッケージのためにサーバを設定するよりは楽だと思います。
> # これ cgikit/packages と packages/CGIKit のどっち
> が良いんでしょうか?
cgikit/packages 以下にパッケージを置くので、CGIKitパッケー
ジなら
cgikit/packages/CGIKit になります。
>>> 2 Ajax によってアクセスする URI
>>> 正確には session ID についてです。
...
> うーん、もう一回試してみます。
> 私は WEBrick を使ったんですけど、
> 鈴木さんのほうは何で試されましたか?
あ、WEBrickでしたか。CGIで試していました。
先ほどWEBrickでも試してみましたが、同じように動きました。
ちなみに起動スクリプトではdocrootを次のように設定していま
す。
app.document_root = "/Library/WebServer/Documents"
server = WEBrick::HTTPServer.new({
:DocumentRoot => "/Library/WebServer/Documents",
:Port => port})
server.mount('/App', WEBrick::CGIKitServlet::ApplicationHandler, app)
> デリゲートの仕様で分からない点が...。
> 1 エレメントの属性のうちどれが拡張可能なのか?
> 一部の属性が拡張可能なのか、すべて拡張可能なのか
下の機械的かどうかという質問とつながりますが、デリゲートは
AOPのように各メソッド間に自動的に織り込まれるものではなく、
一つ一つエレメント側でチェックしながら呼び出します。
そのためすべての属性について拡張可能というわけではありません、
また、デリゲートは必ずしも属性を拡張するわけではなく、
基本的にはエレメントの挙動をカスタマイズするためのものです。
主に生成するURLをカスタマイズしたり、
フォーム値を変更するなどのデリゲートを予定しています。
> 2 拡張できる属性名とデリゲートで拡張するためのメソッド名との対応
>
> http://www.spice-of-life.net/diary/?date=20050816#p01
>
> 例えば、上の日記では CGIKit::String の value 属性を
> デリゲートで拡張しています。
> この時 value と
> StringDelegate#string_append_value_to_response の
> 対応付けは機械的になされるのでしょうか?
いえ、機械的ではなく、呼ばれる状況と目的によって変わります。
ただし命名規則を決めており、
メソッド名を見ればどのタイミングで呼ばれるかわかるようにしていま
す。
エレメント側では一つ一つメソッドをチェックするようになっています。
> 3 デリゲートのメソッドの引数
> メソッドの引数はとりあえず4つあれば十分だと思います。
> が、毎回4つの引数を使うのは面倒かもしれません。
これはどうしようか迷っています。
属性値に対して処理するだけならその属性値だけ渡せばいいのですが、
やはり状況 (element, request, response, context) に応じて
変更したいことがほとんどでしょうから。
面倒ですが、ほとんどのデリゲートメソッドでは引数が4つ以上
になりそうです。
> # どうでも良いけど、パスタおいしそうです。
ツナ・パセリ・卵をからめるだけで
お手軽というより手抜き中の手抜きですが、サラダ感覚で結構おいしい
ですよ。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Wed Aug 17 23:01:04 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Wed, 17 Aug 2005 23:01:04 +0900 (JST)
Subject: [cgikit-dev 64] Re: Ajax Handler
In-Reply-To:
Message-ID: <20050817140104.2191.qmail@web3502.mail.bbt.yahoo.co.jp>
speakillof です。
> 鈴木です。
>
> コンポーネントやライブラリはデータディレクトリに置き、
> www のリソースのみドキュメントルートにコピーします。
> (パッケージのパスをドキュメントルートに設定するのではなくて、
> ドキュメントルートにパッケージの一部のみ移動します)
>
> 分散させるのは管理が面倒になるかもしれませんが、
> パッケージのためにサーバを設定するよりは楽だと思います。
ああ、納得です。
パッケージの一部をコピーするコマンドがあると便利ですね。
> > うーん、もう一回試してみます。
> > 私は WEBrick を使ったんですけど、
> > 鈴木さんのほうは何で試されましたか?
>
> あ、WEBrickでしたか。CGIで試していました。
> 先ほどWEBrickでも試してみましたが、同じように動きました。
駄目でした...。CVS update してから試したんですが、
毎回 「keyword = 123456」になります。
Ajax の通信そのものは上手くいっているみたいで、
WEBrick を起動したコンソールには Ajax のアクセスで
下のようなメッセージが表示されます。
INSPIRON - - [17/Aug/2005:22:34:07 GMT+9:00]
"POST/index.cgi/c/e6284af3f1a6b013/0.2 HTTP/1.1" 200 16
- -> /index.cgi/c/e6284af3f1a6b013/0.2
INSPIRON - - [17/Aug/2005:22:34:09 GMT+9:00]
"POST /index.cgi/c/e6284af3f1a6b013/0.2 HTTP/1.1" 200 16
- -> /index.cgi/c/e6284af3f1a6b013/0.2
INSPIRON - - [17/Aug/2005:22:52:03 GMT+9:00]
"POST/index.cgi/c/e6284af3f1a6b013/0.2 HTTP/1.1" 200 16
- -> /index.cgi/c/e6284af3f1a6b013/0.2
同じsession ID, context ID でアクセスしていますが、
これであってますよね。
(Javascript に session ID, context ID が静的に埋め込まれるので、
変わらないはず)
> > デリゲートの仕様で分からない点が...。
> > 1 エレメントの属性のうちどれが拡張可能なのか?
> > 一部の属性が拡張可能なのか、すべて拡張可能なのか
>
> 下の機械的かどうかという質問とつながりますが、デリゲートは
> AOPのように各メソッド間に自動的に織り込まれるものではなく、
> 一つ一つエレメント側でチェックしながら呼び出します。
> そのためすべての属性について拡張可能というわけではありません、
>
> また、デリゲートは必ずしも属性を拡張するわけではなく、
> 基本的にはエレメントの挙動をカスタマイズするためのものです。
> 主に生成するURLをカスタマイズしたり、
> フォーム値を変更するなどのデリゲートを予定しています。
となると、結構複雑ですね。
例えば、CGIKit::Ajax::ObservedField は
CGKit::TextField に ObservedFiled の機能を
加えたものですので、デリゲーションで書けば
:delegate => ObservableFiled
として ObserableField に prototype.js の
オプションを 書いていくという形になるんでしょうか?
# で、ObservableField に相当するものを
# TextField 以外にも適応可能にするというわけですね。
> > 2 拡張できる属性名とデリゲートで拡張するためのメソッド名との対応
> いえ、機械的ではなく、呼ばれる状況と目的によって変わります。
> ただし命名規則を決めており、
> メソッド名を見ればどのタイミングで呼ばれるかわかるようにしています。
> エレメント側では一つ一つメソッドをチェックするようになっています。
拡張可能なエレメントを作るのは少々面倒ということですね。
了解です。
> > 3 デリゲートのメソッドの引数
> 面倒ですが、ほとんどのデリゲートメソッドでは引数が4つ以上
> になりそうです。
了解です。
> > # どうでも良いけど、パスタおいしそうです。
>
> ツナ・パセリ・卵をからめるだけで
> お手軽というより手抜き中の手抜きですが、サラダ感覚で結構おいしい
> ですよ。
>
私は料理できない人ですが、これなら作れそうです。
試してみます。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Fri Aug 19 00:34:57 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Fri, 19 Aug 2005 00:34:57 +0900
Subject: [cgikit-dev 65] Re: Ajax Handler
In-Reply-To: <20050817140104.2191.qmail@web3502.mail.bbt.yahoo.co.jp>
References: <20050817140104.2191.qmail@web3502.mail.bbt.yahoo.co.jp>
Message-ID:
鈴木です。
On 2005/08/17, at 23:01, speakillof wrote:
>> 分散させるのは管理が面倒になるかもしれませんが、
>> パッケージのためにサーバを設定するよりは楽だと思います。
> ああ、納得です。
> パッケージの一部をコピーするコマンドがあると便利ですね
そうですね。パッケージごとインストールするコマンドがよさそうです。
>> あ、WEBrickでしたか。CGIで試していました。
>> 先ほどWEBrickでも試してみましたが、同じように動きました。
> 駄目でした...。CVS update してから試したんですが、
> 毎回 「keyword = 123456」になります。
うーん、送信されるフォームデータがおかしいんでしょうか。
take_values_from_request でフォームデータが代入されるので、
MainPage#init で @keyword をセットしても変更されるはずなん
ですが。
> 同じsession ID, context ID でアクセスしていますが、
> これであってますよね。
> (Javascript に session ID, context ID が静的に埋め込まれ
> るので、
> 変わらないはず)
はい、合っています。
> 例えば、CGIKit::Ajax::ObservedField は
> CGKit::TextField に ObservedFiled の機能を
> 加えたものですので、デリゲーションで書けば
>
> :delegate => ObservableFiled
>
> として ObserableField に prototype.js の
> オプションを 書いていくという形になるんでしょうか?
:delegate にハッシュでデリゲートとオプションを指定するのを考えて
います。
:delegate => {
:class => ObservableField
:update => 'result',
...
}
ちょうど「コンポーネントのネスト」と同じような形になりますね。
http://www.programmers-paradise.com/tdiary/?date=20050624#p01
> # で、ObservableField に相当するものを
> # TextField 以外にも適応可能にするというわけですね。
はい。実装は普通にエレメントを作るより厄介な気もしますが。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Sun Aug 21 20:12:24 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Sun, 21 Aug 2005 20:12:24 +0900 (JST)
Subject: [cgikit-dev 66] =?iso-2022-jp?b?Y2twcm9qZWN0IBskQiROGyhCIHdoaWNo?=
=?iso-2022-jp?b?IHJ1YnkgGyRCMnNIchsoQg==?=
Message-ID: <20050821111224.68518.qmail@web3509.mail.bbt.yahoo.co.jp>
speakillof です。
ckproject の実行時にどうしても ruby のパスが必要になります。
今でも ENV['PATH'] からの探索はしていますが、
パスがとおっていない場合悲しくなります。
で、パッチです。
rbconfig.rb を使って ruby を探索します。
Ruby のインストーラーがまともなら、これで上手くいくはずです。
# rbconfig.rb がでたらめな場合は --ruby を使ってもらうということで
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: ckproject.diff
型: application/octet-stream
サイズ: 552 バイト
説明: ckproject.diff
URL: http://lists.sourceforge.jp/mailman/archives/cgikit-dev/attachments/20050821/652743f9/attachment.obj
From speakillof @ yahoo.co.jp Sun Aug 21 22:16:06 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Sun, 21 Aug 2005 22:16:06 +0900 (JST)
Subject: [cgikit-dev 67] =?iso-2022-jp?b?TG9hZENTUyAbJEIlKCVsJWElcyVIGyhC?=
Message-ID: <20050821131606.19449.qmail@web3510.mail.bbt.yahoo.co.jp>
speakillof です。
表題のような エレメントが欲しいです。
で、作るのは簡単なんですが、
ほとんど CGIKit::Ajax::LoadScripts のコピーになってしまいます。
module CGIKit
class LoadCSS < CGIKit::DynamicElement
class << self
include CGIKit
def create_api
api = API.new(:LoadCSS)
files = Binding.new(:files)
api << package_binding()
api << files
api
end
end
def append_to_response( response, context )
take_value(:files)
take_value(:package)
rm = context.application.resource_manager
if files = @values[:files] then
unless Array === files then
files = [files]
end
package = @values[:package]
langs = context.request.languages
req = context.request
files.each do |file|
if path = rm.url(file, package, langs, req) then
response.content << script(path)
end
end
end
end
def script( path )
"\n"
end
end
end
そこで、共通部分をくくりだすために
* CGIKit::ResourceLoadElement みたいな名前のモジュールを作る
* 基底クラスを作る
いずれかをしたいのですが、いかがでしょう?
# でも、これを作った場合、
# CGIKit::Image も上の実装に合わせるべきですよね...。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Mon Aug 22 14:59:04 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Mon, 22 Aug 2005 14:59:04 +0900
Subject: [cgikit-dev 68] =?iso-2022-jp?b?UmU6IGNrcHJvamVjdCAbJEIkThsoQiB3?=
=?iso-2022-jp?b?aGljaCBydWJ5IBskQjJzSHIbKEI=?=
In-Reply-To: <20050821111224.68518.qmail@web3509.mail.bbt.yahoo.co.jp>
References: <20050821111224.68518.qmail@web3509.mail.bbt.yahoo.co.jp>
Message-ID:
鈴木です。
On 2005/08/21, at 20:12, speakillof wrote:
> ckproject の実行時にどうしても ruby のパスが必要になりま
> す。
> 今でも ENV['PATH'] からの探索はしていますが、
> パスがとおっていない場合悲しくなります。
>
> で、パッチです。
> rbconfig.rb を使って ruby を探索します。
> Ruby のインストーラーがまともなら、これで上手くいくはずです。
ありがとうございます、取り込みます。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From suzuki @ spice-of-life.net Mon Aug 22 15:13:30 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Mon, 22 Aug 2005 15:13:30 +0900
Subject: [cgikit-dev 69] =?iso-2022-jp?b?UmU6IExvYWRDU1MgGyRCJSglbCVhGyhC?=
=?iso-2022-jp?b?GyRCJXMlSBsoQg==?=
In-Reply-To: <20050821131606.19449.qmail@web3510.mail.bbt.yahoo.co.jp>
References: <20050821131606.19449.qmail@web3510.mail.bbt.yahoo.co.jp>
Message-ID: <15E29B36-9C94-4927-B90A-044ACD3C9B95@spice-of-life.net>
鈴木です。
On 2005/08/21, at 22:16, speakillof wrote:
> 表題のような エレメントが欲しいです。
> で、作るのは簡単なんですが、
> ほとんど CGIKit::Ajax::LoadScripts のコピーになってしま
> います。
...
> そこで、共通部分をくくりだすために
>
> * CGIKit::ResourceLoadElement みたいな名前のモジュールを作る
> * 基底クラスを作る
>
> いずれかをしたいのですが、いかがでしょう?
継承させるほどエレメントに影響するようなものではないと思うので、
モジュールのほうがいいと思います。
> # でも、これを作った場合、
> # CGIKit::Image も上の実装に合わせるべきですよね...。
リソースを使うエレメントの挙動はほぼ似通っているので、
Image::Utilitiesのようにエレメントの属性に依存するのをやめて、
CGIKit::ResourceLoadElementのようなモジュールに
リソース関連のユーティリティメソッドをまとめてしまうのがいいかも
しれません。
その場合のモジュール名ですが、 CGIKit::ResourceLoading は
どうでしょう?
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Mon Aug 22 22:46:07 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Mon, 22 Aug 2005 22:46:07 +0900 (JST)
Subject: [cgikit-dev 70] =?iso-2022-jp?b?UmU6IExvYWRDU1MgGyRCJSglbCVhGyhC?=
=?iso-2022-jp?b?GyRCJXMlSBsoQg==?=
In-Reply-To: <15E29B36-9C94-4927-B90A-044ACD3C9B95@spice-of-life.net>
Message-ID: <20050822134607.88021.qmail@web3506.mail.bbt.yahoo.co.jp>
speakillof です。
> リソースを使うエレメントの挙動はほぼ似通っているので、
> Image::Utilitiesのようにエレメントの属性に依存するのをやめて、
> CGIKit::ResourceLoadElementのようなモジュールに
> リソース関連のユーティリティメソッドをまとめてしまうのがいいかも
> しれません。
> その場合のモジュール名ですが、 CGIKit::ResourceLoading は
> どうでしょう?
えーと、include して使うのであれば、
私は CGIKit::ResourceLoadable が良いですが、
CGIKit::ResourceLoading でも良いと思います。
鈴木さんにお任せします。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From speakillof @ yahoo.co.jp Mon Aug 22 22:58:37 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Mon, 22 Aug 2005 22:58:37 +0900 (JST)
Subject: [cgikit-dev 71] =?iso-2022-jp?b?UmU6IGNrcHJvamVjdCAbJEIkThsoQiB3?=
=?iso-2022-jp?b?aGljaCBydWJ5IBskQjJzSHIbKEI=?=
In-Reply-To:
Message-ID: <20050822135837.35257.qmail@web3502.mail.bbt.yahoo.co.jp>
speakillof です。
> > ckproject の実行時にどうしても ruby のパスが必要になります。
> > ...
> > rbconfig.rb を使って ruby を探索します。
>
> ありがとうございます、取り込みます。
どうもありがとうございます。
もう一つ御願いです。
cgikit/bin 以下の 実行スクリプト群
(ckparse, ckproject, ckpackage, ckcomponent, cksweep)
をまとめて、ひとつのコマンドにしませんか?
理由はこのままコマンドが増えると実装が DRY にならないからです。
一つにまとめた場合、ckparse, ckproject, ckpackage は
ckcmd parse Hoge.html
ckcmd project Hoge
ckcmd package Foo
になります。イメージとしては
apt-get, apt-cache みたいなものです。
# ckcmd には適当な名前が必要ですが
手元には一つにまとめたコマンドがありますが、
テストが終わっていません。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From suzuki @ spice-of-life.net Tue Aug 23 17:34:12 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Tue, 23 Aug 2005 17:34:12 +0900
Subject: [cgikit-dev 72] =?iso-2022-jp?b?UmU6IGNrcHJvamVjdCAbJEIkThsoQiB3?=
=?iso-2022-jp?b?aGljaCBydWJ5IBskQjJzSHIbKEI=?=
In-Reply-To: <20050822135837.35257.qmail@web3502.mail.bbt.yahoo.co.jp>
References: <20050822135837.35257.qmail@web3502.mail.bbt.yahoo.co.jp>
Message-ID: <0D6F2056-9ED1-4E9B-9390-97311578537F@spice-of-life.net>
鈴木です。
On 2005/08/22, at 22:58, speakillof wrote:
> cgikit/bin 以下の 実行スクリプト群
> (ckparse, ckproject, ckpackage, ckcomponent, cksweep)
> をまとめて、ひとつのコマンドにしませんか?
> 理由はこのままコマンドが増えると実装が DRY にならないか
> らです。
いいですよ。思ったよりコマンドも増えてきましたし。
テストが終わったらコミットしていただけますか?
> # ckcmd には適当な名前が必要ですが
cgikit でいいと思います。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From speakillof @ yahoo.co.jp Sat Aug 27 19:53:35 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Sat, 27 Aug 2005 19:53:35 +0900 (JST)
Subject: [cgikit-dev 73] Re: c
In-Reply-To: <0D6F2056-9ED1-4E9B-9390-97311578537F@spice-of-life.net>
Message-ID: <20050827105335.27036.qmail@web3501.mail.bbt.yahoo.co.jp>
--- SUZUKI Tetsuya からのメッセージ:
> 鈴木です。
>
> On 2005/08/22, at 22:58, speakillof wrote:
> > cgikit/bin 以下の 実行スクリプト群
> > (ckparse, ckproject, ckpackage, ckcomponent, cksweep)
> > をまとめて、ひとつのコマンドにしませんか?
> > 理由はこのままコマンドが増えると実装が DRY にならないか
> > らです。
>
> いいですよ。思ったよりコマンドも増えてきましたし。
> テストが終わったらコミットしていただけますか?
>
>
> > # ckcmd には適当な名前が必要ですが
>
> cgikit でいいと思います。
>
> -----------------------------------
> 鈴木鉄也 (SUZUKI Tetsuya)
> suzuki @ spice-of-life.net
> http://www.spice-of-life.net/
>
>
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
From speakillof @ yahoo.co.jp Sat Aug 27 20:04:27 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Sat, 27 Aug 2005 20:04:27 +0900 (JST)
Subject: [cgikit-dev 74] =?iso-2022-jp?b?Y2sgGyRCJTMlXiVzJUkbKEI=?=
In-Reply-To: <0D6F2056-9ED1-4E9B-9390-97311578537F@spice-of-life.net>
Message-ID: <20050827110427.77543.qmail@web3510.mail.bbt.yahoo.co.jp>
speakillof です。
途中でメールを送信してしまいました。ごめんなさい。
> > # ckcmd には適当な名前が必要ですが
>
> cgikit でいいと思います。
lib/cgikit.rb とごっちゃにならないか心配です。
統合した ck コマンドを添付しますので、
名前の決定に関しては最終的にお任せします。
簡単に新しいコマンドの定義する方法を書いておきます。
module CGIKit
module Command
class Hoge < Base
end
end
end
で cgikit hoge がコマンドとして使えます。
def execute(opts)
end
の中にコマンドの内容を書きます。
コマンド実行前に Base#setup
コマンド実行後に Base#teardown
が呼ばれます。フック名が気に入らない場合は
will/did 系に変えてもらっても結構です。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: cgikit
型: application/octet-stream
サイズ: 7096 バイト
説明: cgikit
URL: http://lists.sourceforge.jp/mailman/archives/cgikit-dev/attachments/20050827/93724665/attachment.obj
From speakillof @ yahoo.co.jp Sun Aug 28 13:31:13 2005
From: speakillof @ yahoo.co.jp (speakillof)
Date: Sun, 28 Aug 2005 13:31:13 +0900 (JST)
Subject: [cgikit-dev 75] =?iso-2022-jp?b?UmU6IBskQiVGJXMlVyVsITwlSCROGyhC?=
=?iso-2022-jp?b?GyRCSjg7eiUzITwlSTtYRGobKEI=?=
In-Reply-To:
Message-ID: <20050828043113.99198.qmail@web3510.mail.bbt.yahoo.co.jp>
speakillof です。
遅くなりました。
# 最後のメールから三ヶ月も過ぎてしまいました。
> 鈴木です。
>
> On 2005/05/20, at 23:55, speakillof wrote:
> >> サブコンポーネントとルートコンポーネントの
> >> 文字コードが異なる場合に、
> >> 表示時にルートコンポーネントの文字コードに変換するのであれば、
> >> 2. がいいと思います。
ルートコンポーネントとサブコンポーネントで
文字コード( の xxx の部分)
が一致しないときにエラーを出すようにしました。
パッチを添付します。
# diff -uNrb でパッチを取っています。
個人的には修正範囲が4つのファイルにわたるので、
好きではありません。
# 特に CGIKit::Context#parser_info が嫌いです。
問題は Parser がルートとサブを parse する時に
情報を共有できるかどうかという点で、
Context を介す以外に良い方法が見つかりませんでした。
Thread#[] を使う方法があるとは思うのですが、
ポータブルに Thread#[] が使えるのか分からなくて
とりあえずやめています。
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: encoding.patch
型: application/octet-stream
サイズ: 4128 バイト
説明: encoding.patch
URL: http://lists.sourceforge.jp/mailman/archives/cgikit-dev/attachments/20050828/f8ef0fc0/attachment.obj
From suzuki @ spice-of-life.net Mon Aug 29 18:20:26 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Mon, 29 Aug 2005 18:20:26 +0900
Subject: [cgikit-dev 76] =?iso-2022-jp?b?UmU6IGNrIBskQiUzJV4lcyVJGyhC?=
In-Reply-To: <20050827110427.77543.qmail@web3510.mail.bbt.yahoo.co.jp>
References: <20050827110427.77543.qmail@web3510.mail.bbt.yahoo.co.jp>
Message-ID: <4DE4B936-B582-4B93-A03F-F462533457DC@spice-of-life.net>
鈴木です。
On 2005/08/27, at 20:04, speakillof wrote:
>>> # ckcmd には適当な名前が必要ですが
>> cgikit でいいと思います。
> lib/cgikit.rb とごっちゃにならないか心配です。
> 統合した ck コマンドを添付しますので、
> 名前の決定に関しては最終的にお任せします。
ありがとうございます。
コマンド名は cgikit ですが、CGIKit::Command以下のク
ラスを
別のファイル cgikit/project/command.rb に分けておきました。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/
From suzuki @ spice-of-life.net Wed Aug 31 19:24:58 2005
From: suzuki @ spice-of-life.net (SUZUKI Tetsuya)
Date: Wed, 31 Aug 2005 19:24:58 +0900
Subject: [cgikit-dev 77] =?iso-2022-jp?b?UmU6IBskQiVGJXMlVyVsITwlSCROGyhC?=
=?iso-2022-jp?b?GyRCSjg7eiUzITwlSTtYRGobKEI=?=
In-Reply-To: <20050828043113.99198.qmail@web3510.mail.bbt.yahoo.co.jp>
References: <20050828043113.99198.qmail@web3510.mail.bbt.yahoo.co.jp>
Message-ID: <0EBF4718-BDE5-4514-8C90-3C073619C1C2@spice-of-life.net>
鈴木です。
On 2005/08/28, at 13:31, speakillof wrote:
> ルートコンポーネントとサブコンポーネントで
> 文字コード( の xxx の部分)
> が一致しないときにエラーを出すようにしました。
> パッチを添付します。
...
> 個人的には修正範囲が4つのファイルにわたるので、
> 好きではありません。
ありがとうございます。
パッチの実装方法に余地があると思うので、
ちょっとコミットを保留させていただきます。
> 問題は Parser がルートとサブを parse する時に
> 情報を共有できるかどうかという点で、
> Context を介す以外に良い方法が見つかりませんでした。
自身がルートであるかどうかはコンポーネントが知っているので、
Component に parser_info を持たせて
Context#component 経由で取得するのはどうですか?
application.rb と context.rb は変更せずに済むのではないか
と思います。
-----------------------------------
鈴木鉄也 (SUZUKI Tetsuya)
suzuki @ spice-of-life.net
http://www.spice-of-life.net/