aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima/CmdLine.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sietima/CmdLine.pm')
-rw-r--r--lib/Sietima/CmdLine.pm164
1 files changed, 95 insertions, 69 deletions
diff --git a/lib/Sietima/CmdLine.pm b/lib/Sietima/CmdLine.pm
index 180d3dd..57fbf18 100644
--- a/lib/Sietima/CmdLine.pm
+++ b/lib/Sietima/CmdLine.pm
@@ -8,9 +8,83 @@ use App::Spec;
use Sietima::Runner;
use namespace::clean;
-# VERSION
+our $VERSION = '1.1.2'; # VERSION
# ABSTRACT: run Sietima as a command-line application
+
+has sietima => (
+ is => 'ro',
+ required => 1,
+ isa => SietimaObj,
+);
+
+
+has extra_spec => (
+ is => 'ro',
+ isa => HashRef,
+ default => sub { +{} },
+);
+
+
+sub BUILDARGS($class,@args) {
+ my $args = $class->next::method(@args);
+ $args->{sietima} //= do {
+ my $traits = delete $args->{traits} // [];
+ my $constructor_args = delete $args->{args} // {};
+ Sietima->with_traits($traits->@*)->new($constructor_args);
+ };
+ return $args;
+}
+
+
+has app_spec => (
+ is => 'lazy',
+ init_arg => undef,
+);
+
+sub _build_app_spec($self) {
+ my $spec_data = $self->sietima->command_line_spec();
+
+ return App::Spec->read({
+ $spec_data->%*,
+ $self->extra_spec->%*,
+
+ # App::Spec 0.005 really wants a class name, even when we pass
+ # a pre-build cmd object to the Runner
+ class => ref($self->sietima),
+ });
+}
+
+
+has runner => (
+ is => 'lazy',
+ init_arg => undef,
+ handles => [qw(run)],
+);
+
+sub _build_runner($self) {
+ return Sietima::Runner->new({
+ spec => $self->app_spec,
+ cmd => $self->sietima,
+ });
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+Sietima::CmdLine - run Sietima as a command-line application
+
+=head1 VERSION
+
+version 1.1.2
+
=head1 SYNOPSIS
use Sietima::CmdLine;
@@ -28,35 +102,23 @@ use namespace::clean;
This class simplifies the creation of a L<< C<Sietima> >> object, and
uses L<< C<App::Spec> >> to provide a command-line interface to it.
-=attr C<sietima>
+=head1 ATTRIBUTES
+
+=head2 C<sietima>
Required, an instance of L<< C<Sietima> >>. You can either construct
it yourself, or use the L<simplified building provided by the
constructor|/new>.
-=cut
-
-has sietima => (
- is => 'ro',
- required => 1,
- isa => SietimaObj,
-);
-
-=attr C<extra_spec>
+=head2 C<extra_spec>
Optional hashref. Used inside L<< /C<app_spec> >>. If you're not
familiar with L<< C<App::Spec> >>, you probably don't want to touch
this.
-=cut
+=head1 METHODS
-has extra_spec => (
- is => 'ro',
- isa => HashRef,
- default => sub { +{} },
-);
-
-=method C<new>
+=head2 C<new>
my $cmdline = Sietima::CmdLine->new({
sietima => Sietima->with_traits(qw(SubjectTag))->new({
@@ -78,21 +140,7 @@ The constructor. In alternative to passing a L<< C<Sietima> >>
instance, you can pass C<traits> and C<args>, and the instance will be
built for you. The two calls above are equivalent.
-=for Pod::Coverage BUILDARGS
-
-=cut
-
-sub BUILDARGS($class,@args) {
- my $args = $class->next::method(@args);
- $args->{sietima} //= do {
- my $traits = delete $args->{traits} // [];
- my $constructor_args = delete $args->{args} // {};
- Sietima->with_traits($traits->@*)->new($constructor_args);
- };
- return $args;
-}
-
-=method C<app_spec>
+=head2 C<app_spec>
Returns an instance of L<< C<App::Spec> >>, built from the
specification returned by calling L<<
@@ -101,51 +149,29 @@ C<command_line_spec>|Sietima/command_line_spec >> on the L<<
method, and the C<extra_spec> attribute, are probably only interesting
to people who are doing weird extensions.
-=cut
-
-has app_spec => (
- is => 'lazy',
- init_arg => undef,
-);
-
-sub _build_app_spec($self) {
- my $spec_data = $self->sietima->command_line_spec();
-
- return App::Spec->read({
- $spec_data->%*,
- $self->extra_spec->%*,
-
- # App::Spec 0.005 really wants a class name, even when we pass
- # a pre-build cmd object to the Runner
- class => ref($self->sietima),
- });
-}
-
-=method C<runner>
+=head2 C<runner>
Returns an instance of L<< C<Sietima::Runner> >>, built from the L<<
/C<app_spec> >>.
-=method C<run>
+=head2 C<run>
Delegates to the L<< /C<runner> >>'s L<< C<run>|App::Spec::Run/run >> method.
Parser the command line arguments from C<@ARGV> and executes the
appropriate action.
-=cut
+=for Pod::Coverage BUILDARGS
-has runner => (
- is => 'lazy',
- init_arg => undef,
- handles => [qw(run)],
-);
+=head1 AUTHOR
-sub _build_runner($self) {
- return Sietima::Runner->new({
- spec => $self->app_spec,
- cmd => $self->sietima,
- });
-}
+Gianni Ceccarelli <dakkar@thenautilus.net>
-1;
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2023 by Gianni Ceccarelli <dakkar@thenautilus.net>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut