=encoding utf8

=head1 NAME

Mo - Micro Objects. Mo is less.

=head1 SYNOPSIS

    package Less;
    use Mo;
    extends 'Nothing';

    has 'something' => (
        is => 'rw',
        default => sub {
            my $self = shift;
            $self->build_something;
        },
    );

    sub BUILD {
        my $self = shift;
        # enhance your object before it is returned by new()
    }

=head1 DESCRIPTION

use Mo. Mo is less. Much less.

Moose is huge. Moose led to Mouse led to Moo led to Mo. M is nothing. Mo is
more. Not much.

When Moo is more than you need, drop an 'o' and get some Mo.

=head1 FEATURES

This is what you get. Nothing Mo.

=over

=item C<new> method

Mo provides a C<new> object constructor. You pass it a list of name/value
pairs and it returns a new object.

After object creation, it will call the C<BUILD> method (if present) for all
of its parents and itself.

=item C<extends>

Mo exports the C<extends> keyword, to declare your parent class. C<Mo> itself
is your default parent class, of course.

Mo only supports single inheritance. If you need multiple inheritance or
roles, you should upgrade to Moo.

=item C<has>

Mo exports a C<has> keyword, to generate accessors.

These accessors always support both C<get> and C<set> operations. They allow
the C<default> and C<builder> options. That's it.

    has 'name1';
    has 'name2' => ( default => sub { 'Joe' } );
    has 'name3' => ( builder => 'name_builder' );

C<has> takes arguments after the name. Here is what it currently supports:

=over

=item default

Must be a code reference. The object instance is passed in, and it should
return the default value for this attribute. C<default> is always called
lazily. ie It is called when you try to get the value and it does
not(exists()).

=item builder

Must be a method name. This method should return the default value for this
attribute. C<builder> is always called lazily.

=back

Any other arguments are ignored. This lets you switch from Moo to Mo and back,
without having to change all your accessors.

=item C<strict> and C<warnings>

Mo turns on C<use strict> and C<use warnings> for you.

=item Embeddable

Mo is tiny. It is compressed into a single line. You can easily inline it in
your code, should you want to do that. See L<Mo::Inlining> for more
information.

=back

=head1 SEE

L<Mo::Inlining>

L<Mo::Hacking>

L<Mo::Design>

=head1 AUTHORS

Ingy döt Net <ingy@cpan.org>

Damien 'dams' Krotkine <dams@cpan.org>

Matt S. Trout (mst) <mst@shadowcat.co.uk>

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2011. Ingy döt Net.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

See http://www.perl.com/perl/misc/Artistic.html

=cut
