NAME
Mojolicious::Plugin::DSC - use DBIx::Simple::Class in your application.
SYNOPSIS
#load
# Mojolicious
$self->plugin('DSC', $config);
# Mojolicious::Lite
plugin 'DSC', $config;
my $user = My::User->find(1234);
#or
my $user = My::User->query('SELECT * FROM users WHERE user=?','ivan');
#or if SQL::Abstract is isnstalled
my $user = My::User->select(user=>'ivan');
DESCRIPTION
Mojolicious::Plugin::DSC is a Mojolicious plugin that helps you use DBIx::Simple::Class in your application. It also adds an app attribute ($app->dbix
) and controller helper ($c->dbix
) which is a DBIx::Simple instance.
CONFIGURATION
The configuration is pretty flexible:
# in Mojolicious startup()
$self->plugin('DSC', {
dsn => 'dbi:SQLite:database=:memory:;host=localhost'
});
#or
$self->plugin('DSC', {
driver => 'mysqlPP',
database => 'mydbname',
host => '127.0.0.1',
user => 'myself',
password => 'secret',
onconnect_do => [
'SET NAMES UTF8',
'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"'
sub{my $dbix = shift; do_something_complicated($dbix)}
],
dbh_attributes => {AutoCommit=>0},
namespace => 'My',
#will load My::User, My::Content, My::Pages
load_classes =>['User', 'Content', 'My::Pages'],
#now you can use $app->DBIX instead of $app->dbix
dbix_helper => 'DBIX'
});
The following parameters can be provided:
load_classes
An ARRAYREF of classes to be loaded. If not provided, all classes under namespace will be loaded. Classes are expected to be already dumped as files using dsc_dump_schema.pl
from an existing database.
#all classes under My::Schema::Class
$app->plugin('DSC', {
namespace => My::Schema::Class,
});
#only My::Schema::Class::Groups and My::Schema::Class::Users
$app->plugin('DSC', {
namespace => My::Schema::Class,
load_classes => ['Groups', 'Users']
});
DEBUG
Boolean. When the current "mode" in Mojolicious is development
this value is 1.
$app->plugin('DSC', {
DEBUG => 1,
namespace => My::Schema::Class,
load_classes => ['Groups', 'Users']
});
dbh_attributes
HASHREF. Attributes passed to "connect" in DBIx::Simple. Default values are:
{
RaiseError => 1,
AutoCommit => 1,
};
They can be overriden:
$app->plugin('DSC', {
namespace => My::Schema::Class,
dbh_attributes =>{ AutoCommit => 0, sqlite_unicode => 1 }
});
dsn
Connection string parsed using "parse_dsn" in DBI and passed to "connect" in DBIx::Simple.
From this string we guess the "driver", "database", host, port and the namespace which ends up as camelised form of the "database" name.
If "dsn" is not passed most of the configuration values above must be provided so a valid connection string can be constructed. If "dsn" is provided it will be preferred over the above parameters (excluding namespace) because the developer should know better how exactly to connect to the database.
$app->plugin('DSC', {
namespace => My::Schema::Class,
dbh_attributes => {sqlite_unicode => 1},
dsn => 'dbi:SQLite:database=myfile.sqlite'
});
driver
String. One of "mysql","SQLite","Pg" etc... This string is prepended with "dbi:". No default value.
$app->plugin('DSC', {
driver => 'mysql',
dbh_attributes => {sqlite_unicode => 1},
dsn => 'dbi:SQLite:database=myfile.sqlite'
});
database
String - the database name. No default value.
$app->plugin('DSC', {
database => app->home->rel_file('etc/ado.sqlite'),
dbh_attributes => {sqlite_unicode => 1},
driver => 'SQLite',
namespace => 'Ado::Model',
});
host
String. defaults to localhost
.
port
String. Not added to the connection string if not provided.
namespace
The class name of your schema class. If not provided the value will be guessed from the database or dsn. It is recommended to provide your schema class name.
$app->plugin('DSC', {
database => app->home->rel_file('etc/ado.sqlite'),
dbh_attributes => {sqlite_unicode => 1},
driver => 'SQLite',
namespace => 'My::Model',
});
user
String. Username used to connect to the database.
password
String. Password used to connect to the database.
onconnect_do
ARRAYREF of SQL statements and callbacks which will be executed right after establiching the connection.
$app->plugin('DSC', {
database => app->home->rel_file('etc/ado.sqlite'),
dbh_attributes => {sqlite_unicode => 1},
driver => 'SQLite',
namespace => 'Ado::Model',
onconnect_do => [
'PRAGMA encoding = "UTF-8"',
'PRAGMA foreign_keys = ON',
'PRAGMA temp_store = 2', #MEMORY
'VACUUM',
sub{
shift->dbh->sqlite_create_function( 'now', 0, sub { return time } );
}
],
});
postpone_connect
Boolean. If set, establishing the connection to the database will be postponed for the first call of $app->dbix
or the method name you provided for the "dbix_helper".
dbix_helper
String. The name of the helper method that can be created to invoke/use directly the DBIx::Simple instance on your controller or application. Defaults to dbix
.
METHODS
Mojolicious::Plugin::DSC inherits all methods from Mojolicious::Plugin and implements the following new ones.
register
$plugin->register(Mojolicious->new);
Register plugin in Mojolicious application.
config
This plugin own configuration. Returns a HASHref.
#debug
$app->log->debug($app->dumper($plugin->config));
SEE ALSO
DBIx::Simple::Class, Mojolicious, Mojolicious::Guides, http://mojolicio.us.
LICENSE AND COPYRIGHT
Copyright 2012 Красимир Беров (Krasimir Berov).
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
See http://dev.perl.org/licenses/ for more information.