# NAME

Moodle

# ABSTRACT

Mojo DB Driver Migrations

# SYNOPSIS

    # migration: step #1

    package Migration::Step1;

    use parent 'Doodle::Migration';

    no warnings 'redefine';

    sub up {
      my ($self, $doodle) = @_;

      my $table = $doodle->table('users');
      $table->primary('id');
      $table->create;

      return $doodle;
    }

    sub down {
      my ($self, $doodle) = @_;

      my $table = $doodle->table('users');
      $table->delete;

      return $doodle;
    }

    # migration: step #2

    package Migration::Step2;

    use parent 'Doodle::Migration';

    no warnings 'redefine';

    sub up {
      my ($self, $doodle) = @_;

      my $table = $doodle->table('users');
      $table->string('email')->create;

      return $doodle;
    }

    sub down {
      my ($self, $doodle) = @_;

      my $table = $doodle->table('users');
      $table->string('email')->delete;

      return $doodle;
    }

    # migration: root

    package Migration;

    use parent 'Doodle::Migration';

    sub migrations {[
      'Migration::Step1',
      'Migration::Step2',
    ]}

    # main program

    package main;

    use Moodle;

    my $self = Moodle->new(
      driver => $main::driver,
      migrator => Migration->new
    );

    # $self->migrate;

# DESCRIPTION

This package uses [Doodle](https://metacpan.org/pod/Doodle) with [Mojo](https://metacpan.org/pod/Mojo) database drivers to easily install and
evolve database schema migrations. See [Doodle::Migration](https://metacpan.org/pod/Doodle::Migration) for help setting up
[Doodle](https://metacpan.org/pod/Doodle) migrations, and [Mojo::Pg](https://metacpan.org/pod/Mojo::Pg), [Mojo::mysql](https://metacpan.org/pod/Mojo::mysql) or [Mojo::SQLite](https://metacpan.org/pod/Mojo::SQLite) for
help configuring DB drivers.

# LIBRARIES

This package uses type constraints from:

[Moodle::Library](https://metacpan.org/pod/Moodle::Library)

# ATTRIBUTES

This package has the following attributes:

## driver

    driver(Driver)

This attribute is read-only, accepts `(Driver)` values, and is required.

## migrator

    migrator(Migrator)

This attribute is read-only, accepts `(Migrator)` values, and is required.

# METHODS

This package implements the following methods:

## content

    content() : Str

This method generates DB migration statements returning a string containing
"UP" and "DOWN" versioned migration strings suitable for use with the migration
feature of Mojo database drivers.

- content example #1

        # given: synopsis

        my $content = $self->content;

## migrate

    migrate(Maybe[Str] $target) : Object

This method uses the DB migration statements generated by the ["content"](#content)
method and installs them using the Mojo database driver. This method returns a
migration object relative to the DB driver used.

- migrate example #1

        # given: synopsis

        my $migrate = $self->migrate;

# AUTHOR

Al Newkirk, `awncorp@cpan.org`

# LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms
of the The Apache License, Version 2.0, as elucidated in the ["license
file"](https://github.com/iamalnewkirk/moodle/blob/master/LICENSE).

# PROJECT

[Wiki](https://github.com/iamalnewkirk/moodle/wiki)

[Project](https://github.com/iamalnewkirk/moodle)

[Initiatives](https://github.com/iamalnewkirk/moodle/projects)

[Milestones](https://github.com/iamalnewkirk/moodle/milestones)

[Contributing](https://github.com/iamalnewkirk/moodle/blob/master/CONTRIBUTE.md)

[Issues](https://github.com/iamalnewkirk/moodle/issues)
