ちょっと手軽な開発者用のコントローラを作ったんだけど、プロダクションにはあげたくないよ〜。ママ〜って時。

ちょっと手軽な開発者用のコントローラを作ったんだけど、プロダクションにはあげたくないよ〜。パパ〜って時はこんな感じのコントローラを継承するとかどうだろうか。

package Catalyst::Controller::AllowDisable;

use base qw/Catalyst::Controller/;
use strict;
use warnings;

sub new {
    my $self = shift;
    my $app = $_[0];
    if ( !$app->config->{on_controller_disable} ) {
        my $new = $self->NEXT::new(@_);
        $new->_application( $app );
        return $new;
    }
    return $app;
}


1;
Package App::Web::Controller::Devel;

use base qw/Catalyst::Controller::AllowDisable/;

sub make_10000_users : Local {

}


1;
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| App::Web::Controller::Devel                                     | instance |
| App::Web::Controller::Root                                      | instance |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | App::Web::Controller::Root           | default      |
| /end                 | App::Web::Controller::Root           | end          |
| /devel/make_10000_u- | App::Web::Controller::Devel          | make_10000_- |
| sers                 |                                      | users        |
'----------------------+--------------------------------------+--------------'

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /devel/make_10000_users             | /devel/make_10000_users              |
'-------------------------------------+--------------------------------------'

[info] App::Web powered by Catalyst 5.7007

これで使えなくできるはず。

on_controller_disable:1
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| App::Web::Controller::Devel                                     | class    |
| App::Web::Controller::Root                                      | instance |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | App::Web::Controller::Root           | default      |
| /end                 | App::Web::Controller::Root           | end          |
'----------------------+--------------------------------------+--------------'

[info] App::Web powered by Catalyst 5.7007


この実装だと、コントローラごとのdisableはできないけど。