BZ-Client

 view release on metacpan or  search on metacpan

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

    my($class, $client, $params) = @_;
    $client->log('debug', __PACKAGE__ . "::get: Asking for $params");
    my $result = $class->api_call($client, 'Bug.attachments', $params);

    if (my $attachments = $result->{attachments}) {
        $class->error($client,
            'Invalid reply by server, expected hash of attachments.')
                unless ($attachments and 'HASH' eq ref($attachments));
        for my $id (keys %$attachments) {
            $attachments->{$id}->{data} =
                BZ::Client::XMLRPC::base64->new64($attachments->{$id}->{data});
            $attachments->{$id} = __PACKAGE__
                                    ->new( %{$attachments->{$id}} );
        }
    }

    if (my $bugs = $result->{bugs}) {
        $class->error($client,
            'Invalid reply by server, expected array of bugs.')
                unless ($bugs and 'HASH' eq ref($bugs));
        for my $id (keys %$bugs) {
            $bugs->{$id} = [
                map { __PACKAGE__->new( %$_  ) }
                map { $_->{data} = BZ::Client::XMLRPC::base64->new64($_->{data}) if $_->{data}; $_ }
                @{$bugs->{$id}} ];
        }
    }

    $client->log('debug', __PACKAGE__ . '::get: Got ' . %$result);

    return wantarray ? %$result : $result
}

sub add {
    my($class, $client, $params) = @_;
    # $params = { ids => [], file_name => basename($file), content_type => '?', summary=> $filename, data => \$content
    $client->log('debug', __PACKAGE__ . '::add: Attaching a file');
    if ( ref $params eq 'HASH' ) {
        my $filename;
        if ( ! $params->{data}
            and $filename = $params->{file_name}
            and -f $filename ) {
            $params->{data} = do {
                local $/;
                open( my $fh, '<', $filename );
                binmode $fh;
                <$fh>
            };
            $params->{file_name} = basename($params->{file_name});
        }
        $params->{data} = BZ::Client::XMLRPC::base64->new($params->{data})
            if (exists $params->{data} and ref $params->{data} eq '');
    }
    my $result = $class->api_call($client, 'Bug.add_attachment', $params);
    my $ids = $result->{'ids'};
    $class->error($client, 'Invalid reply by server, expected attachment ID.')
        unless $ids;
    return wantarray ? @$ids : $ids
}

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


## rw methods

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

sub data {
    my $self = shift;
    if (@_) {
        my $data = shift;
        $self->{'data'} = ref $data ?
                  $data : BZ::Client::XMLRPC::base64->new($data);
    }
    else {
        return $self->{'data'}
    }
}

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

sub description { goto &summary }

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

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



( run in 2.228 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )