Permalink
Browse files

update docs

  • Loading branch information...
1 parent bab71c3 commit a4008960ecdd553ad32ccc02dedf2b084c083130 @nekokak committed Mar 8, 2010
View
@@ -1,8 +1,11 @@
-KamuiはSledgeとarkの好きな部分をいいとこ取りして作った
-おれおれフレームワークです。
+Kamui は psgi に対応したフレームワークです.
-モバイルサイトを作るときに便利なPluginも豊富にあります。
-どうぞよろしく
+Kamui は Sledge と ark を参考にして作りました.
-Atsushi Kobayashi (nekokak)
+Sledge の見通しの良さと ark の container 経由での
+各種API呼び出しを私なりに使い勝手が良いように構成し直しました.
+
+また、mobileサイトが簡単に作れるようにmobile用のプラグインを各種用意しておきました.
+
+Atsushi Kobayashi (id:nekokak)
View
@@ -0,0 +1,86 @@
+KamuiではAuthorizerを色々な形でかけることができます。
+
+KamuiはPlackベースなwafなのでPlack::Middleware::Authで
+authしてもいいのですが、細かいコントロールがしたい場合があるので、
+独自実装をもっています。
+もちろんPlack::Middleware::Authを使ってもいいと思います。
+
+KamuiのAuthorizerは基本Sledgeに似た使い方になっていますが、
+一部Sledgeとはことなるので注意してください。
+
+Authorizerをつかうには
+
+>||
+package MyAPP::Web::Authorizer::BasicAuth;
+use Kamui;
+use base 'Kamui::Web::Authorizer::BasicAuth';
+my $passwd = '0000';
+sub authorize {
+ my ($class, $context) = @_;
+
+ my ($login_id, $login_pw) = $class->basic_auth($context);
+ if ($passwd eq $login_pw) {
+ return;
+ } else {
+ return $class->show_error_page;
+ }
+}
+1;
+||<
+
+このようなAuthorizerクラスを用意し、
+
+>||
+package MyAPP::Web::Controller::Root;
+use Kamui::Web::Controller -base;
+__PACKAGE__->authorizer('+MyAPP::Web::Authorizer::BasicAuth');
+||<
+
+
+このようにControllerクラスで指定するだけです。
+これで、このMyAPP::Web::Controller::Root全体にMyAPP::Web::Authorizer::BasicAuthによる
+認証がかけられます。
+
+先の例ではController単位でしか認証をかけることができませんでした。
+しかし、1Controller内のdispatchされるmethodでも
+認証をかけたいmethodとかけたくないmethod
+このmethodだけはちょっと別の認証をかけたい。。。
+なんてことがあるかもしれません。
+Kamuiではそんな事も可能です。
+
+基本的には先の例のように設定し、
+Controller全体に認証をかけたとします。
+
+>||
+package MyAPP::Web::Controller::Root;
+use Kamui::Web::Controller -base;
+__PACKAGE__->authorizer('+MyAPP::Web::Authorizer::BasicAuth');
+
+sub do_index {}
+sub do_add {}
+sub do_edit {}
+sub do_del {}
+1;
+||<
+
+この例だとdo_*のメソッド全てに認証がかかりますが、
+do_indexメソッドには認証を掛けたくないんだよなぁと言う場合、
+以下のようにします。
+
+>||
+pckage MyAPP::Web::Controller::Root;
+use Kamui::Web::Controller -base;
+__PACKAGE__->authorizer('+MyAPP::Web::Authorizer::BasicAuth');
+
+sub do_index : auth('Null') {}
+sub do_add {}
+sub do_edit {}
+sub do_del {}
+1;
+||<
+
+このように個別に認証をかけたいmethodのアトリビュートにauto('xxxx')と指定することで
+指定したAuthorizerがそのメソッド用に設定されます。
+
+この例ではKamui::Web::Authorizer::Nullが設定されます。
+
View
@@ -0,0 +1,160 @@
+kamuiでは色々なビジネスロジックの処理をまとめたクラスをcontainerというところから
+取り出して使うことをおすすめしています。
+
+デフォルトのcontainerとしてはconfとhomeが存在します。
+
+confは名前のとおりアプリケーション用の設定情報にアクセスし、
+homeはアプリケーションが配置されているhomeディレクトリ情報にアクセスします。
+
+Kamui::Containerではそれ以外にも様々なロジックを格納し
+好きな場所でそのロジックを取り出すことができます。
+
+Containerをつかうには
+
+>||
+package MyApp::Container;
+use Kamui::Container -base;
+1;
+||<
+
+このようなクラスを定義します。
+KamuiではContainerクラスは必ず定義する必要があります。
+
+これだけでconf/homeは自動で定義されます。
+
+ロジックをContainerに登録するには以下のようにします。
+
+>||
+package MyApp::Container;
+use Kamui::Container -base;
+register foo => sub {'foo'};
+1;
+||<
+
+まずKamui::Containerをuseする時に引数として-baseを指定します。
+-baseと指定することで、このクラスがContainerのベースクラスとなり、register関数がexportされます。
+
+そして、このようにregisterという関数を使うことでContainerクラスにロジックを登録することができます。
+register関数の第一引数にロジックにアクセスする名前を定義し、
+第二引数にそのロジックのコンストラクタを定義します。
+第二引数に定義しているのが、実際のロジックにアクセスするためのコンストラクタということに注意しくてください。
+
+なので、
+
+>||
+package MyApp::Container;
+use Kamui::Container -base;
+use Foo;
+register foo => sub {
+ Foo->new;
+};
+1;
+||<
+
+多くの場合はこのようにオブジェクトのインスタンスを作るかと思います。
+
+定義したcontainer情報は
+
+>||
+package MyAPP::Demo;
+use MyAPP::Container;
+sub run {
+ container('foo');
+}
+1;
+||<
+
+このようにすればアクセスすることが可能です。
+
+Kamui::Containerを使ってつくったMyAPP::Containerをuseすると、
+自動でcontainerという関数がuseしたクラスにexportされます。
+
+>||
+container('foo')
+||<
+
+と、初回呼び出した段階で登録されているコンストラクタが一度実行されます。
+二度目以降のアクセスでは、初回に実行されたコンストラクタの情報がキャッシュされているので効率的です。
+
+Containerにビジネスロジックをどんどん登録することで、
+自由に好きな場所からビジネスロジックにアクセスすることが可能ですが、
+Kamui::Containerではわざわざregister関数を使ってロジックを登録しなくても
+簡単にビジネスロジックにアクセスすることが可能です。
+
+例えば、
+
+>||
+package MyAPP::Api::Foo;
+use strict;
+use warnings;
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+sub foo {'foo'}
+1;
+||<
+
+このようなビジネスロジックの処理をまとめたクラスがあるとします。
+このクラスにアクセスするときにregister関数を使う場合
+
+>||
+package MyAPP::Container;
+use Kamui::Container -base;
+use MyAPP::Api::Foo;
+register api_foo => sub {
+ MyAPP::Api::Foo->new;
+};
+1
+||<
+
+このように書きます。
+しかしいちいちregisterで登録するのが面倒なので別の方法を使います。
+Kamui::Containerは
+
+>||
+package MyAPP::Demo;
+use MyAPP::Container qw/api/;
+sub run {
+ api('Foo')->foo;
+}
+1;
+||<
+
+このようにContainerクラスをuseす時に文字列を指定すると
+指定した文字列の名前の関数がexportされます。
+
+exportされた関数経由でビジネスロジックにアクセスします。
+
+この例の場合、apiという文字列を指定しているので
+apiという関数がexportされます。
+exportされたapiという関数は引数で受け取った文字列を使って内部では
+MyAPP::Api::Fooというクラスをuseし、newメソッド(コンストラクタ)を実行し
+MyAPP::APi::Fooというクラスのインスタンスをキャッシュします。
+
+
+今回の例ではapiという文字列を指定してapiという関数をexportしましたが、
+
+>||
+package MyAPP::Command::Foo;
+use strict;
+use warnings;
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+sub foo {'foo'}
+1;
+
+package MyAPP::Demo;
+use MyAPP::Container qw/command/;
+
+sub run {
+ command('Foo')->foo;
+}
+1;
+||<
+
+とcommandという文字列を指定するとcommandという名前で関数がexportされ、
+MyAPP::Command::*というクラスにアクセスすることが可能になります。
+
@@ -0,0 +1,36 @@
+KamuiではPlugin機構を備えています。
+
+デフォルトでKamui::Pluginに色々なプラグインを用意しているので参考にしてください。
+
+Kamui::Pluginでは基本的にContextにメソッドを設定します。
+
+Pluginを使うと
+
+>||
+$context->xxxx
+||<
+
+のようにプラグインで作ったメソッドにアクセスすることができます。
+
+Pluginをつくるのは簡単です。
+
+>||
+package MyAPP::Plugin::Foo;
+use Kamui;
+use base 'Kamui::Plugin';
+sub register_method {
+ +{
+ foo => sub {
+ 'foo';
+ },
+ };
+}
+1;
+||<
+
+このようにKamui::Pluginを継承したモジュールをつくり、
+register_methodというfunction内に作りたいPluginの内容をhashrefで書くだけです。
+
+この例の場合、
+fooという名前でcontextにメソッドがinjectionされ
+対応するcoderefが呼び出されるロジックになります。
File renamed without changes.
@@ -0,0 +1,29 @@
+基本的に携帯端末でも外部CSSを扱うことは可能なので、
+デザイナーさんには外部CSSをもりもりつかったデザインを組んでもらえばよいでしょう。
+
+しかしなぜかDoCoMoの端末だけは外部CSSを扱うことができません。
+ガッデム!!
+
+しかしDoCoMo対応したいがために外部CSSを諦めて全てインライン展開するなんて
+ばからしいですよね!
+そこでKamuiではそういうケースにも対応できるPluginが用意されています。
+
+>||
+package MyApp::Web::Handler;
+use Kamui::Web::Handler;
+use_plugins [qw/Mobile::CSSFilter Mobile::Agent/];
+1;
+||<
+
+これだけです!
+このPluginを有効にし、デザイナーさんには外部CSSを使ってサイトを作ってもらいましょう。
+
+Kamui::Plugin::Mobile::CSSFilterというPluginをつかうだけで
+簡単にCSSを自動インライン化することができますので、
+DoCoMo端末でも問題なくかっちょいいCSSが効いたサイトをユーザに提供することができます。
+
+Kamui::Plugin::Mobile::CSSFilterは
+Kamui::Plugin::Mobile::(Agent|Attribute)を有効にする必要があるので
+一緒に設定してください。
+
+
@@ -0,0 +1,21 @@
+モバイルサイトを作っていると
+絵文字をばんばん使いたくなるのは必死です。
+
+しかし、3キャリア対応サイトをつくていて、それぞれのコードで絵文字を書いてしまうと、
+3キャリア毎にテンプレートをわけたりしてめんどくさいですよね。
+
+なので簡単に3キャリアに対応した絵文字を使えるようにしました。
+
+>||
+package MyApp::Web::Handler;
+use Kamui::Web::Handler;
+use_plugins [qw/Mobile::EmojiFilter/];
+1;
+||<
+
+Kamui::Plugin::Mobile::EmojiFilterを有効にするだけです!
+Pluginに有効にして、テンプレートに{emoji:XXXX}という文字列を書けば
+自動で3キャリアに対応した絵文字を出力させることができます。
+
+なおXXXXの部分はDoCoMoのunicode 16進数を指定してください。
+
@@ -0,0 +1,26 @@
+モバイルサイトを開発する際にまず問題になるのは文字コードでしょう。
+しかし恐れることはありません。
+Kamuiでは格キャリアの文字コードを意識することなく開発することが可能です。
+
+KamuiではEncode::JP::Mobileをつかって簡単にキャリアに対応した文字コードを扱う事が可能です。
+
+さぁ、早速使ってみましょう
+
+>||
+package MyApp::Web::Handler;
+use Kamui::Web::Handler;
+use_plugins [qw/Mobile::Encode Mobile::Agent/];
+1;
+||<
+
+これだけです!
+なんて簡単なんでしょうか。
+
+Kamui::Plugin::Mobile::EncodeのPluginを有効にするだけです。
+ちなみにKamui::Plugin::Mobile::Encodeは
+Kamui::Plugin::Mobile::(Agent|Attribute)に依存しているので
+どちらかのPluginを有効にしてください。
+
+これだけで、3キャリアに対応した文字コードで入出力を管理することができます!
+
+
@@ -0,0 +1,16 @@
+DoCoMoではuriにguid=onなパラメータを付けることで端末番号を取得することが可能です。
+
+しかし全部の内部URLにguid=onをつけて回るのは激しくだるいのでPluginで楽をしちゃいましょう。
+
+>||
+package MyApp::Web::Handler;
+use Kamui::Web::Handler;
+use_plugins [qw/Mobile::DoCoMoGUIDFilter Mobile::Agent/];
+1;
+||<
+
+これだけです!
+Kamui::Plugin::Mobile::DoCoMoGUIDFilterを有効にするだけで全て自動対応します。
+Kamui::Plugin::Mobile::DoCoMoGUIDFilterは
+Kamui::Plugin::Mobile::(Agent|Attribute)を有効にしないとつかえないので
+一緒に有効にして下さい
Oops, something went wrong.

0 comments on commit a400896

Please sign in to comment.