Author: jhoblitt
Date: Sun Jan 15 15:43:58 2006
New Revision: 11203
Modified:
trunk/lib/Parrot/Configure.pm
trunk/t/configure/configure.t
Log:
add Parrot::Configure->add_step()
change Parrot::Configure's internal representation of steps to an AoA structure
change Parrot::Configure->steps() to return an AoA structure
pass any registered parameters to each step's ->runstep() method
Modified: trunk/lib/Parrot/Configure.pm
==============================================================================
--- trunk/lib/Parrot/Configure.pm (original)
+++ trunk/lib/Parrot/Configure.pm Sun Jan 15 15:43:58 2006
@@ -110,7 +110,9 @@ sub options
=item * C<steps()>
-Provides a list of registered steps.
+Provides a list of registered steps. Where each steps is represented by an
+array in the format of C<['stepname', @params]>. Steps are returned in the
+order in which they were registered in.
Accepts no arguments and returns a list in list context or an arrayref in
scalar context.
@@ -124,6 +126,25 @@ sub steps
return wantarray ? @{$self->{steps}} : $self->{steps};
}
+=item * C<add_step()>
+
+Registers a new step and any parameters that should be passed to it. With the
+first parameter being the class name of the step register. All other
+parameters are saved and passed to the registered class's C<runstep()> method.
+
+Accepts a list and returns a L<Parrot::Configure> object.
+
+=cut
+
+sub add_step
+{
+ my ($self, $step, @params) = @_;
+
+ push @{$self->{steps}}, [$step, @params];
+
+ return $self;
+}
+
=item * C<add_steps()>
Registers a new step to be run at the end of the execution queue.
@@ -134,11 +155,11 @@ Accepts a list and returns a L<Parrot::C
sub add_steps
{
- my $self = shift;
+ my ($self, @new_steps) = @_;
- my @new_steps = @_;
-
- push @{$self->{steps}}, @new_steps;
+ foreach my $step (@new_steps) {
+ $self->add_step($step);
+ }
return $self;
}
@@ -147,7 +168,8 @@ sub add_steps
Sequentially executes step in the order they were registered. The invoking
L<Parrot::Configure> object is passed as the first argument to each steps
-C<runstep()> method.
+C<runstep()> method followed by any parameters that were registered for that
+step.
Accepts no arguments and returns a L<Parrot::Configure::Data> object.
@@ -161,7 +183,10 @@ sub runsteps
$self->options->get(qw(verbose verbose-step ask));
my $n = 0; # step number
- foreach my $step ($self->steps) {
+ foreach my $registered_step ($self->steps) {
+ my $step = shift @$registered_step;
+ my @step_params = @$registered_step;
+
$n++;
eval "use $step";
@@ -190,7 +215,12 @@ sub runsteps
print "\n", $description, '...';
print "\n" if $verbose && $verbose == 2;
- $step->runstep($self);
+ if (@step_params) {
+ $step->runstep($self, @step_params);
+ } else {
+ $step->runstep($self);
+ }
+
my $result = $step->result || 'done';
print "..." if $verbose && $verbose == 2;
Modified: trunk/t/configure/configure.t
==============================================================================
--- trunk/t/configure/configure.t (original)
+++ trunk/t/configure/configure.t Sun Jan 15 15:43:58 2006
@@ -82,7 +82,7 @@ can_ok('Parrot::Configure', qw(
my $pc = Parrot::Configure->new;
$pc->add_steps(qw(foo::step));
- is_deeply(scalar $pc->steps, [qw(foo::step)],
+ is_deeply(scalar $pc->steps, [['foo::step']],
"->steps() returns the proper list");
}
@@ -90,15 +90,12 @@ can_ok('Parrot::Configure', qw(
my $pc = Parrot::Configure->new;
$pc->add_steps(qw(foo::step bar::step baz::step));
- is_deeply(scalar $pc->steps, [qw(foo::step bar::step baz::step)],
+ is_deeply(scalar $pc->steps, [['foo::step'], ['bar::step'], ['baz::step']],
"->steps() returns the proper list");
}
# ->steps() / ->add_step()
-SKIP: {
- skip "->add_step() is unimplimented", 3;
-
{
my $pc = Parrot::Configure->new;
@@ -109,7 +106,7 @@ SKIP: {
my $pc = Parrot::Configure->new;
$pc->add_step('foo::step');
- is_deeply(scalar $pc->steps, [qw(foo::step)],
+ is_deeply(scalar $pc->steps, [['foo::step']],
"->steps() returns the proper list after ->add_step() w/o args");
}
@@ -117,10 +114,9 @@ SKIP: {
my $pc = Parrot::Configure->new;
$pc->add_step('foo::step', qw(bar baz));
- is_deeply(scalar $pc->steps, [qw(foo::step)],
+ is_deeply(scalar $pc->steps, [['foo::step', qw(bar baz)]],
"->steps() returns the proper list after ->add_step() with args");
}
-}
# ->runsteps()
@@ -187,8 +183,6 @@ SKIP: {
"no extra parameters were passed to ->runstep()");
}
-SKIP: {
- skip "->add_step() is unimplimented", 4;
{
package test::step::stepparams;
@@ -212,12 +206,12 @@ SKIP: {
# otherwise runsteps() output will make Test::Harness think this test
# failed.
print "\n";
- isa_ok($test::step::stepparams::self, 'Parrot::Configure');
+ is($test::step::stepparams::self, 'test::step::stepparams',
+ "->runstep() is called as class method");
isa_ok($test::step::stepparams::conf, 'Parrot::Configure');
cmp_ok($test::step::stepparams::self, 'ne', $test::step::stepparams::conf,
'$self and $conf params are not the same object');
- is_deeply([EMAIL PROTECTED]::step::stepparams::conf, [24, qw( bar baz bong
), 42],
+ is_deeply([EMAIL PROTECTED]::step::stepparams::params, [24, qw( bar baz
bong ), 42],
"proper additional parameters were passed to ->runstep()");
}
-}