読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

行動ログを投げる時にトランザクションの中にいるときはend_hookに登録して、そうじゃないときはそのままぶん投げる

# user_logger_model->submit({type => "player."})
sub submit {
    my ($self, $info) = @_;
    my $tag = $info->{type} or Carp::croak('"type" attribute is required in action log');

    $info->{uid} = $self->user->id;

    my $code = sub { models('logger')->post_action($tag, $info) };

    # トランザクションの中にいる場合はhookに登録する
    if (models('Schema')->storage->transaction_depth) {
        models('Schema')->storage->add_txn_end_hook($code);
        return;
    }

    # トランザクション外ならそのまま投げる
    $code->();
}

こういうの作ったけど、名前が微妙な感じがする。