This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / bin / generate-table-module
1 #!/usr/bin/perl
2
3 use FS::Schema qw( dbdef_dist );
4
5 my $table = shift;
6
7 ###
8 # add a new FS/FS/table.pm
9 ###
10
11 my %ut = ( #just guesses
12   'int'     => 'number',
13   'number'  => 'float',
14   'varchar' => 'text',
15   'text'    => 'text',
16 );
17
18 my $dbdef_table = dbdef_dist->table($table)
19   or die "define table in Schema.pm first";
20 my $primary_key = $dbdef_table->primary_key;
21
22 open(SRC,"<eg/table_template.pm") or die $!;
23 -e "FS/FS/$table.pm" and die "FS/FS/$table.pm already exists!";
24 open(DEST,">FS/FS/$table.pm") or die $!;
25
26 while (my $line = <SRC>) {
27
28   $line =~ s/table_name/$table/g;
29
30   if ( $line =~ /^=item\s+field\s+-\s+description\s*$/ ) {
31
32     foreach my $column ( $dbdef_table->columns ) {
33       print DEST "=item $column - ";
34       print DEST "primary key"
35         if $column eq $primary_key;
36       print DEST "\n\n";
37     }
38     next;
39
40   } elsif ( $line=~ /^(\s*)\$self->ut_numbern\('primary_key'\)\s*/ ) {
41
42     print DEST "$1\$self->ut_numbern('$primary_key')\n"
43       if $primary_key;
44     next;
45
46   } elsif (
47     $line =~ /^(\s*)\|\|\s+\$self->ut_number\('validate_other_fields'\)\s*/
48   ) {
49
50     foreach my $column ( grep { $_ ne $primary_key } $dbdef_table->columns ) {
51       my $ut = $ut{$dbdef_table->column($column)->type};
52       $ut .= 'n' if $dbdef_table->column($column)->null;
53       print DEST "$1|| \$self->ut_$ut('$column')\n";
54     }
55     next;
56
57   }
58
59   print DEST $line;
60 }
61
62 close SRC;
63 close DEST;
64
65 ###
66 # add FS/t/table.t
67 ###
68
69 open(TEST,">FS/t/$table.t") or die $!;
70 print TEST <<ENDTEST;
71 BEGIN { \$| = 1; print "1..1\\n" }
72 END {print "not ok 1\\n" unless \$loaded;}
73 use FS::$table;
74 \$loaded=1;
75 print "ok 1\\n";
76 ENDTEST
77 close TEST;
78
79 ###
80 # add them to MANIFEST
81 ###
82
83 system('cvs edit FS/MANIFEST');
84
85 open(MANIFEST,">>FS/MANIFEST") or die $!;
86 print MANIFEST "FS/$table.pm\n",
87                "t/$table.t\n";
88 close MANIFEST;
89