NAME

DBICx::DataDictionary - Define a data dictionary to use with your DBIx::Class Schema

VERSION

version 0.001

SYNOPSIS

## declare your data dictionary class
package My::DataDictionary;

use strict;
use warnings;
use DBICx::DataDictionary;

add_type PK => {
  data_type         => 'integer',
  is_nullable       => 0,
  is_auto_increment => 1,
};

add_type NAME => {
  data_type   => 'varchar',
  is_nullable => 0,
  size        => 100,
};

1;


## Use it on your own Sources
package My::Schema::Result::Table;

use strict;
use warnings;
use base 'DBIx::Class';

use My::Schema::DataDictionary qw( PK NAME );

__PACKAGE__->load_components(qw(Core));
__PACKAGE__->table('table');

__PACKAGE__->add_columns(
  table_id => PK,
  name     => NAME(is_nullable => 1),
);

__PACKAGE__->set_primary_key('table_id');

1;

DESCRIPTION

As your DBIx::Class-based application starts to grown, you start to use the same definitions for some columns.

All your primary keys are probably alike, and some fields, like names, addresses and other elements are also similar.

The DBICx::DataDictionary module allows you to create your own libraries of column types, and reuse them in your sources.

First you create a class for you class library and use the DBICx::DataDictionary module. This will update your class @ISA to subclass the Exporter:

package My::DataDictionary;

use DBICx::DataDictionary;

Then you declare your types using the add_type() function (imported by default) like this:

add_type PK => {
  data_type         => 'integer',
  is_nullable       => 0,
  is_auto_increment => 1,
};

Each type declared is available as an optional exported symbol from your class library. To use them in your sources:

use My::DataDictionary qw( PK );

Alternatively you can import all your types with:

use My::DataDictionary qw( :all );

To use your types in a column definition:

__PACKAGE__->add_columns(
  id => PK,
);

In this case the id column will use the PK type definition.

You can override the type definition passing as arguments the override values:

__PACKAGE__->add_columns(
  id => PK(data_type => 'bigint'),
);

FUNCTIONS

add_type()

add_type($type_name, \%column_definition);
add_type NAME => { data_type => 'varchar', size => 150 };

Defines a new type named $type_name. The default column specification is \%column_definition.

Each type is defined as a exportable function inside you data dictionary class. This function accepts a %hash with column definition options that will override the \%column_definition.

Returns nothing.

SEE ALSO

Inspired by MooseX::Types

AUTHOR

Pedro Melo, <melo@simplicidade.org>

API design by Matt S Trout

COPYRIGHT & LICENSE

Copyright 2010 Pedro Melo

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