Extendable Interfaces
---------------------

There are several packages in the Test::AutoBuild code base that are designed to
be extended or replaced if you wish to do so.

Here is a list of the base packages and their public interfaces.  When you
extend or replace any of these packages, you must make sure to provide
implementations of these methods.

package Test::AutoBuild::Stage;
sub new
  IN A: class reference or class name
  IN B: (possibly empty) flattened hash of parameters
  ACTION: create a new stage object
  OUT: stage object

sub option
  IN A: class reference
  IN B: string
  IN C: (optional) scalar
  ACTION: If C is provided, set the value of the option named A.  This value
          must persist until the object is destroyed or the value is reset
  OUT: the value of the option named A (after setting it to C when applicable)

sub run
  IN A: class reference
  ACTION: Perform the action that this stage is meant to perform.  It is
          expected that the stage's status will be set before returning.  It is
          expected that the stage's start_time will be set to the time at which
          the run method is called, and the stage's end_time will be set to the
          time at which the run method exits.  Finally, it is expected that the
          stage will run each of its substages which are enabled.
  OUT: A list: the first element is any true value upon success or any false
       value upon failure.  The second element in the list is optional.  If
       present, it is a string describing the outcome of the method call.

sub name
  IN A: class reference
  IN B: (optional) string
  ACTION: set the stage's name to B if it is supplied.
  OUT: the stage's name

sub label
  IN A: class reference
  IN B: (optional) string
  ACTION: set the stage's label to B if it is supplied.
  OUT: the stage's label

sub start_time
  IN A: class reference
  IN B: (optional) integer describing date in seconds since epoch
  ACTION: set the stage's start_time to B if it is supplied.
  OUT: the stage's start_time

sub end_time
  IN A: class reference
  IN B: (optional) integer describing date in seconds since epoch
  ACTION: set the stage's end_time to B if it is supplied.
  OUT: the stage's end_time

sub stages
  IN A: class reference
  IN B: (optional) reference to an array of Stage object references
  ACTION: set the stage's list of substages to B if it is supplied.
  OUT: the stage's list of substages

sub status
  IN A: class reference
  IN B: (optional) string - one of 'success', 'failure'
  ACTION: set the stage's status to B if it is supplied.
  OUT: the stage's status

sub is_critical
  IN A: class reference
  IN B: (optional) boolean value
  ACTION: set the stage's criticalness to B if it is supplied.
  OUT: the stage's criticalness

sub enabled
  IN A: class reference
  IN B: (optional) boolean value
  ACTION: set the stage's enabled status to B if it is supplied.
  OUT: the stage's enabled status
