# ORM::ActiveRecord

ORM::ActiveRecord is an [object-relational mapping](https://en.wikipedia.org/wiki/Object-relational_mapping) module for Raku that *mostly* follows the [Active Record Pattern](https://en.wikipedia.org/wiki/Active_record_pattern).

## Documentation

[http://docs.rakuist.io/orm-activerecord](http://docs.rakuist.io/orm-activerecord)

## Install using zef

```
zef install --/test ORM::ActiveRecord
```

`--/test` is suggested because you probably don't have a test database setup.

## Simple Example

```perl6
my $user = User.create({fname => 'Greg'});
my $page = Page.create({:$user, name => 'Rakuist'});

say $user.pages.first.name;
Rakuist

say $page.user.fname;
Greg

my $alfred = User.create({fname => 'Fred'});
$page.update({user => $fred});

say $page.user.fname;
Fred
```

Please see the [documentation](http://docs.rakuist.io/orm-activerecord) for more examples.

## Build Status

[![Build Status](https://travis-ci.org/rakuist/ORM-ActiveRecord.svg?branch=master)](https://travis-ci.org/rakuist/ORM-ActiveRecord)

## License

ORM::ActiveRecord is released under the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0)

## Features

- [x] Model:
    - [x] belongs-to
    - [x] has-many
    - [x] has-many -> through
    - [x] where: all, first, count
    - [x] Validations
        - [x] Conditionals: if, unless, on, create, update
        - [x] Acceptance
        - [x] Confirmation
        - [x] Exclusion
        - [x] Format
        - [x] Inclusion
        - [x] Length
        - [x] Minimum
        - [x] Maximum
        - [x] In a range
        - [x] Is exactly
        - [x] Numericality
        - [x] Less than
        - [x] Less than or equal
        - [x] Greater than
        - [x] Greater than or equal
        - [x] In a range
        - [x] Presence
        - [x] Uniqueness
        - [x] Unique Scope
    - [x] Callbacks
        - [x] after: create, save, update
        - [x] before: create, save, update
    - [x] Scopes
    - [x] Dirty
    - [x] Custom Errors
- [x] Migrations
- [x] PostgreSQL support

## TODO

- [ ] Includes: for has-many records
- [ ] Migration generator
- [ ] Model generator
- [ ] Support for MySQL, SQLite, and Oracle.