[![Build Status](https://travis-ci.org/tokuhirom/Amon.svg?branch=master)](https://travis-ci.org/tokuhirom/Amon) # NAME Amon2 - lightweight web application framework # SYNOPSIS package MyApp; use parent qw/Amon2/; use Amon2::Config::Simple; sub load_config { Amon2::Config::Simple->load(shift) } # DESCRIPTION Amon2 is simple, readable, extensible, **STABLE**, **FAST** web application framework based on [Plack](https://metacpan.org/pod/Plack). # METHODS ## CLASS METHODS for `Amon2` class - my $c = MyApp->context(); Get the context object. - MyApp->set\_context($c) Set your context object(INTERNAL USE ONLY). # CLASS METHODS for inherited class - `MyApp->config()` This method returns configuration information. It is generated by `MyApp->load_config()`. - `MyApp->mode_name()` This is a mode name for Amon2. The default implementation of this method is: sub mode_name { $ENV{PLACK_ENV} } You can override this method if you want to determine the mode by other method. - `MyApp->new()` Create new context object. - `MyApp->bootstrap()` my $c = MyApp->bootstrap(); Create new context object and set it to global context. When you are writing CLI script, setup the global context object by this method. - `MyApp->base_dir()` This method returns the application base directory. - `MyApp->load_plugin($module_name[, \%config])` This method loads the plugin for the application. _$module\_name_ package name of the plugin. You can write it as two form like [DBIx::Class](https://metacpan.org/pod/DBIx%3A%3AClass): __PACKAGE__->load_plugin("Web::CSRFDefender"); # => loads Amon2::Plugin::Web::CSRFDefender If you want to load a plugin in your own name space, use the '+' character before a package name, like following: \_\_PACKAGE\_\_->load\_plugin("+MyApp::Plugin::Foo"); # => loads MyApp::Plugin::Foo - `MyApp->load_plugins($module_name[, \%config ], ...)` Load multiple plugins at one time. If you want to load a plugin in your own name space, use the '+' character before a package name like following: __PACKAGE__->load_plugins("+MyApp::Plugin::Foo"); # => loads MyApp::Plugin::Foo - `MyApp->load_config()` You can get a configuration hashref from `config/$ENV{PLACK_ENV}.pl`. You can override this method for customizing configuration loading method. - `MyApp->add_config()` DEPRECATED. - `MyApp->debug_mode()` **((EXPERIMENTAL))** This method returns a boolean value. It returns true when $ENV{AMON2\_DEBUG} is true value, false otherwise. You can override this method if you need. # PROJECT LOCAL MODE **THIS MODE IS HIGHLY EXPERIMENTAL** Normally, Amon2's context is stored in a global variable. This module makes the context to project local. It means, normally context class using Amon2 use `$Amon2::CONTEXT` in each project, but context class using ["PROJECT LOCAL MODE"](#project-local-mode) use `$MyApp::CONTEXT`. **It means you can't use code depend `<Amon2-`context>> and `<Amon2-`context>> under this mode.**> ## NOTES ABOUT create\_request Older [Amon2::Web::Request](https://metacpan.org/pod/Amon2%3A%3AWeb%3A%3ARequest) has only 1 argument like following, it uses `Amon2->context` to get encoding: sub create_request { my ($class, $env) = @_; Amon2::Web::Request->new($env); } If you want to use ["PROJECT LOCAL MODE"](#project-local-mode), you need to pass class name of context class, as following: sub create_request { my ($class, $env) = @_; Amon2::Web::Request->new($env, $class); } ## HOW DO I ENABLE PROJECT LOCAL MODE? ` MyApp-`make\_local\_context() > turns on the project local mode. There is no way to revert it, thanks. ## METHODS This module inserts 3 methods to your context class. - MyApp->context() Shorthand for $MyApp::CONTEXT - MyApp->set\_context($context) It's the same as: $MyApp::CONTEXT = $context - my $guard = MyApp->context\_guard() Create new context guard class. It's the same as: Amon2::ContextGuard->new(shift, \$MyApp::CONTEXT); # DOCUMENTS More complicated documents are available on [http://amon.64p.org/](http://amon.64p.org/) # SUPPORTS \#amon at irc.perl.org is also available. # AUTHOR Tokuhiro Matsuno <tokuhirom@gmail.com> # CONTRIBUTORS - noblejasper - hiratara - s-aska - Kentaro Kuribayashi - Yuki Ibe - mattn - Masahiro Nagano - rightgo09 - karupanerura - hatyuki - Keiji, Yoshimi - Nishibayashi Takuji - dragon3 - Fuji, Goro - issm - hisaichi5518 - Adrian - Fuji, Goro - ITO Nobuaki - Geraud CONTINSOUZAS - Syohei YOSHIDA - magnolia - Katsuhiro Konishi # LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.