NAME
App::AutoCRUD::ConfigDomain - checking configuration data
SYNOPSIS
Using the module
use App::AutoCRUD::ConfigDomain;
use YAML qw/LoadFile Dump/;
my $config = LoadFile $config_file;
my $domain = App::AutoCRUD::ConfigDomain->Config();
my $errors = $domain->inspect($config);
die Dump($errors) if $errors;
Configuration example
TODO
app:
# global settings for the application
# maybe application name, stuff for the homepage, etc.
name: Demo
default:
page_size : 50
datasources :
DEVCI :
dbh:
connect:
- "dbi:SQLite:dbname=D:/Temp/DEVCI_MINI_unicode.sqlite"
- ""
- ""
- RaiseError: 1
sqlite_unicode: 1
structure: DM
DEVPJ :
dbh:
connect:
- "dbi:SQLite:dbname=D:/Temp/DEVPJ_MINI_unicode.sqlite"
- ""
- ""
- RaiseError: 1
sqlite_unicode: 1
structure: DM
DESCRIPTION
This package builds a Data::Domain for checking configuration data.
The App::AutoCRUD application uses this domain at startup time to check if the configuration is correct.
DATASTRUCTURE
<config> : {
app => <app>,
datasources => [ <datasource>+ ]
}
<app> : {
name => <string>,
title => <string>,
readonly => <whatever>, # used as boolean
default => <hashref>,
}
<datasource> : {
dbh => {
connect => ( [ <string>, <string>, <string>, <hashref>? ]
| <coderef> ),
db_catalog => <string>,
db_schema => <string>,
},
descr => <string>,
require => <string>,
schema_class => <string>,
tablegroups => [ <tablegroup>+ ],
tables => [ <table>+ ],
}
CONFIGURATION SECTIONS
app
Basic information about the application :
- name
-
Short name (will be displayed in most pages).
- title
-
Long name (will be displayed in home page).
- readonly
-
Boolean flag; if true, data mutation operations will be forbidden (i.e. no insert, update or delete).
- default
-
Hashref of various default values that may be used by inner modules. Currently there is only one example :
page_size
, used by App::AutoCRUD::Controller::Table to decide how many records per page will be displayed.
datasources
datasources :
Chinook :
dbh:
connect:
- "dbi:SQLite:dbname=/path/to/Chinook_Sqlite_AutoIncrementPKs.sqlite"
- "" # username
- "" # password
- RaiseError: 1 # DBI options
sqlite_unicode: 1
A hashref describing the various databases served by this application. Each key in the hashref is a short name for accessing the corresponding datasource; that name will be part of URLs. Each value is a hashref with the following keys :
- dbh
-
A hashref containing instructions for connecting to the database.
The main key is
connect
, which contains a list of arguments to "connect" in DBI, i.e. a connection string, username, password, and possibly a hashref of additional options. Alternatively,connect
could also contain a coderef, or even just a string of Perl code, which will beeval
ed to get the connection.Optional keys
db_catalog
anddb_schema
may specify the values to be passed to "table_info" in DBI, "column_info" in DBI, etc. This will be necessary if your database contains several catalogs and/or schemata. - descr
-
A string for describing the database; this will be displayed on the home page.
- require
-
The name of a Perl module to load before accessing this datasource (optional).
- schema_class
-
The name of the DBIx::DataModel::Schema subclass for this datasource. This is optional, and defaults to the value of
require
; if none is supplied, the class will be constructed dynamically. - tablegroups
-
tablegroups : - name: Music descr: Tables describing music content node: open tables : - Artist - Album - Track - name: Reference descr: Lists of codes node: closed tables : - MediaType - Genre ...
Datastructure for organising how database tables will be presented. In absence of groups, the default presentation is alphabetical order, which is good enough for small databases, but is no longer appropriate when the number of tables becomes large. Tablegroups is a list of subsets of tables; each group may contain :
- name
-
Short name for this group
- descr
-
Longer description for this group
- node
-
Either
open
orclosed
, depending on how you want this group to be presented in the home page. By default groups areopen
, which means that the list of tables within the group is immediately visible. The choiceclosed
is more appropriate for tables which contain technical information and are not immediately useful to the user. - tables
-
The ordered list of tables within this group.
- filters
-
Allows to hide some tables by using regexes, this only hides tables which are NOT explicitely defined in the configuration.
They are hidden from display, but there is absolutely no acces restriction (access is still possible by using the right URL).
- include
-
This is evaluated as a regex and only shows tables who have matching names.
- exclude
-
This is evaluated as a regex and hides tables who have matching names.
Exclude takes precedence over include.
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 223:
=over without closing =back
- Around line 279:
=over without closing =back