Ignore:
Timestamp:
03/29/10 01:35:03 (14 years ago)
Author:
nanardon
Message:
  • add delete function

factorize help code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LATMOS-Accounts/lib/LATMOS/Accounts/Cli.pm

    r847 r848  
    11package LATMOS::Accounts::Cli; 
     2 
     3# $Id$ 
    24 
    35use strict; 
     
    1315sub globalenv { 
    1416    my ($labase) = @_; 
    15     my $env = LATMOS::Accounts::Cli->new({ prompt => sub { "LA cli > " }, }, 
     17    my $env = LATMOS::Accounts::Cli->new({ prompt => sub { $_[0]->base->label . " cli > " }, }, 
    1618        $labase); 
    1719    $env->add_func('ls', { 
     
    9597        { 
    9698            prompt => sub { 
    97                 sprintf("%s (%s) > ", 
     99                sprintf("%s %s/%s > ", 
     100                    $_[0]->base->label, 
    98101                    $_[0]->{_otype}, 
    99                     @{$_[0]->{_objects}} > 1 ? '...' : $_[0]->{_objects}[0]->id, 
     102                    @{$_[0]->{_objects}} > 1 ? '(' . 
     103                    scalar(@{$_[0]->{_objects}}) . ' obj.)' : $_[0]->{_objects}[0]->id, 
    100104                ); 
    101105            }, 
     
    122126            if (!$_[2]) { 
    123127                return $_[0]->base->list_canonical_fields($_[0]->{_otype}, 'r') 
     128            } 
     129        }, 
     130    }); 
     131    $objenv->add_func('print', { 
     132        help => 'print fmt - show attributes using template', 
     133        code => sub { 
     134            my ($env, $fmt) = @_; 
     135            foreach (@{$env->{_objects}}) { 
     136                print $OUT $_->queryformat($fmt) . "\n"; 
    124137            } 
    125138        }, 
     
    184197                    /^contratType$/ and return 
    185198                        $env->base->search_objects('group', 'sutype=contrattype'); 
     199                    /^site$/ and return 
     200                        $env->base->search_objects('site'); 
    186201                    if (@{$env->{_objects}} == 1) { 
    187202                        return $env->{_objects}[0]->get_attributes($args[0]); 
     
    242257            }, 
    243258        }); 
     259    $objenv->add_func('delete', { 
     260        help => 'delete - delete selected object', 
     261        code => sub { 
     262            my ($env) = @_; 
     263            printf $OUT "%s: %s\ndelete selected objects ? (yes/NO) ", 
     264            $env->{_otype}, join(', ', map { $_->id } @{$env->{_objects}}); 
     265            my $reply = <STDIN> || ''; chomp($reply); 
     266            if ($reply eq 'yes') { 
     267                foreach (@{$env->{_objects}}) { 
     268                    $env->base->delete_object($env->{_otype}, $_->id) or do { 
     269                        print $OUT "Cannot delete " . $_->id; 
     270                        return; 
     271                    }; 
     272                } 
     273                $env->base->commit; 
     274                return "EXIT"; 
     275            } else { 
     276                print $OUT "cancel !" 
     277            } 
     278        }, 
     279    }); 
    244280 
    245281    if (lc($otype) eq 'user') { 
     
    324360    $env->add_func('exit', { help => "exit current mode", 
    325361            code => sub { return "EXIT" }, }); 
     362    $env->add_func('help', { 
     363        help => 'help [command] - print help about command', 
     364        completion => sub { 
     365            if (!$_[2]) { return sort keys %{ $_[0]->{funcs} || {}} } 
     366        }, 
     367        code => sub { 
     368            my ($self, $name) = @_; 
     369            if (!$name) { 
     370                print $OUT join(', ', sort keys %{ $self->{funcs} || {}}); 
     371            } elsif ($self->{funcs}{$name}{alias}) { 
     372                print $OUT "$name is an alias for " . join(' ', 
     373                    @{$self->{funcs}{$name}{alias}}); 
     374            } elsif ($self->{funcs}{$name}{help}) { 
     375                print $OUT $self->{funcs}{$name}{help}; 
     376            } else { 
     377                print $OUT "No help availlable"; 
     378            } 
     379        }, 
     380    }); 
     381 
    326382    $env; 
    327383} 
     
    370426    if (!$name) { 
    371427        return grep { /^\Q$lastw\E/ } sort 
    372             ('help', keys %{ $self->{funcs} || {}}); 
    373     } elsif ($name eq 'help') { 
    374         return grep { /^\Q$lastw\E/ } sort keys %{ $self->{funcs} || {}}; 
     428            (keys %{ $self->{funcs} || {}}); 
    375429    } elsif ($self->{funcs}{$name}{alias}) { 
    376430        $self->complete($lastw, @{$self->{funcs}{$name}{alias}}, @args); 
     
    386440    my ($self, $name, @args) = @_; 
    387441    return if (!$name); 
    388     if ($name eq 'help') { 
    389         $self->help(@args); 
    390     } elsif ($self->{funcs}{$name}{alias}) { 
     442    if ($self->{funcs}{$name}{alias}) { 
    391443        $self->run(@{$self->{funcs}{$name}{alias}}, @args); 
    392444    } elsif ($self->{funcs}{$name}{code}) { 
     
    396448} 
    397449 
    398 sub help { 
    399     my ($self, $name) = @_; 
    400     if (!$name) { 
    401         print $OUT join(', ', sort keys %{ $self->{funcs} || {}}); 
    402     } elsif ($self->{funcs}{$name}{alias}) { 
    403         print $OUT "$name is an alias for " . join(' ', 
    404             @{$self->{funcs}{$name}{alias}}); 
    405     } elsif ($self->{funcs}{$name}{help}) { 
    406         print $OUT $self->{funcs}{$name}{help}; 
    407     } else { 
    408         print $OUT "No help availlable"; 
    409     } 
    410 } 
    411  
    412  
    4134501; 
Note: See TracChangeset for help on using the changeset viewer.