The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mojolicious::Command::generate::dbicdump;
use Mojo::Base 'Mojolicious::Command';

use DBIx::Class::Schema::Loader qw/make_schema_at/;

has description => "Generate DBIx::Class schema using settings from your app.conf\n";
has usage       => "Usage: $0 generate dbicdump\n";

our $VERSION = '0.1.1';

sub run {
# ----------------------------------------------------------------------------

    my ($self, @args) = @_;

    die "This must be run as part of an existing app"
        unless $ENV{MOJO_APP};

    my $config = $self->app->config;

    # Commandline overrides
    $self->_options( \@args,
        'd|debug'      => \my $debug,
        'dsn=s'        => \my $dsn,
        'dbic=s'       => \(my $dbic = $config->{db}{dbic} ),
        'username=s'   => \my $username,
        'password=s'   => \my $password,
    );

    die 'Expected config value missing: e.g. $config->{db}{dbic} = MyApp::Schema'
        unless ref $config->{db} and $config->{db}{dbic};

    # Build dsn
    unless ($dsn) {
        $dsn = sprintf("dbi:%s:database=%s;host=%s;port=%s;",
                        $config->{db}{driver} || 'mysql',
                        $config->{db}{database},
                        $config->{db}{hostname} || 'localhost',
                        $config->{db}{port} || '3306',
        );
    }

    print "$DBIx::Class::Schema::Loader::VERSION\n" if $debug;

    my $options = {
        debug          => $debug,
        dump_directory => $self->app->home->lib_dir,
        components     => [qw/ InflateColumn::DateTime /],
        use_moose      => 1,
        overwrite_modifications => 1,
        generate_pod   => 0,
        col_collision_map => 'column_%s',
    };

    make_schema_at(
        $dbic, $options,
        [ $dsn, $username, $password, ]
    );
}


return "The coffee made me do it!";
__END__

=head1 NAME

Mojolicious::Command::generate::dbicdump - dbicdump your Mojo app schema

=head1 SYNOPSIS

    # Run with an existing mojolicious app.
    # $app->config->{db}{/database username password/}

    ./my_mojo_app.pl generate dbicdump


=head1 INSTALL

    perl Makefile.PL
    make && make install


=head1 SUPPORT

Please report any bugs, feature request or patches to either:
L<http://search.cpan.org/dist/Mojolicious-Command-generate-dbicdump/>
L<https://github.com/coffeemonster/mojolicious-command-generate-dbicdump/>


=head1 LICENSE AND COPYRIGHT

Copyright 2012 Alister West, alister at L<http://alisterwest.com>

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.


=head1 CHANGES

0.1.1   2012-08-31
        - CPANified module

=cut