]> git.vpit.fr Git - perl/modules/rgit.git/blobdiff - lib/App/Rgit/Command.pm
Make sure the POD headings are linkable
[perl/modules/rgit.git] / lib / App / Rgit / Command.pm
index cf58e94b80e8f241a00ecdccb101221d80686a1a..b4d78dd4984270f922a9b080b3c6963455651a40 100644 (file)
@@ -3,11 +3,9 @@ package App::Rgit::Command;
 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
 
@@ -15,11 +13,11 @@ App::Rgit::Command - Base class for App::Rgit commands.
 
 =head1 VERSION
 
-Version 0.03
+Version 0.08
 
 =cut
 
-our $VERSION = '0.03';
+our $VERSION = '0.08';
 
 =head1 DESCRIPTION
 
@@ -29,7 +27,12 @@ This is an internal class to L<rgit>.
 
 =head1 METHODS
 
-=head2 C<< new cmd => $cmd, args => \@args >>
+=head2 C<new>
+
+    my $arc = App::Rgit::Command->new(
+     cmd  => $cmd,
+     args => \@args,
+    );
 
 Creates a new command object for C<$cmd> that is bound to be called with arguments C<@args>.
 
@@ -39,25 +42,36 @@ my %commands;
 __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<action>
+
+    my $pkg = $arc->action($cmd);
+    $arc->action($cmd => $pkg);
 
 If C<$pkg> is supplied, handles command C<$cmd> with C<$pkg> objects.
 Otherwise, returns the current class for C<$cmd>.
@@ -78,15 +92,20 @@ sub action {
  $commands{$cmd} = $pkg;
 }
 
-=head2 C<report $conf, $repo, $status>
+=head2 C<report>
+
+    my $code = $arc->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 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;
 }
 
@@ -96,9 +115,17 @@ sub report {
 
 =head2 C<policy>
 
-Accessors.
+Read-only accessors.
 
-=head2 C<run $conf>
+=cut
+
+BEGIN {
+ eval "sub $_ { \$_[0]->{$_} }" for qw/cmd args policy/;
+}
+
+=head2 C<run>
+
+    my $code = $arc->run($conf);
 
 Runs the command with a L<App::Rgit::Config> configuration object.
 Handles back the code to return to the system and the last policy.
@@ -111,12 +138,13 @@ L<rgit>.
 =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
 
-Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
+Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>.
+I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
 
 =head1 SUPPORT
 
@@ -126,7 +154,7 @@ You can find documentation for this module with the perldoc command.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008 Vincent Pit, all rights reserved.
+Copyright 2008,2009,2010 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.