Catalyst-Model-DynamicAdaptor bug

追記

id:vkgtaroさん,ハイドKさん(id:hide-K),id:hideden さんに手伝ってもらい
原因を修正し、0.02で反映しました。ありがとうございました。



不具合があった...

    no strict 'refs';
    for my $plugin (@plugins) {

        my $obj = $plugin->new($config);

        my $plugin_short = $plugin;
        $plugin_short =~ s/^$base_class\:\://g;
        my $classname = "${class}::$plugin_short";

        *{"${classname}::ACCEPT_CONTEXT"} = sub {
            return $obj;
        };
    }

このコードだと、複数の モジュールを突っ込んだ場合、return $obj; の中身が常が、つねに最初に読み込まれたモジュールになってる...

数時間、直そうとやってみたのですが、ようわからん...

    no strict 'refs';
    for my $plugin (@plugins) {

        my $plugin_short = $plugin;
        $plugin_short =~ s/^$base_class\:\://g;
        my $classname = "${class}::$plugin_short";

        *{"${classname}::ACCEPT_CONTEXT"} = sub {
            return $plugin;
        };
    }

newなくしてこうやると、うまくいく。この実装に変更するかな...

    no strict 'refs';
    for my $plugin (@plugins) {

        if( $plugin->can('instance') ) {
            $plugin->instance($config);
        }

        my $plugin_short = $plugin;
        $plugin_short =~ s/^$base_class\:\://g;
        my $classname = "${class}::$plugin_short";

        *{"${classname}::ACCEPT_CONTEXT"} = sub {
            return $plugin;
        };
    }

シングルトンで new できるようにとか..


>_<

help me!