NAME

   Mojolicious::Plugin::Nour::Database - Adds an easy to use database
   handle to your mojo app.

VERSION

   version 0.09

USAGE

   Somewhere in your startup routine, include something like this:

       $self->plugin( 'Mojolicious::Plugin::Nour::Database' );

   Then from your controllers, you can do things like this:

       sub list {
           my $self = shift;
           my $list = $self->db->query( qq|
               select l.language_code id
                    , l.unicode name_unicode
                    , l.english name_english
                    , l.direction
                 from content.resource r
                 join i18n.language l using ( language_code )
                group by l.language_code, l.unicode, l.english, l.direction
                order by l.language_code
           | )->hashes;
           $self->render( json => $list );
       }

   Or:

       sub list {
           my $self = shift;
           my $list = $self->db( 'audio' )->query( qq|
               select r.reciter_id id
                    , concat( 'http://audio.quran.com:9999/', r.path, '/ogg/' ) base_url
                    , r.arabic name_arabic
                    , r.english name_english
                 from audio.reciter r
                order by r.english
           | )->hashes;
           $self->render( json => $list );
       }

   This module uses Nour::Database which is a wrapper for DBIx::Simple to
   provide an app helper that let's you easily query your databases and
   get the resultsets you want without having to deal with bloated,
   retarded ORMs. SQL is good for you. It also uses Nour::Config to read
   your db configuration. See the configuration section for details on how
   to set that up.

CONFIGURATION

   First, cursorily scan "USAGE" in Mojolicious::Plugin::Nour::Config
   because it's relevant in that you should put your configuration under a
   directory structure that might look like this, for example:

        $ find ./config/
       ./config/
       ./config/application
       ./config/application/nested
       ./config/application/nested/example.yml
       ./config/application.yml
       ./config/database
       ./config/database/private
       ./config/database/private/production.yml
       ./config/database/private/README.md
       ./config/database/config.yml

   The only real file you need is ./config/database/config.yml. Overriding
   configuration in the "private" sub-directory e.g.
   ./config/database/private/ is just a neat feature which let's you
   override the entire config or just a single nested key/value that was
   imported from the "public" configuration i.e.
   ./config/database/config.yml. Why is this useful? You can `echo
   '*private*' >> .gitignore` and ensure that your passwords or sensitive
   tokens or what not don't get exposed in your public git repository.

CONFIGURATION EXAMPLES

   Here's a couple examples of what ./config/database/config.yml might
   look like:

   Postgresql

         ---
         development:
             dsn: dbi:Pg:dbname=foo;host=bar
             username: foobar
             password: barbaz
         production:
             dsn: dbi:Pg:dbname=bar
         default:
             database: production
             username: barfoo
             password: baroo
             option:
                 AutoCommit: 1
                 RaiseError: 1
                 PrintError: 1
                 pg_bool_tf: 0
                 pg_enable_utf8: 1

   MySQL

         ---
         development:
             dsn: dbi:mysql:database=app_dev;host=10.0.1.99
         production:
             dsn: dbi:mysql:database=app_prod;host=10.0.1.99
         production_with_drop_priv:
             dsn: dbi:mysql:database=app_prod;host=10.0.1.99
             username: drop
             password: drop
         otherdb:
             dsn: dbi:mysql:database=dbfoo;host=otherhost
             option:
                 AutoCommit: 0
         default:
             database: production
             username: ding
             password: dong
             option:
                 AutoCommit: 1
                 RaiseError: 1
                 PrintError: 1
                 mysql_enable_utf8: 1
                 mysql_auto_reconnect: 1

SEE ALSO

   Nour::Config

   Nour::Database

   DBIx::Simple

   Mojolicious::Plugin::Nour::Config

SUPPORT

Bugs / Feature Requests

   Please report any bugs or feature requests through the issue tracker at
   https://github.com/sharabash/mojolicious-plugin-nour-database/issues.
   You will be notified automatically of any progress on your issue.

Source Code

   This is open source software. The code repository is available for
   public review and contribution under the terms of the license.

   https://github.com/sharabash/mojolicious-plugin-nour-database

     git clone git://github.com/sharabash/mojolicious-plugin-nour-database.git

AUTHOR

   Nour Sharabash <[email protected]>

CONTRIBUTOR

   Nour Sharabash <[email protected]>

COPYRIGHT AND LICENSE

   This software is copyright (c) 2014 by Nour Sharabash.

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