Workflow::Config - Parse configuration files for the workflow components |
Workflow::Config - Parse configuration files for the workflow components
# Reference multiple files my $parser = Workflow::Config->new( 'xml' ); my @config = $parser->parse( 'action', 'workflow_action.xml', 'other_actions.xml' ); # Read in one of the file contents from somewhere else my $xml_contents = read_contents_from_db( 'other_actions.xml' ); my @config = $parser->parse( 'action', 'workflow_action.xml', \$xml_contents ); _ # Reference multiple files of mixed types my @action_config = Workflow::Config->parse_all_files( 'action', 'my_actions.xml', 'your_actions.perl' );
Read in configurations for the various workflow components. Currently the class understands XML (preferred) and serialized Perl data structures as valid configuration file formats. (I tried to use INI files but there was too much deeply nested information. Sorry.)
Runs through each file in @files
and processes it according to the valid
If you want to store your configuration in a different format you can create your own parser. All you need to do is:
For instance, if you wanted to use YAML for configuration files you would do something like:
# just a convention, you can use any namespace you want package Workflow::Config::YAML; use strict;
# Requirement 1: Subclass Workflow::Config use base qw( Workflow::Config ); # Requirement 2: Implement required methods sub parse { ... }
The third requirement is registration, which just tells the Workflow::Config manpage which parser to use for a particular type. To do this you have two options.
Registration option one
Register yourself in your own class, adding the following call anywhere the end:
# Option 1: Register ourselves by name Workflow::Config->register_factory_type( yaml => 'Workflow::Config::YAML' );
Now you just need to include the configuration class in your workflow invocation script:
use strict; use Workflow::Factory qw( FACTORY ); use Workflow::Config::YAML; # <-- brings in the registration
Registration option two
You can also just explicitly add the registration from your workflow invocation script:
use strict; use Workflow::Factory qw( FACTORY ); use Workflow::Config; # Option 2: explicitly register your configuration parser Workflow::Config->register_factory_type( yaml => 'Workflow::Config::YAML' );
Whichever one you choose you can now parse (in this example) YAML files alongside the built-in parsers for XML and Perl files:
FACTORY->add_config_from_file( workflow => 'workflow.yaml', action => [ 'my_actions.yaml', 'other_actions.xml' ], validator => 'validators.yaml', condition => [ 'my_conditions.yaml', 'other_conditions.xml' ] persister => 'persister.perl', );
Instantiates an object of the correct type -- see the Class::Factory manpage for how this is implemented:
# Parser of type 'Workflow::Config::XML' my $xml_parser = Workflow::Config->new( 'xml' ); # Parser of type 'Workflow::Config::Perl my $perl_parser = Workflow::Config->new( 'perl' );
Returns true if $config_type
is a valid configuration type, false
if not. Valid configuration types are: 'action', 'condition',
'validator', 'workflow'.
get_valid_config_types()
Returns list of strings representing the valid configuration types.
Parse each item in @items
to a hash reference based on the
configuration type $config_type
which must pass the
is_valid_config_type()
test. An 'item' is either a filename or a
scalar reference with the contents of a file. (You can mix and match
as seen in the SYNOPSIS.)
Should throw an exception if:
get_valid_config_types()
; you can check whether a
particular type is valid with is_valid_config_type()
. (See above
for descriptions.)
You pass in a file that cannot be read or parsed because of
permissions, malformed XML, incorrect Perl data structure, etc. It
does not do a validation check (e.g., to ensure that every 'action'
within a workflow state has a 'resulting_state' key).
Returns: one hash reference for each member of @items
This gives you an idea of the configuration information in the various workflow pieces:
workflow type $ description $ persister $ observer \@ sub $ class $ state \@ name $ description $ action \@ name $ resulting_state $ condition \@ name $
conditions: condition \@ name $ class $ param \@ name $ value $
validators: validator \@ name $ class $ param \@ name $ value $
actions: action \@ name $ field \@ name $ is_required yes|no type $ source_list \@ of $ source_class $ param \@ name $ value $ validator \@ name $ arg \@ value $
persister: extra_table $ extra_field $ extra_class $ extra_context $
Copyright (c) 2003-2004 Chris Winters. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Chris Winters <chris@cwinters.com>
Workflow::Config - Parse configuration files for the workflow components |