DBIx::Class + Catalyst::View::JSON(2)

以前書いたエントリの修正です。

get_columnsだとinflateを通らないようなので、明示的にアクセサを呼ぶように修正しました。使い方には変更ありません。

sub inflate_row {
    my $row = shift;

    my %data;
    foreach my $column ( $row->result_source->columns ) {
        $data{$column} = $row->$column;
    }

    return \%data;
}

sub inflate_resultset {
    my $rs = shift;
    return [ map { inflate_row($_) } $rs->all ];
}

sub inflate_dbic {
    my ( $c, $obj ) = @_;

    if ( !Scalar::Util::blessed($obj) ) {
        return $obj;
    }

    if ( $obj->isa('DBIx::Class::Row') ) {
        return inflate_row($obj);
    }

    if ( $obj->isa('DBIx::Class::ResultSet') ) {
        return inflate_resultset($obj);
    }

    return;
}