久々に書いてみる
開発中のアプリでTeng使ってみようと考えたので簡単にSchema生成スクリプト書いてみた
_atがある前提だったり主キーは必ず1つだったり制約多い書き方だけどまぁ普通に使えるんじゃないかと思ってる
#! /usr/bin/env perl use strict; use warnings; use DBIx::Inspector; use lib './lib'; use Wagayatei::DB; use Data::Section::Simple; use Text::Xslate; use Teng::Schema; use Path::Class qw(dir); my $dbi = Wagayatei::DB->get_dbi; my $inspector = DBIx::Inspector->new( dbh => $dbi ); my $tables = [$inspector->tables()]; my $xslate = Text::Xslate->new( path => Data::Section::Simple->new->get_data_section, ); my $schema = $xslate->render('schema',{ tables => $tables, camelize => \&Teng::Schema::camelize }); my $path = dir('./')->subdir('lib/Wagayatei/DB/'); $path->mkpath; my $fh = $path->file('Schema.pm')->openw; print $fh $schema; close $fh; 1; __DATA__ @@ schema #XXX GENERATED BY generate_schema.pl package Wagayatei::DB::Schema; use Chiffon::Core; use Teng::Schema::Declare; use Time::Piece::MySQL; :for $tables -> $table { table{ name '<: $table.name() :>'; pk '<: $table.primary_key().next().name() :>'; columns qw( :my $columns = $table.columns() :while $columns.next() -> $column { <: $column.name() :> :} ); inflate qr/_at$/ => sub { Time::Piece->from_mysql_datetime(shift); }; deflate qr/_at$/ => sub { shift->mysql_datetime; }; row_class 'Wagayatei::Model::<: $camelize($table.name()) :>'; }; :} 1;