#!/usr/bin/perl use strict; use vars qw( $opt_n ); use FS::Schema qw( dbdef_dist ); use Getopt::Std; getopts('n'); my $table = shift; ### # add a new FS/FS/table.pm ### my %ut = ( #just guesses 'int' => 'number', 'number' => 'float', 'varchar' => 'text', 'text' => 'text', 'serial' => 'number', ); my $dbdef_table = dbdef_dist->table($table) or die "define table in Schema.pm first"; my $primary_key = $dbdef_table->primary_key; open(SRC,"FS/FS/$table.pm") or die $!; while (my $line = ) { $line =~ s/table_name/$table/g; if ( $line =~ /^=item\s+field\s+-\s+description\s*$/ ) { foreach my $column ( $dbdef_table->columns ) { print DEST "=item $column\n\n"; if ( $column eq $primary_key ) { print DEST "primary key\n\n"; } else { print DEST "$column\n\n"; } } next; } elsif ( $line=~ /^(\s*)\$self->ut_numbern\('primary_key'\)\s*/ ) { print DEST "$1\$self->ut_numbern('$primary_key')\n" if $primary_key; next; } elsif ( $line =~ /^(\s*)\|\|\s+\$self->ut_number\('validate_other_fields'\)\s*/ ) { foreach my $column ( grep { $_ ne $primary_key } $dbdef_table->columns ) { my $ut = $ut{$dbdef_table->column($column)->type}; $ut .= 'n' if $dbdef_table->column($column)->null; print DEST "$1|| \$self->ut_$ut('$column')\n"; } next; } print DEST $line; } close SRC; close DEST; ### # add to FS/FS/Mason.pm ### my $magic = '# Sammath Naur'; system("perl -pi -e 's/$magic/use FS::$table;\n $magic/' FS/FS/Mason.pm") unless $opt_n; ### # add FS/t/table.t ### open(TEST,">FS/t/$table.t") or die $!; print TEST <>FS/MANIFEST") or die $!; print MANIFEST "FS/$table.pm\n", "t/$table.t\n"; close MANIFEST;