NAME

MooX::Cmd::ChainedOptions - easily access options from higher up the command chain

VERSION

version 0.04

SYNOPSIS

  # MyApp.pm : App Base Class
  use Moo;
  use MooX::Cmd;
  use MooX::Cmd::ChainedOptions;

  option app_opt => ( is => 'ro', format => 's', default => 'BASE' );

  sub execute {
      print $_[0]->app_opt, "\n";
  }

  # MyApp/Cmd/cmd.pm : Command Class
  package MyApp::Cmd::cmd;
  use Moo;
  use MooX::Cmd;
  use MooX::Cmd::ChainedOptions;

  option cmd_opt => ( is => 'ro', format => 's', default => 'A' );

  sub execute {
      print $_[0]->app_opt, "\n";
      print $_[0]->cmd_opt, "\n";
  }

  # MyApp/Cmd/cmd/Cmd/subcmd.pm : Sub-Command Class
  package MyApp::Cmd::cmd::Cmd::subcmd;
  use Moo;
  use MooX::Cmd;
  use MooX::Cmd::ChainedOptions;

  option subcmd_opt => ( is => 'ro', format => 's', default => 'B' );

  sub execute {
      print $_[0]->app_opt, "\n";
      print $_[0]->cmd_opt, "\n";
      print $_[0]->subcmd_opt, "\n";
  }

DESCRIPTION

For applications using MooX::Cmd and MooX::Options, MooX::Cmd::ChainedOptions transparently provides access to command line options from further up the command chain.

For example, if an application provides options at each level of the command structure:

  app --app-opt cmd --cmd-opt subcmd --subcmd-opt

The subcmd object will have direct access to the app_option and cmd_option options via object attributes:

  sub execute {
      print $self->app_opt, "\n";
      print $self->cmd_opt, "\n";
      print $self->subcmd_opt, "\n";
  }

USAGE

Simply

  use MooX::Cmd::ChainedOptions;

instead of

  use MooX::Options;

Every layer in the application hierarchy (application class, command class, sub-command class) must use MooX::Cmd::ChainedOptions. See the "SYNOPSIS" for an example.

BUGS AND LIMITATIONS

You can make new bug reports, and view existing ones, through the web interface at https://rt.cpan.org/Public/Dist/Display.html?Name=MooX-Cmd-ChainedOptions.

AUTHOR

Diab Jerius <djerius@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2017 by Smithsonian Astrophysical Observatory.

This is free software, licensed under:

  The GNU General Public License, Version 3, June 2007