あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

Tracの設定を読むモジュール

CatalystからArkに切り替えより引き続き。横道それすぎなじゃないかと思ってる。

Net::TracのPod及び、ソースを読む限り、あくまで現状がチケットの扱いがメインらしい。設定が読み込めないため、trac.dbとtrac.iniの中身をコピペするしかないんだけれど、変更のために逐一触れるのめんどくさい。

そこで書くことにした。

package Net::Trac::Config;

use Any::Moose;
use Carp;
use DBI;

has 'path' => (
    is  => 'rw',
    isa => 'Str',
);

has 'config' => (
    is  => 'rw',
    isa => 'ArrayRef',
);

sub read {
    my $self = shift;
    unless (defined $self->path) {
        croak "Need path to trac.db";
        return;
    }
    if (substr($self->path, length($self->path) - 7, 7) ne 'trac.db') {
        croak "Need path to trac.db";
        return;
    }
    unless ( -e $self->path ) {
        croak "trac.db not found";
        return;
    }
    my $dbh = DBI->connect("dbi:SQLite:dbname=".$self->path, undef, undef, {});
    $self->config( $dbh->selectcol_arrayref( "select name from enum where type='ticket_type'" ) );
    return $self->config;
}

__PACKAGE__->meta->make_immutable;
no Any::Moose;

1;

まだdbから一部しか読まないので、iniのほうとか色々書かないといけない。dbの更新も可能な気がするけど、はたして大丈夫なのかどうか。