use strict;
use warnings;
-use Carp qw/croak/;
+use Carp ();
-use Object::Tiny qw/cmd args policy/;
-
-use App::Rgit::Utils qw/validate :codes/;
+use App::Rgit::Utils qw/:codes/;
=head1 NAME
__PACKAGE__->action($_ => 'Once') for qw/daemon gui help init version/, ' ';
sub new {
- my ($class, %args) = &validate;
+ my $class = shift;
+ $class = ref $class || $class;
+
+ my %args = @_;
+
my $cmd = $args{cmd};
$cmd = ' ' unless defined $cmd;
+
my $action = $class->action($cmd);
+
if ($class eq __PACKAGE__) {
$class = $action;
} else {
- croak "Command $cmd should be executed as a $action"
- unless $class->isa($action);
+ Carp::confess("Command $cmd should be executed as a $action")
+ unless $class->isa($action);
}
- eval "require $action; 1" or croak "Couldn't load $action: $@";
- $class->SUPER::new(
+
+ eval "require $action; 1" or Carp::confess("Couldn't load $action: $@");
+
+ bless {
cmd => $cmd,
args => $args{args} || [ ],
policy => $args{policy},
- );
+ }, $class;
}
=head2 C<< action $cmd [ => $pkg ] >>
=head2 C<report $conf, $repo, $status>
Reports that the execution of the command in C<$repo> exited with C<$status> to the current command's policy.
-Returns what the policy callback returned, which should be one of the policy codes listed in C<App::Rgit::Utils>.
+Returns what policy C<report> method returned, which should be one of the policy codes listed in C<App::Rgit::Utils>.
=cut
sub report {
my ($self) = @_;
- my $cb = $self->policy;
- return $_[3] ? LAST : NEXT unless $cb;
- my $code = $cb->(@_);
+
+ my $code = $self->policy->handle(@_);
+
return defined $code ? $code : NEXT;
}
=head2 C<policy>
-Accessors.
+Read-only accessors.
+
+=cut
+
+BEGIN {
+ eval "sub $_ { \$_[0]->{$_} }" for qw/cmd args policy/;
+}
=head2 C<run $conf>
=head1 AUTHOR
Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
-
+
You can contact me by mail or on C<irc.perl.org> (vincent).
=head1 BUGS