File: Command.pm

package info (click to toggle)
libmoosex-app-perl 1.43-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 712 kB
  • sloc: perl: 4,011; makefile: 2
file content (54 lines) | stat: -rw-r--r-- 1,401 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# ============================================================================
package MooseX::App::Plugin::Man::Command;
# ============================================================================

use 5.010;
use utf8;

use namespace::autoclean;
use Moose;
use MooseX::App::Command;
use Pod::Perldoc;

command_short_description q(Full manpage);

has 'command' => (
    is              => 'ro',
    isa             => 'ArrayRef',
    predicate       => 'has_command',
    documentation   => q[Command],
    traits          => ['MooseX::App::Meta::Role::Attribute::Option'],
    cmd_type        => 'parameter',
    cmd_position    => 1,
);

sub man {
    my ($self,$app) = @_;

    my $meta = $app->meta;
    my $class;

    if ($self->has_command) {
        my $return = $meta->command_find($self->command);
        # Nothing found
        if (blessed $return
            && $return->isa('MooseX::App::Message::Block')) {
            return MooseX::App::Message::Envelope->new(
                $return,
                $meta->command_usage_command($self->meta),
            );
        }
        $class = $meta->command_get($return);
    } else {
        $class = $meta->name;
    }

    Class::Load::load_class($class);
    my $filename = MooseX::App::Utils::package_to_filename($class);

    exec('perldoc',$filename);
    #return $MooseX::App::Null::NULL;
}

__PACKAGE__->meta->make_immutable;
1;