The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Catalyst::Helper::View::Seamstress;

use strict;

=head1 NAME

Catalyst::Helper::View::Seamstress - Helper for Seamstress Views

=head1 SYNOPSIS

    script/create.pl view Seamstress Seamstress [ comp_root skeleton ]

=head1 DESCRIPTION

Helper module for
L<Catalyst::View::Seamstress|Catalyst::View::Seamstress>.
It will create 3 (three) configuration variables in
C<MyApp::View::Seamstress>:

=over

=item * comp_root

C<comp_root> is the directory I<above> the directory where the HTML files 
that Seamstress will process are. This directory is usually a I<sister>
directory to F<root>, F<scripts>, and so forth.

If you don't set this, the helper script will create code that will
come up with a sensible default for this directory.

=item * skeleton


A skeleton is a Seamstress-style Perl class as discussed in
L<HTML::Seamstress/"The_meat-skeleton_paradigm">.

=item * meat_pack

C<meat_pack> is a subroutine which will pack meat into the skeleton.
It is also discussed along with the skeleton at the above link.

=back

Note that although the helper will create B<3> configuration variables, 
only B<2> can be set from the command line. The default C<meat_pack>
routine cannot be over-ridden from the command line helper script because
no sensible substitute routine could be handled well in one-line.


=cut

sub default_comp_root {
  use File::Spec;

  File::Spec->rel2abs('root');
}

sub comp_root_logic {

q/do { my ($appname) = split '::', __PACKAGE__; $appname->config->{root} } /

}

sub mk_compclass {
  my ( $self, $helper, $comp_root, $skeleton ) = @_;
  my $file = $helper->{file};
  unless ($comp_root) {
    $comp_root = comp_root_logic;
    print STDERR '$comp_root not supplied... defaulting to ' . $comp_root;
  }

  $helper->render_file( 
    'compclass', 
    $file, {
      comp_root => $comp_root,
      skeleton  => $skeleton,
     }
   );
}


=head1 SEE ALSO

L<Catalyst::View::Seamstress>,
L<Catalyst::Manual>, L<Catalyst::Test>, L<Catalyst::Request>,
L<Catalyst::Response>, L<Catalyst::Helper>,


=head1 AUTHOR

Terrence Brannon <metaperl@gmail.com>

=head1 LICENSE

This library is free software . You can redistribute it and/or modify
it under the same terms as perl itself.

=cut

1;

__DATA__

__compclass__
package [% class %];

use strict;
#use base 'Catalyst::Base';
#use base 'Catalyst::View::Seamstress';
#use base qw(Class::Prototyped HTML::Seamstress);
use base qw(Catalyst::View::Seamstress HTML::Seamstress);
use vars qw($comp_root);

BEGIN {
  # edit this to '/ernest/dev/catalyst-simpleapp/root'
  # or something along those lines... wherever the 
  # HTML for Seamstress to rewrite is.
  $comp_root  = [% comp_root %];
  $comp_root .= '/' unless $comp_root =~ m![/]$!;
}

sub comp_root { $comp_root }

__PACKAGE__->config(
  comp_root => $comp_root,
  fixup     => sub { } ,
  skeleton  => '[% skeleton %]',
  meat_pack => sub { 
    my ($self, $c, $stash, $meat, $skeleton) = @_;

    my $body_elem = $skeleton->look_down('_tag' => 'body');
    my $meat_body = $skeleton->look_down(seamstress => 'replace');

    unless ($meat_body) {
      warn "could not find meat_body";
      die $meat->as_HTML;
    }

    $meat_body->replace_content($meat->content_list);
  } # default sub, only runs if skeleton is true
 ) ;

use lib $comp_root;


1;


=head1 NAME

[% class %] - Catalyst Seamstress View

=head1 SYNOPSIS

See L<[% app %]>

=head1 DESCRIPTION

Catalyst Seamstress View.

=head1 METHODS

=head2 comp_root

This method returns the root of your html file tree which is normally something
like /full/path/to/MyApp/root/


=head1 AUTHOR

[% author %]

=head1 LICENSE

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

=cut

1;