App-AutoCRUD
view release on metacpan or search on metacpan
lib/App/AutoCRUD/ConfigDomain.pm view on Meta::CPAN
-optional => 1,
-all => Struct(
name => String,
descr => String(-optional => 1),
node => Node(-optional => 1),
columns => List(-all => Struct(
name => String,
descr => String(-optional => 1),
))
)),
);
}
sub Node {
Enum(-values => [qw/open closed/], @_);
}
1;
__END__
=encoding ISO-8859-1
=head1 NAME
App::AutoCRUD::ConfigDomain - checking configuration data
=head1 SYNOPSIS
=head2 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;
=head2 Configuration example
app:
# global settings for the application
# maybe application name, stuff for the homepage, etc.
name: Demo
title: AutoCRUD demo application
readonly: 0
default:
page_size : 50
datasources :
Chinook :
dbh:
connect:
- "dbi:SQLite:dbname=Chinook_Sqlite_AutoIncrementPKs.sqlite"
- ""
- ""
- RaiseError: 1
sqlite_unicode: 1
sqlite_open_flags: 2 # SQLITE_OPEN_READWRITE
tablegroups :
- name: Music
descr: Tables describing music content
node: open
tables :
- Artist
- Album
- Track
- name: Playlist
descr: Tables for structuring playlists
node: open
tables :
- Playlist
- PlaylistTrack
# ...
tables:
Track:
colgroups:
- name: keys
columns:
- name: TrackId
descr: Primary key
- name: AlbumId
descr: foreign key to the album where this track belongs
- name: GenreId
descr: foreign key to the genre of this track
- name: MediaTypeId
descr: foreign key to the media type of this track
- name: Textual information
columns:
- name: Name
descr: name of this track
- name: Composer
descr: name of composer of this track
- name: Technical details
columns:
- name: Bytes
- name: Milliseconds
- name: Commercial details
columns:
- name: UnitPrice
Customer:
colgroups:
- name: keys
columns:
- name: CustomerId
descr: Primary key
- name: SupportRepId
descr: foreign key to the support employee
- name: Name
columns:
- name: FirstName
- name: LastName
- name: Company
lib/App/AutoCRUD/ConfigDomain.pm view on Meta::CPAN
name => string,
[ descr => string, ]
[ node => 'open' | 'closed', ]
tables => <string>+
<table> : {
<string> => {
[ descr => <string>, ]
colgroups => {
name => <string>
[ descr => string, ]
[ node => 'open' | 'closed', ]
columns => {
name => <string>,
[ descr => <string> ]
}+
}+
}
=head1 CONFIGURATION SECTIONS
=head2 app
Basic information about the application :
=over
=item name
Short name (will be displayed in most pages).
=item title
Long name (will be displayed in home page).
=item readonly
Boolean flag; if true, data mutation operations will be forbidden
(i.e. no insert, update or delete).
=item default
Hashref of various default values that may be used by inner modules.
Currently there is only one example : C<page_size>, used by
L<App::AutoCRUD::Controller::Table> to decide how many
records per page will be displayed.
=back
=head2 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 :
=over
=item dbh
A hashref containing instructions for connecting to the database.
The main key is C<connect>, which contains a list of arguments
to L<DBI/connect>, i.e. a connection string, username, password,
and possibly a hashref of additional options. Alternatively, C<connect>
could also contain a coderef, or even just a string of Perl code,
which will be C<eval>ed to get the connection.
Optional keys C<db_catalog> and C<db_schema> may specify the values to
be passed to L<DBI/table_info>, L<DBI/column_info>, etc. This will be
necessary if your database contains several catalogs and/or schemata.
=item descr
A string for describing the database; this will be displayed on the
home page.
=item require
The name of a Perl module to load before accessing this datasource
(optional).
=item schema_class
The name of the L<DBIx::DataModel::Schema> subclass for this datasource.
This is optional, and defaults to the value of C<require>; if none is
supplied, the class will be constructed dynamically.
=item 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
( run in 0.636 second using v1.01-cache-2.11-cpan-39bf76dae61 )