# Copyright (C) 2008, Sebastian Riedel.

=head1 Coding Guidelines

This document describes the coding guidelines that are the foundations
of Mojo development.

Please don't send patches unless you agree with them.

=head2 Mission Statement

Mojo is a Perl web framework that provides all the basic tools and helpers
needed to write simple web applications or higher level web frameworks.

All components should be reusable in other projects and in a UNIXish way
only loosely coupled.

While Mojo follows the MVC pattern it does not contain a model layer,
just a very basic view layer and multiple controllers.
Users should be free to create their own implementations for all three
layers.

Especially for people new to Perl it should be as easy as possible to
install Mojo and get started.
Writing web applications can be one of the most fun ways to learn a language!

For other framework developers it should be possible to reuse all the
infrastructure and just consider the higher levels of Mojo an example
application.

=head2 The Rules

=over 4

Keep it simple, no magic unless absolutely neccessary.
 
No prereqs outside of the Mojo package.

Code should be written with a Perl6 port in mind.

No refactoring unless a very important feature absolutely depends on it.

It's not a feature without a test.

A feature is only needed when the majority of the userbase benefits from it.

Features may not be changed without being deprecated for at least one major
release.

Deprecating a feature should be avoided at all costs.

Domain specific languages should be avoided in favor of Perl'ish solutions.

No inline POD.

Lines can't be longer than 78 characters and we indent with 4 whitespaces.

No spaghettie code.

Code should be organized in blocks and those blocks should be commented.

Comments should be funny if possible.

No names outside of the CREDITS section of Mojo.pm.

No Elitism.

Peace!

=back

=cut