View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Andrew Sterling Hanenkamp > Contentment-0.011_033 > Contentment::Generator



Annotate this POD

Module Version: 0.011_033   Source  


Contentment::Generator - Provides the contract and factory for generators


  my $generator = Contentment::Generator->generator('Plain', {
      source     => sub {
          print "Hello World!\n";
      kind       => 'text/plain',
      properties => {
          title       => 'Generic Generator',
          description => 'This is a very simple example.',

  $generator->generate( foo => 1, bar => 2 );


At the center of each response is the generator. A generator is responsible for sending a response to the user and must implement a few methods. This class provides a generic way for constructing generators.


This is the list of methods that a generator class must implement and the expected parameters, output, and return values.

my $generator->new(\%args)

Users should not call generator constructors directly. Rather, $generator objects should be constructed via the factory method, generator, provided by Contentment::Generator (this class).

The arguments can be anything appropriate to the generator class. However, here a few recommendations:


Many generators take some source text and use that as the basis for executing some code, finding properties, etc. The source should be accepted as a scalar. You may also wish to accept other forms like file handles.


Many generators will take a list of properties to associate with the generator. If your generator creates properties from the source, it is recommended that the properties associated with this option be used as default values. Any properties found in the file should append to or override the properties stated here.

my $value = $generator->get_property($key)

This method must exist and returns whatever information is appropriate. For generators based on files, it might return information for keys naming values returned from the stat operator. This is anything you want.

This should, in general, include the following properties for each generator:


This is the kind of data the generate() method will output.


This is the title of the document generated by this generator.


This is a short one line description of the document generated by this generator.

$result = $generator->generate(%args)

This method should print to STDOUT the output of the generator. It may return whatever result seems appropriate (it will be ignored if it's run as the top-level response).


$generator = Contentment::Generator->generator($class, \%args)

This factory method will create the requested generator. If the given class name, $class, does not contain "::", it will be considered a short name and will have the string "Contentment::Generator::" prepended to it to find the generator class.

The arguments should be those necessary to initialize the generator.

$content = Contentment::Generator->content_of($generator, \%args)

This is a helper to stringify the generation of a generator in case you need to just capture the string output instead of printing that output immediately. This is very useful for calling generators from the Template Toolkit generator:

  [% USE Generator %]
  [% Generator.content_of(arg.gen, foo = 1 bar = 2) %]


Andrew Sterling Hanenkamp, <>


Copyright 2005 Andrew Sterling Hanenkamp. All Rights Reserved.

Contentment is licensed and distributed under the same terms as Perl itself.

syntax highlighting: