Modern-OpenAPI-Generator

 view release on metacpan or  search on metacpan

lib/Modern/OpenAPI/Generator.pm  view on Meta::CPAN

        if ( $self->{local_test} ) {
            Modern::OpenAPI::Generator::CodeGen::StubData->generate(
                writer => $writer,
                base   => $base,
            );
        }
    }
    elsif ( $self->{ui} ) {
        Modern::OpenAPI::Generator::CodeGen::Server->generate_spec_ui_only(
            writer => $writer,
            spec   => $spec,
            base   => $base,
        );
    }

    my $ui_only = !$self->{server} && $self->{ui};

    Modern::OpenAPI::Generator::CodeGen::Docs->generate(
        writer     => $writer,
        spec       => $spec,
        base       => $base,
        client     => $self->{client},
        server     => $self->{server},
        ui         => $self->{ui},
        sync       => $self->{sync},
        async      => $self->{async},
        ui_only    => $ui_only,
        local_test => $self->{local_test},
    );

    Modern::OpenAPI::Generator::CodeGen::Tests->generate(
        writer      => $writer,
        base        => $base,
        client      => $self->{client},
        server      => $self->{server},
        ui          => $self->{ui},
        sync        => $self->{sync},
        async       => $self->{async},
        signatures  => $self->{signatures},
        ui_only     => $ui_only,
        local_test  => $self->{local_test},
    );

    $self->_write_root_cpanfile($writer);
    return $self;
}

sub _write_root_cpanfile {
    my ( $self, $writer ) = @_;
    my $txt = <<'CPAN';
requires 'perl', '5.026';
requires 'Mojolicious', '9.0';
requires 'Mojolicious::Plugin::OpenAPI', '5.00';
requires 'Mojolicious::Plugin::SwaggerUI', '0';
requires 'JSON::Validator', '5.0';
requires 'OpenAPI::Modern', '0.060';
requires 'Moo', '2.005';
requires 'Types::Standard', '2.000';
requires 'YAML::PP', '0.034';
requires 'JSON::MaybeXS', '1.004';
requires 'Modern::Perl::Prelude', '0';
requires 'Digest::SHA', '6.00';

on test => sub {
    requires 'Test::More', '0.96';
};
CPAN
    $writer->write( 'cpanfile', $txt );
}

1;

__END__

=encoding utf8

=head1 NAME

Modern::OpenAPI::Generator - OpenAPI 3.x client/server generator for Mojolicious

=head1 SYNOPSIS

  perl bin/oapi-perl-gen --name MyApp::API --output ./out openapi.yaml

  # or from Perl:
  use Modern::OpenAPI::Generator;
  Modern::OpenAPI::Generator->new(
    spec_path  => 'openapi.yaml',
    output_dir => './generated',
    name       => 'MyApp::API',
  )->run;

=head1 DESCRIPTION

Generates:

=over 4

=item * C<::Client::Core>, C<::Client::Sync>, C<::Client::Async> (with C<< --client >>) and C<::Client::Result> — C<Result> holds C<tx> (L<Mojo::Transaction>) and C<data> (JSON or inflated C<::Model::*>). Shared C<::Model::*> (and C<::StubData> for...

=item * Generated server controllers call C<< $c->openapi->valid_input >> so L<Mojolicious::Plugin::OpenAPI> validates each incoming request; responses are checked when you C<< render(openapi =E<gt> ...) >> per the plugin

=item * C<< oapi-perl-gen --local-test >> emits C<::StubData> and controller stubs that return random data from the response schema, inflated with C<::Model::*->from_json>, then serialized (C<TO_JSON>) instead of HTTP 501

=item * Mojolicious server with L<Mojolicious::Plugin::OpenAPI>

=item * L<Mojolicious::Plugin::SwaggerUI> at C</swagger> on the same server as the API when C<< --ui >> is on

=item * Optional auth helper modules (HMAC, Bearer) under C<::Auth::Plugin::*>

=item * F<README.md> in the output tree (usage, install, server/client/UI commands — OpenAPI Generator style)

=item * F<docs/*.md> per-tag API reference and C<components/schemas> model pages, linked from the README

=item * F<t/*.t> smoke tests for the generated modules

=back

See L<Modern::OpenAPI::Generator::CLI> (C<oapi-perl-gen --help>) for C<--client> / C<--server> / C<--ui> selection rules. For Swagger UI, the generated C<script/server.pl> prepends the request origin to C<servers> in the served YAML only when run wit...

=head1 METHODS



( run in 0.686 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )