記事

Last Modified:

Release Slack-0.02 #Perl #Slack

この文書は以前のバージョン0.01と0.02の変更点を記述しています。

このリリースには以前のバージョンと互換性の無い変更が含まれています。

インターフェースの追加

コンテキストオブジェクトが追加されました

コンテキストオブジェクトの実体は単にハッシュです。

コンテキストオブジェクト => {
    app        => アプリケーション,
    action     => アクション,
    controller => コントローラー,
};

コンテキストオブジェクトはアクションコードに渡され、contextキーワードで参照できます。

インターフェースの変更

Slackコンポーネントの読み込み方法が変更されました

Slackコンポーネントに新たにSlack::Appが追加され、コンポーネントの読み込み方法が変更されました。

新しい方法では、use Slackにおいてベースとなるコンポーネントを引数に指定します。

# application class
package MyApp;
use Slack qw(App);

# controller class
package MyApp::Root;
use Slack qw(Controller);

これはArkを参考にしました。

以前のバージョンではアプリケーションクラスはSlackクラスを継承し、コントローラークラスはuse Slack::Controllerしていました。

# application class
package MyApp;
use parent qw(Slack);

# controller class
package MyApp::Root;
use Slack::Controller;

そしてこの記述方法にはいくつかの問題がありました。

キャプチャされた文字列の格納方法が変更されました

名前付きキャプチャはこれまで通りreq->argsに格納されますが、通常のキャプチャは新しく追加されたreq->argvに格納されるように変更されました。

これまでreq->args->{1}として参照していた変数は、今後req->argv->[0]として参照します。 インデックスがズレていることに注意してください。

以前のバージョンでは通常のキャプチャはreq->args->{1}のように、マッチング変数$nnをハッシュキーとして格納していました。
しかしハッシュのキーとして数値が現れるのは、やはり見た目が良くありませんでした。

インターフェースの削除

不要になったreq->actionが削除されました

コンテキストオブジェクトの追加によってreq->actionが不要になったため削除されました。
今後はcontext->{action}を使用してください。

また同時にreq->action->controller->app(つまりcontext->{action}->controller->app)も削除されました。
今後はcontext->{app}を使用してください。

実装の変更

Slackは単なるコンポーネントローダーになりました

Slackからアプリケーションクラスの機能がSlack::Appに委譲され、Slack自体は単なるコンポーネントローダーになりました。

以前のバージョンではSlackにアプリケーションクラスとコンポーネントローダーが混在していました。

いくつかの問題が修正されました