MySQL-Workbench-DBIC
view release on metacpan or search on metacpan
lib/MySQL/Workbench/DBIC.pm view on Meta::CPAN
for my $table ( @tables ){
my $name = $table->name;
push @classes, $name;
my $rels = $table->foreign_keys;
for my $to_table ( keys %$rels ){
$relations{$to_table}->{to}->{$name} = $rels->{$to_table};
$relations{$name}->{from}->{$to_table} = $rels->{$to_table};
}
}
$self->_set_classes( \@classes );
my @scheme = $self->_main_template;
my @files;
for my $table ( @tables ){
my $custom_code = $self->_custom_code_table( $table );
push @files, $self->_class_template( $table, $relations{$table->name}, $custom_code );
}
for my $view ( @{ $parser->views || [] } ) {
my $custom_code = $self->_custom_code_table( $view );
push @files, $self->_view_template( $view, $custom_code );
}
push @files, @scheme;
$self->_write_files( @files );
}
sub _custom_code_table {
my ($self, $table) = @_;
my $name = $table->name;
if ( $self->uppercase ) {
$name = join '', map{ ucfirst } split /[_-]/, $table->name;
}
my @base_path;
push @base_path, $self->output_path if $self->output_path;
my $path = File::Spec->catfile(
@base_path,
(split /::/, $self->namespace),
$self->schema_name,
$self->result_namespace,
'Result',
$name . '.pm'
);
return '' if !-f $path;
return $self->_custom_code( $path );
}
sub _custom_code {
my ($self, $path) = @_;
my $content = do { local (@ARGV, $/) = $path; <> };
my ($code) = $content =~ m{
^[#] \s+ --- \s*
^[#] \s+ Put \s+ your \s+ own \s+ code \s+ below \s+ this \s+ comment \s*
^[#] \s+ --- \s*
(.*?) \s+
^[#] \s+ --- \s*
}xms;
return $code;
}
sub _write_files{
my ($self, %files) = @_;
for my $package ( keys %files ){
my @path;
push @path, $self->output_path if $self->output_path;
push @path, split /::/, $package;
my $file = pop @path;
my $dir = File::Spec->catdir( @path );
if( !-e $dir ){
make_path( $dir ) or croak "Cannot create directory $dir";
}
if( open my $fh, '>', $dir . '/' . $file . '.pm' ){
if ( $self->utf8 ) {
binmode $fh, ':encoding(utf-8)';
}
print $fh $files{$package};
close $fh;
}
else{
croak "Couldn't create $file.pm: $!";
}
}
}
sub _has_many_template{
my ($self, $to, $rels) = @_;
my $name = $to;
my ($to_class, $package) = $self->_create_class_and_package_name( $to );
if ( defined $self->remove_table_prefix ) {
my $prefix = $self->remove_table_prefix;
$name =~ s{\A\Q$prefix\E}{};
}
my %has_many_rels;
my $counter = 1;
my $string = '';
for my $field ( @{ $rels || [] } ) {
my $me_field = $field->{foreign};
my $foreign_field = $field->{me};
my $temp_field = $self->has_many_prefix . $name;
( run in 0.645 second using v1.01-cache-2.11-cpan-39bf76dae61 )