NAME Setup::Multi - Setup using a series of other setup routines VERSION version 0.03 SYNOPSIS use Setup::Multi 'setup_multi'; use Setup::File::Dir 'setup_dir'; use Setup::File 'setup_file'; # simple usage (doesn't save undo data) my $res = setup_multi subs => [ setup_dir => [{name=>'/foo', should_exist=>1}, {name=>'/foo/bar', should_exist=>1}, {name=>'/foo/bar/baz', should_exist=>1}], setup_file => {name=>"/foo/bar/baz/qux", should_exist=>1}, ]; die unless $res->[0] == 200 || $res->[0] == 304; # perform setup and save undo data (undo data should be serializable) $res = setup_multi ..., -undo_action => 'do'; die unless $res->[0] == 200 || $res->[0] == 304; my $undo_data = $res->[3]{undo_data}; # perform undo $res = setup_multi ..., -undo_action => "undo", -undo_data=>$undo_data; die unless $res->[0] == 200 || $res->[0] == 304; DESCRIPTION This module provides one function: setup_multi. This module is part of the Setup modules family. This module uses Log::Any logging framework. This module's functions have Sub::Spec specs. THE SETUP MODULES FAMILY I use the "Setup::" namespace for the Setup modules family. See Setup::File for more details on the goals, characteristics, and implementation of Setup modules family. FUNCTIONS None are exported by default, but they are exportable. setup_multi(%args) -> [STATUS_CODE, ERR_MSG, RESULT] Setup using a series of other setup routines. Accept a list of setup subroutine name and arguments, or coderefs, and call them each sequentially as steps. If one step fails, the whole steps will be rolled back using the undo data. If all steps succeed, return the concatenated undo data from each step. This function is declared as supporting the 'undo' and 'dry_run' features, so all setup routines mentioned in 'subs' argument must also support those two features (but this is not currently checked). Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result. This function supports undo operation. See Sub::Spec::Clause::features for details on how to perform do/undo/redo. This function supports dry-run (simulation) mode. To run in dry-run mode, add argument "-dry_run" => 1. Arguments ("*" denotes required arguments): * subs* => *array* List of setup subroutine (names/refs) and arguments. Setup subroutine can be a string (its name) or a coderef. If subroutine is a non-qualified name (i.e., foo instead of Package::foo), it will be qualified with caller's package. Argument can be a single hashref or arrayref (of hashrefs). Example, if subs are: [ 'Pkg::func1' => \%args, 'func2' => [\%args2, \%args3, \%args4], \&func3 => [\%args5], sub{...} => \%args6, ] then the subs which will be called: Pkg::func1->(%args); func2->(%args2); func2->(%args3); func2->(%args4); func3(%args5); (sub{...})->(%args6); FAQ When to use coderef (routine refs) or string (routine names) in subs? Since the routine name is included in undo data, use string to make it easily serializable. SEE ALSO Other modules in Setup:: namespace. AUTHOR Steven Haryanto COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Steven Haryanto. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.