Group
Extension

Daje-Generate/lib/Daje/Generate/Perl/PerlManager.pm

use v5.40;
use feature 'class';
no warnings 'experimental::class';

our $VERSION = '0.01';

class Daje::Generate::Perl::PerlManager :isa(Daje::Generate::Perl::Base::Common)  {
    use Daje::Generate::Perl::Generate::Fields;
    use Daje::Generate::Perl::Generate::Methods;
    use Daje::Generate::Perl::Generate::Class;
    use Daje::Generate::Output::Perl::Class;
    use Daje::Generate::Perl::Generate::BaseClass;
    use Daje::Generate::Perl::Generate::Interface;

    field $success :reader = 1;
    field $config :param :reader;

    method generate_classes() {
        $self->_base_class();
        my $length = scalar @{$self->json->{tables}};
        for (my $i = 0; $i < $length; $i++) {
            $self->_generate_table_class(@{$self->json->{tables}}[$i]);
            $self->_generate_interface_class(@{$self->json->{tables}}[$i]->{table}->{table_name});
        }
        $length = scalar $self->json->{views};
        for (my $i = 0; $i < $length; $i++) {
            $self->_generate_view_class(@{$self->json->{views}}[$i]);
        }
        return 1;
    }

    method _generate_interface_class($table_name) {
        my $template = $self->template();
        Daje::Generate::Perl::Generate::Interface->new(
            template => $template,
            config   => $config,
            table    => $table_name,
        )->generate();
    }

    method _base_class() {
        my $template = $self->template();
        Daje::Generate::Perl::Generate::BaseClass->new(
            template => $template,
            config   => $config,
        )->generate();

    }

    method _generate_table_class($table) {
        my $fields = $self->_get_fields($table);
        my $methods = $self->_methods($fields, $table);
        my $perl = $self->_class($methods, $table, $fields);
        $self->_save_class($perl, $table->{table});
    }

    method _save_class($perl, $table) {

        my $output = Daje::Generate::Output::Perl::Class->new(
            config         => $config,
            table_name     => $table->{table_name},
            perl           => $perl,
            name_space_dir => "name_space_dir",
        );
        $output->save_file();
    }

    method _class($methods, $table, $fields) {
        my $template = $self->template();
        my $class = Daje::Generate::Perl::Generate::Class->new(
            json     => $table->{table},
            methods  => $methods,
            template => $template,
            config   => $config,
            fields   => $fields,
        );
        my $perl = $class->generate();

        return $perl;
    }

    method _methods($fields, $table) {
        my $template = $self->template();
        my $methods = Daje::Generate::Perl::Generate::Methods->new(
            json     => $table->{table},
            fields   => $fields,
            template => $template
        );
        $methods->generate();

        return $methods;
    }

    method _generate_view_class($view) {
        $view = $view;
    }

    method _get_fields($json) {
        my $template = $self->template();
        my $fields = Daje::Generate::Perl::Generate::Fields->new(
            json     => $json->{table},
            template => $template
        );
        $fields->generate();
        return $fields;
    }
}


1;

#################### pod generated by Pod::Autopod - keep this line to make pod updates possible ####################

=head1 NAME

lib::Daje::Generate::Perl::PerlManager - lib::Daje::Generate::Perl::PerlManager


=head1 DESCRIPTION

pod generated by Pod::Autopod - keep this line to make pod updates possible ####################


=head1 REQUIRES

L<Daje::Generate::Perl::Generate::Interface> 

L<Daje::Generate::Perl::Generate::BaseClass> 

L<Daje::Generate::Output::Perl::Class> 

L<Daje::Generate::Perl::Generate::Class> 

L<Daje::Generate::Perl::Generate::Methods> 

L<Daje::Generate::Perl::Generate::Fields> 

L<feature> 

L<v5.40> 


=head1 METHODS


=cut



Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.