X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FTTSchema.pm;h=91481efaaf20c4e1a646cdcf9cbcc84c18688799;hb=f27f9229eaf8c5ce637bea1f99eb8f9bdb42799c;hp=dc9b64e34127b8a5ab9fa0d5212d871d1156a956;hpb=2b2601b506861fa81674c960752231365bdbf436;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/TTSchema.pm b/lib/SQL/Translator/Producer/TTSchema.pm index dc9b64e..91481ef 100644 --- a/lib/SQL/Translator/Producer/TTSchema.pm +++ b/lib/SQL/Translator/Producer/TTSchema.pm @@ -1,113 +1,185 @@ package SQL::Translator::Producer::TTSchema; -=pod +=pod =head1 NAME -SQL::Translator::Producer::TTSchema - Produces output using the template toolkit -from a SQL schema. +SQL::Translator::Producer::TTSchema - + Produces output using the Template Toolkit from a SQL schema -=cut +=head1 SYNOPSIS + + use SQL::Translator; + my $translator = SQL::Translator->new( + from => 'MySQL', + filename => 'foo_schema.sql', + to => 'TTSchema', + producer_args => { + ttfile => 'foo_template.tt', # Template file to use + + # Extra template variables + ttargs => { + author => "Mr Foo", + }, + + # Template config options + ttargs => { + INCLUDE_PATH => '/foo/templates', + }, + }, + ); + print $translator->translate; + +=head1 DESCRIPTION + +Produces schema output using a given Template Tookit template. + +It needs one additional producer_arg of C which is the file +name of the template to use. This template will be passed a variable +called C, which is the C object +created by the parser. You can then use it to walk the schema via the +methods documented in that module. + +Here's a brief example of what the template could look like: + + database: [% schema.database %] + tables: + [% FOREACH table = schema.get_tables %] + [% table.name %] + ================ + [% FOREACH field = table.get_fields %] + [% field.name %] [% field.data_type %]([% field.size %]) + [% END -%] + [% END %] + +See F for a more complete example. + +The template will also get the set of extra variables given as a hashref via the +C producer arg. + +You can set any of the options used to initiallize the Template object by +adding a tt_conf producer_arg. See Template Toolkit docs for details of +the options. +(Note that the old style of passing this config directly in the producer args +has been deprecated). + + + $translator = SQL::Translator->new( + to => 'TT', + producer_args => { + ttfile => 'foo_template.tt', + ttargs => {}, + tt_conf = { + INCLUDE_PATH => '/foo/templates/tt', + INTERPOLATE => 1, + } + }, + ); + +You can use this producer to create any type of text output you like, +even using it to create your own versions of what the other producers +make. For example, you could create a template that translates the +schema into MySQL's syntax, your own HTML documentation, your own +Class::DBI classes (or some other code) -- the opportunities are +limitless! + +=head2 Producer Args + +=over 4 + +=item ttfile + +The template file to generate the output with. + +=item tt_vars +A hash ref of extra variables you want to add to the template. + +=item tt_conf + +A hash ref of configuration options to pass to the L