The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::App::AutoCRUD::ConfigDomain - checking configuration data

SYNOPSIS

Using the module

  use Plack::App::AutoCRUD::ConfigDomain;
  use YAML qw/LoadFile Dump/;
  
  my $config = LoadFile $config_file;
  my $domain = Plack::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 Plack::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>,
    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).

default

Hashref of various default values that may be used by inner modules. Currently there is only one example : page_size, used by Plack::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 just a string of Perl code, which will be evaled to get the connection.

Optional keys db_catalog and db_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 or closed, depending on how you want this group to be presented in the home page. By default groups are open, which means that the list of tables within the group is immediately visible. The choice closed 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.