MySQL-ORM

 view release on metacpan or  search on metacpan

lib/MySQL/ORM/Generate/Class/ResultClass.pm  view on Meta::CPAN

package MySQL::ORM::Generate::Class::ResultClass;

our $VERSION = '0.01';

use Modern::Perl;
use Moose;
use namespace::autoclean;
use Method::Signatures;
use Data::Printer alias => 'pdump';

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,
);

##############################################################################
## optional attributes
##############################################################################

##############################################################################
## private attributes
##############################################################################

##############################################################################
## methods
##############################################################################

method generate {

	$self->trace;
	
	my @attr;
	my @columns = $self->table->get_columns; 
	
	foreach my $col (@columns) {

		push @attr,
		  $self->attribute_maker->make_attribute(
			name     => $col->name,
			comments => $self->get_column_attribute_comments($col),
			is       => 'rw',
			isa      => $col->get_moose_type,
			trigger  => $self->get_column_trigger( $col ),
		  );
	}

	push @attr,
	  $self->attribute_maker->make_attribute(
		name      => '_touched',
		is        => 'rw',
		isa       => 'HashRef',
		'default' => 'sub {{}}'
	  );

	my @methods;
	push @methods, $self->method_maker->make_method(
		name => 'get_touched_attributes',
		body => q{
			my @attr = keys %{ $self->_touched };
		
			return @attr;	  	
	  	}
	);

	$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 => [],
		attribs => \@attr,
		methods => \@methods,
	);
	
	$self->trace('exit');
}

method get_class_name {

	my @ns;
	push @ns, $self->table_class_name;
	push @ns, 'ResultClass';
	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;



( run in 1.037 second using v1.01-cache-2.11-cpan-39bf76dae61 )