X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FProducer%2FTurnkey.pm;h=34c35354f0b9a832a3e7b09321fb72421ed4a8f0;hb=83a42239747224210b405df64976ebc156c23bc1;hp=e5b9568bebcc53b919e6854171c9335584f271d6;hpb=1da104021271abc5d4a4c4475b3b813e75730882;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Producer/Turnkey.pm b/lib/SQL/Translator/Producer/Turnkey.pm index e5b9568..34c3535 100644 --- a/lib/SQL/Translator/Producer/Turnkey.pm +++ b/lib/SQL/Translator/Producer/Turnkey.pm @@ -1,10 +1,9 @@ package SQL::Translator::Producer::Turnkey; # ------------------------------------------------------------------- -# $Id: Turnkey.pm,v 1.13 2004-01-02 00:17:10 allenday Exp $ +# $Id: Turnkey.pm,v 1.32 2004-04-03 03:50:05 allenday Exp $ # ------------------------------------------------------------------- -# Copyright (C) 2003 Allen Day , -# Brian O'Connor . +# Copyright (C) 2002-4 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -23,7 +22,7 @@ package SQL::Translator::Producer::Turnkey; use strict; use vars qw[ $VERSION $DEBUG ]; -$VERSION = sprintf "%d.%02d", q$Revision: 1.13 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.32 $ =~ /(\d+)\.(\d+)/; $DEBUG = 1 unless defined $DEBUG; use SQL::Translator::Schema::Constants; @@ -58,10 +57,14 @@ sub produce { my %meta = ( format_fk => $t->format_fk_name, + format_package => $t->format_package_name, + format_table => $t->format_table_name, template => $args->{'template'} || '', baseclass => $baseclass, + db_dsn => $args->{'db_dsn'} || '', db_user => $args->{'db_user'} || '', db_pass => $args->{'db_pass'} || '', + db_str => $args->{'db_str'} || '', parser => $t->parser_type, producer => __PACKAGE__, dsn => $args->{'dsn'} || sprintf( 'dbi:%s:_', $producer2dsn{ $parser_type } @@ -145,23 +148,34 @@ sub translateForm { my $t = shift; my $meta = shift; - -#"Node Data:\n"; -#warn Dumper $meta->{nodes}; -#exit; - my $args = $t->producer_args; my $type = $meta->{'template'}; - my $tt2; - $tt2 = template($type); + my $template = Template->new({ - PRE_CHOMP => 1, - POST_CHOMP => 0, - EVAL_PERL => 1 - }); + PRE_CHOMP => 1, + POST_CHOMP => 0, + EVAL_PERL => 1 + }); + my $tt2; + $tt2 = template($type); my $result; - $template->process(\$tt2, $meta, \$result) || die $template->error(); + + if($type eq 'atomtemplate'){ + my %result; + foreach my $node (values %{ $meta->{'nodes'} }){ + $result = ''; + my $param = { node => $node }; + $template->process(\$tt2, $param, \$result) || die $template->error(); + $result =~ s/^\s*(.+)\s*$/$1/s; + next unless $result; + $result{$node->table->name} = $result; + } + return \%result; + } else { + $template->process(\$tt2, $meta, \$result) || die $template->error(); + } + return($result); } @@ -199,9 +213,6 @@ sub template { if($type eq 'dbi'){ return <[% item %] } -sub [% name %] { shift->[% item %] } +[% IF item != "id" %]sub id { shift->[% item %] }[% END %] +[% IF item != name %]sub [% name %] { shift->[% item %] }[% END %] [% END %] [% END %] @@ -337,9 +349,12 @@ package [% baseclass %]; # Template used: classdbi use strict; +no warnings 'redefine'; use base qw(Class::DBI::Pg); -[% baseclass %]->set_db('Main', '[% db_str %]', '[% db_user %]', '[% db_pass %]'); +[% baseclass %]->set_db('Main', '[% db_dsn %]', '[% db_user %]', '[% db_pass %]', {AutoCommit=>1}); +sub search_ilike { shift->_do_search(ILIKE => [% "\@\_" %] ) } + [% FOREACH node = nodes %] [% printPackage(node.value) %] @@ -362,7 +377,6 @@ package Turnkey::Atom::[% node.value.name FILTER replace "Turnkey::Model::", "" [% pname = node.value.name FILTER replace "Turnkey::Model::", "" %] - use base qw(Turnkey::Atom); use Data::Dumper; @@ -373,9 +387,11 @@ sub can_render { sub render { my $self = shift; my $dbobject = shift; - # Assumption here that if it's not rendering on it's own dbobject - # then it's a list. This will be updated when AtomLists are implemented -boconnor + + # Assumption here that if it's not rendering on it's own dbobject + # then it's a list. This will be updated when AtomLists are implemented -boconnor if(ref($dbobject) eq 'Turnkey::Model::[% pname %]') { + $self->focus('yes'); return(_render_record($dbobject)); } else { return(_render_list($dbobject)); } @@ -386,11 +402,20 @@ sub _render_record { my @output = (); my $row = {}; my $field_hash = {}; + + #data [% FOREACH value = node.value.data_fields %] - [% IF value != 1 %] - $field_hash->{[% value %]} = $dbobject->[% value %](); - [% END %] - [% END %] + [% IF value != 1 %] + $field_hash->{[% value %]} = $dbobject->[% value %](); + [% END %] + [% END %] + + #keys + [% FOREACH value = node.value.edges %] + [% NEXT IF value.type != 'import' %] + $field_hash->{[% value.thisfield.name %]} = $dbobject->[% value.thisfield.name %](); + [% END %] + $row->{data} = $field_hash; $row->{id} = $dbobject->id(); push @output, $row; @@ -401,19 +426,27 @@ sub _render_list { my $dbobject = shift; my @output = (); my @objects = $dbobject->[% node.key %]s; - foreach my $object (@objects) - { + foreach my $object (@objects){ my $row = {}; - my $field_hash = {}; - [% FOREACH value = node.value.data_fields %] - [% IF value != 1 %] - $field_hash->{[% value %]} = $object->[% value %](); - [% END %] - [% END %] + my $field_hash = {}; + + #data + [% FOREACH value = node.value.data_fields %] + [% IF value != 1 %] + $field_hash->{[% value %]} = $object->[% value %](); + [% END %] + [% END %] + + #keys + [% FOREACH value = node.value.edges %] + [% NEXT IF value.type != 'import' %] + $field_hash->{[% value.thisfield.name %]} = $object->[% value.thisfield.name %](); + [% END %] + $row->{data} = $field_hash; - $row->{id} = $object->id(); - push @output, $row; - } + $row->{id} = $object->id(); + push @output, $row; + } return(\@output); } @@ -443,7 +476,7 @@ EOF [% FOREACH node = nodes %] [% IF !node.value.is_trivial_link %] - + [%- END -%] [% END %] @@ -452,12 +485,12 @@ EOF [% FOREACH focus_atom = nodes %] [% IF !focus_atom.value.is_trivial_link %] [% FOREACH link_atom = focus_atom.value.hyperedges %] - + [%- END -%] [% previous = "" %] [% FOREACH link_atom = focus_atom.value.edges %] [% IF link_atom.type == 'export' && previous != link_atom.thatnode.table.name && link_atom.thatnode.table.name != "" %] - + [% previous = link_atom.thatnode.table.name %] [% END %] [%- END %] @@ -465,25 +498,25 @@ EOF [% END %] - + [% FOREACH focus_atom = nodes %] [% IF !focus_atom.value.is_trivial_link %] - + [% FOREACH link_atom = focus_atom.value.hyperedges %] - + [%- END%] [% previous = "" %] [% FOREACH link_atom = focus_atom.value.edges %] [% IF link_atom.type == 'export' && previous != link_atom.thatnode.table.name %] - + [% previous = link_atom.thatnode.table.name %] [% END %] [%- END %] - - + + [%- END %] [% END %] - + @@ -492,7 +525,7 @@ EOF [% FOREACH focus_atom = nodes %] [% IF !focus_atom.value.is_trivial_link %] - + [%- END -%] [% END %] @@ -515,12 +548,12 @@ EOF [% ELSE %] [% IF p.name %] - - - + + + [% END %] - - [- END -] - [- END -] - [% id = record.id %] - - [% END %] -[% END %] -[- END -] -[- END -] [% MACRO renderlist(lstArr) BLOCK %] - [% FOREACH item = lstArr %] - [% item %] + [% END %] EOF -1; +} elsif($type eq 'atomtemplate') { + return <<'EOF'; +[%- TAGS [- -] -%] +[-- IF !node.is_trivial_link --] +[% rowcount = 0 %] +[% IF atom.focus == "yes" %] + [- FOREACH field = node.data_fields -] + [- IF field != "1" -] + + [- END -] + [- END -] + [- FOREACH field = node.edges -] + [- NEXT IF field.type != 'import' -] + + [- END -] + [% IF (rowcount > 1) %] [% END %] + [% rowcount = rowcount + 1 %] +[% ELSE %] + +[% END %] +[- END -] +EOF } } + +1;
[% p.name %][% IF panel.type == 'major' %]: [% dbobject.name %][% END %]
[% p.name %][% IF panel.type == 'major' %]: [% dbobject.name %][% END %]
+
[% renderatom(p,dbobject) %] @@ -537,42 +570,88 @@ EOF
[% END %] +[% BLOCK make_linked_dbobject %] + [% PERL %] + $stash->set(linked_dbobject => [% class %]->retrieve([% id %])); + [% END %] +[% END %] +[% MACRO obj2link(obj) SWITCH ref(obj) %] + [% CASE '' %] + [% obj %] + [% CASE DEFAULT %] + [% IF obj.name %] + [% obj.name %] + [% ELSE %] + [% obj %] + [% END %] +[% END %] +[% MACRO obj2url(obj) SWITCH obj %] + [% CASE DEFAULT %] + /?id=[% obj %];class=[% ref(obj) %] +[% END %] +[% MACRO obj2desc(obj) SWITCH ref(obj) %] + [% CASE '' %] + [% obj %] + [% CASE DEFAULT %] + [% IF obj.value %] + [% obj.value %] + [% ELSE %] + [% obj %] + [% END %] +[% END %] [% MACRO renderatom(atom, dbobject) SWITCH atom.name %] [- FOREACH node = nodes -] [- IF !node.value.is_trivial_link -] - [% CASE '[- node.key FILTER ucfirst -]' %] - [% render[- node.key FILTER ucfirst -]Atom(atom.render(dbobject)) %] + [% CASE '[- format_table(node.key) -]' %] + [% INCLUDE [- node.key -].tt2 %] [- END -] [- END -] [% CASE DEFAULT %] [% renderlist(atom.render(dbobject)) %] [% END %] -[- FOREACH node = nodes -] -[- IF !node.value.is_trivial_link -] -[% MACRO render[- node.key FILTER ucfirst -]Atom(lstArr) BLOCK %] - [% FOREACH record = lstArr %] - [% fields = record.data %] - [- pname = node.key FILTER ucfirst -] - [- pkey = "Turnkey::Model::${pname}" -] - [- FOREACH field = node.value.data_fields -] - [- IF field != "1" -] -
[- field -][% fields.[- field -] %]
Link
    + [% FOREACH item = lstArr %] + [% class = ref(atom) | replace('::Atom::', '::Model::') %] + [% id = item.id %] + [% PROCESS make_linked_dbobject %] +
  • [% obj2link(linked_dbobject) %]
  • [% END %] +
[- field -][% obj2link(dbobject.[- field -]) %]
[- field.thisfield.name -][% obj2link(fields.[- field.thisfield.name -]) %]

    + [% FOREACH record = atom.render(dbobject) %] + [% class = ref(atom) | replace('::Atom::', '::Model::') %] + [% id = record.id #needed by make_linked_dbobject macro %] + [% PROCESS make_linked_dbobject %] +
  • [% obj2link(linked_dbobject) %]
  • + [% END %] +