BZ-Client

 view release on metacpan or  search on metacpan

lib/BZ/Client/Bug.pm  view on Meta::CPAN


sub legal_values {
    my($class, $client, $field) = @_;
    my $params = { 'field' => $field };
    return $class->_returns_array($client, 'Bug.legal_values', $params, 'values');
}

sub get {
    my($class, $client, $params) = @_;
    unless (ref $params) {
        $params = [ $params ]
    }
    if (ref $params eq 'ARRAY') {
        $params = { ids => $params }
    }
    elsif (ref $params eq 'HASH') {
        $params->{'permissive'} = BZ::Client::XMLRPC::boolean::TRUE()
            if $params->{'permissive'};
    }
    my $bugs = $class->_returns_array($client, 'Bug.get', $params, 'bugs');
    my @result;
    for my $bug (@$bugs) {
        push(@result, $class->new(%$bug));
    }
    $client->log('debug', $class . '::get: Got ' . scalar(@result));
    return wantarray ? @result : \@result
}

sub history {
    my($class, $client, $params) = @_;
    return $class->_returns_array($client, 'Bug.history', $params, 'bugs');
}

sub possible_duplicates {
    my($class, $client, $params) = @_;
    my $bugs = $class->_returns_array($client, 'Bug.possible_duplicates', $params, 'bugs');
    my @result;
    for my $bug (@$bugs) {
        push(@result, $class->new(%$bug));
    }
    $client->log('debug', $class . '::possible_duplicates: Got ' . scalar(@result));
    return wantarray ? @result : \@result
}

sub search {
    my($class, $client, $params) = @_;
    my $bugs = $class->_returns_array($client, 'Bug.search', $params, 'bugs');
    my @result;
    for my $bug (@$bugs) {
        push(@result, $class->new(%$bug));
    }
    $client->log('debug', $class . '::search: Found ' . join(',',@result));
    return wantarray ? @result : \@result
}

sub create {
    my($class, $client, $params) = @_;
    return $class->_create($client, 'Bug.create', $params);
}

sub update {
    my($class, $client, $params) = @_;
    return $class->_returns_array($client, 'Bug.update', $params, 'bugs');

}

sub update_see_also {
    my($class, $client, $params) = @_;
    $client->log('debug', $class . '::update_see_also: Updating See-Also');
    my $result = $class->api_call($client, 'Bug.update_see_also', $params);
    my $changes = $result->{'changes'};
    if (!$changes || 'HASH' ne ref($changes)) {
        $class->error($client, 'Invalid reply by server, expected hash of changed bug details.');
    }
    $client->log('debug', $class . '::update_see_also: Updated stuff');
    return wantarray ? %$changes : $changes
}

sub update_tags {
    my($class, $client, $params) = @_;
    $client->log('debug', $class . '::update_tags: Updating Tags');
    my $result = $class->api_call($client, 'Bug.update_tags', $params);
    my $changes = $result->{'changes'};
    if (!$changes || 'HASH' ne ref($changes)) {
        $class->error($client, 'Invalid reply by server, expected hash of changed bug details.');
    }
    $client->log('debug', $class . '::update_tags: Updated stuff');
    return wantarray ? %$changes : $changes
}

## methods

sub id {
    my $self = shift;
    if (@_) {
        $self->{'id'} = shift;
    }
    else {
        return $self->{'id'}
    }
}

sub alias {
    my $self = shift;
    if (@_) {
        my $alias = shift;
        if (ref $alias eq 'ARRAY' && @$a) {
            $self->{'alias'} = $alias->[0];
        }
        if (not ref $alias) {
            $self->{'alias'} = $alias;
        }
        # silently ignore anything else
    }
    else {

        return '' unless defined $self->{'alias'};

        # long form so its clear what is going on.
        if (ref $self->{'alias'}) {
            if (ref $self->{'alias'} eq 'ARRAY'
                and @{$self->{'alias'}}) {
                return $self->{'alias'}->[0];
            }
            return ''
        }

        # fall back
        return $self->{'alias'}
    }
}

sub assigned_to {
    my $self = shift;
    if (@_) {
        $self->{'assigned_to'} = shift;
    }
    else {
        return $self->{'assigned_to'}



( run in 0.685 second using v1.01-cache-2.11-cpan-39bf76dae61 )