App-SD

 view release on metacpan or  search on metacpan

lib/App/SD/CLI/Command/Ticket/Update.pm  view on Meta::CPAN

package App::SD::CLI::Command::Ticket::Update;
use Any::Moose;
use Params::Validate qw/validate/;

extends 'Prophet::CLI::Command::Update';
with 'App::SD::CLI::Model::Ticket';
with 'App::SD::CLI::Command';
with 'Prophet::CLI::TextEditorCommand';

sub ARG_TRANSLATIONS { shift->SUPER::ARG_TRANSLATIONS(),  a => 'all-props'  };

sub usage_msg {
    my $self = shift;
    my $cmd = $self->cli->get_script_name;
    my @primary_commands = @{ $self->context->primary_commands };

    # if primary commands was only length 1, the type was not specified
    # and we should indicate that a type is expected
    push @primary_commands, '<record-type>' if @primary_commands <= 1;

    my $type_and_subcmd = join( q{ }, @primary_commands );

    return <<"END_USAGE";
usage: ${cmd}${type_and_subcmd} <record-id> --edit [--all-props]
       ${cmd}${type_and_subcmd} <record-id> -- status=open
END_USAGE
}

# use an editor to edit if no props are specified on the commandline,
# allowing the creation of a new comment in the process
override run => sub {
    my $self = shift;

    $self->print_usage if $self->has_arg('h');

    $self->require_uuid;
    my $record = $self->_load_record;

    return super() if ($self->context->prop_names && !$self->has_arg('edit'));
    my $template_to_edit = $self->create_record_template($record);

    my $done = 0;

    while (!$done) {
      $done =  $self->try_to_edit( template => \$template_to_edit, record => $record);
    }

};

sub process_template {
    my $self = shift;
    my %args = validate( @_, { template => 1, edited => 1, record => 1 } );

    my $record      = $args{record};
    my $updated     = $args{edited};
    my ( $props_ref, $comment ) = $self->parse_record_template($updated);

    no warnings 'uninitialized';

    # if a formerly existing prop was removed from the output, delete it
    # (deleting is currently the equivalent of setting to '', and
    # we want to do this all in one changeset)
    for my $prop ( keys %{ $record->get_props } ) {
        next if ( grep { $_ eq $prop } $record->immutable_props );
        $props_ref->{$prop} = ''
            if (!exists $props_ref->{$prop} &&
                # only delete props if they were actually presented
                # for editing in the first place
                grep { $_ eq $prop } $record->props_to_show( {
                        update  => 1,



( run in 0.686 second using v1.01-cache-2.11-cpan-5a3173703d6 )