package MySQL::ORM::Generate::Class::ResultClassX; our $VERSION = '0.01'; use Modern::Perl; use Moose; use namespace::autoclean; use Method::Signatures; use Data::Printer alias => 'pdump'; use MySQL::ORM::Generate::Class::ResultClass; extends 'MySQL::ORM::Generate::Common'; ############################################################################## # required attributes ############################################################################## has dir => ( is => 'ro', isa => 'Str', required => 1, ); has table => ( is => 'ro', isa => 'MySQL::Util::Lite::Table', required => 1, ); has table_class_name => ( is => 'ro', isa => 'Str', required => 1, ); has extends => ( is => 'ro', isa => 'Str', required => 1, ); ############################################################################## # optional attributes ############################################################################## ############################################################################## # private attributes ############################################################################## ############################################################################## # methods ############################################################################## method generate { $self->trace; my @attr; my %seen; my @columns = $self->table->get_columns; # Initialize seen columns to match current tables columns. # This is to avoid adding duplicate columns to resultx class %seen = map{ $_->name => 1 } @columns; foreach my $column (@columns) { $seen{ $column->name }++; foreach my $table ( $self->table->get_parent_tables(column_name => $column->name) ) { foreach my $parent_col ( $table->get_columns ) { next if $seen{ $parent_col->name }; if ($column->is_null) { $parent_col->is_null(1); } push @attr, $self->attribute_maker->make_attribute( name => $parent_col->name, comments => $self->get_column_attribute_comments($parent_col), is => 'rw', isa => $parent_col->get_moose_type, trigger => $self->get_column_trigger($parent_col), ); $seen{ $parent_col->name } = 1; } } } $self->writer->write_class( file_name => $self->get_module_path, class_name => $self->get_class_name, use => [ 'Modern::Perl', 'Moose', 'namespace::autoclean', 'Method::Signatures', "Data::Printer alias => 'pdump'" ], extends => [ $self->extends ], attribs => \@attr, ); $self->trace('exit'); } method get_class_name { my @ns; push @ns, $self->table_class_name; push @ns, 'ResultClassX'; return join( '::', @ns ); } method get_module_path { my @tmp; push @tmp, $self->dir if $self->dir; my $class_name = $self->get_class_name; push @tmp, split( /::/, $class_name ); return sprintf( '%s.pm', File::Spec->catdir(@tmp) ); } ############################################################################## # private methods ############################################################################## 1;