The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

OpenInteract2::ContentGenerator::TemplateSource - Common routines for loading content from OI2 templates

SYNOPSIS

 # Sample from Text::Template content generator
 
 sub process {
     my ( $class, $template_config, $template_vars, $template_source ) = @_;
     my $SOURCE_CLASS = 'OpenInteract2::ContentGenerator::TemplateSource';
     my ( $source_type, $source ) = SOURCE_CLASS->identify( $template_source );
     if ( $source_type eq 'NAME' ) {
         my ( $template, $filename, $modified ) =
                         SOURCE_CLASS->load_source( $source );
         $source_type = 'TEXT';
         $source      = $template;
     }
     $template_config->{TYPE}   = $source_type;
     $template_config->{SOURCE} = $source;
     my $template = Text::Template->new( %{ $template_config } );
     unless ( $template ) {
         oi_error "Failed to create template parsing object: ",
                  $Text::Template::ERROR;
     }
     my $content = $template->fill_in( HASH => $template_vars );
     unless ( $content ) {
         oi_error "Failed to fill in template: $Text::Template::ERROR";
     }

CLASS METHODS

identify( \%template_source )

Checks \%template_source for template information and returns a source type and source. Here are the types of information we check for in \%template_source and what's returned:

  • Key name: Set source type to 'NAME' and source to the value of the name key.

  • Key text: Set source type to 'TEXT' and source to a scalar reference with the value of the text key. If text is already a reference it just copies the reference, otherwise it takes a reference to the text in the key.

  • Key filehandle: Set source type to 'FILE' and source to the filehandle in filehandle.

  • Key object: Set source type to 'TEXT' and source to a reference to the content of the template key of the OpenInteract2::SiteTemplate object in object.

If none of these are found an exception is thrown.

Additionally, if we're able to pull a name from the template source and the current OpenInteract2::Controller object can handle it, we call add_template_used() on it, passing it the template name.

Returns: two item list of source type and source.

load_source( $template_name )

Fetches the template with the fully-qualified name $template_name and returns a three-item list with: contents, full filename, and the last modified time.

If the template is not found we throw an exception, and any exception thrown from the fetch propogates up.

Returns: a three-item list with: contents, full filename, and the last modified time (which is a DateTime object).

COPYRIGHT

Copyright (c) 2002-2003 Chris Winters. All rights reserved.

AUTHORS

Chris Winters <chris@cwinters.com>