API-ReviewBoard

 view release on metacpan or  search on metacpan

ReviewBoard.pm  view on Meta::CPAN


my $reviewsbydate = $rb->getOutgoingReviewsCountByDate(user => 'users', startdate => '2011-03-01', enddate => '2011-03-30');
print "No of outgoing Review Requests by user 'users' during time interval:\n", $reviewsbydate, "\n\n";

my $reviewsbystatus = $rb->getOutgoingReviewsCountByStatus(user => 'users', status => 'submitted');
print "No of outgoing Review Requests by user 'users' in state submitted:\n", $reviewsbystatus, "\n\n";

my $incomingreviews = $rb->getIncomingReviewsCount(user => 'users');
print "No of incoming review requests made to user:\n", $incomingreviews, "\n\n";

=head1 DESCRIPTION

C<API::ReviewBoard> provides an interface to work with the exported ReviewBoard 2.0 APIs.

You can choose to either subclass this module, and thus using its
accessors on your own module, or to store an C<API::ReviewBoard>
object inside your own object, and access the accessors from there.
See the C<SYNOPSIS> for examples.

=head1 METHODS

=head2 my $rb = API::ReviewBoard->new(  hostedurl => 'http://reviewboard.company.com', 
                username => 'user', 
                password => 'passwd' );
Creates a new API::ReviewBoard object. 
=cut

sub new {
	my $class = shift;
	my %args = @_;
	my $self;
	%args  = validate(
        @_,
          {  
		hostedurl  => { type => SCALAR, optional => 0 },
		username  => { type => SCALAR, optional => 0 },
		password  => { type => SCALAR, optional => 0 },
	  }
	);

        $self->{_owner} = $$;
        $self->{_hostedurl} = $args{hostedurl};
	$self->{_username} = $args{username};
	$self->{_password} = $args{password};

        $self->{_useragent} = LWP::UserAgent->new;
        $self->{_cookie_jar} = HTTP::Cookies->new(file => "lwpcookies.txt", autosave => 1);

        # post request to login
        my $link = $self->{_hostedurl}.'api/json/accounts/login/';
        my $request = new HTTP::Request('POST',$link);

        my $content = 'username='.$self->{_username}.'&password='.$self->{_password};
        $request->content($content);
        my $response = $self->{_useragent}->simple_request($request);

        # extract cookie from response header
        $self->{_cookie_jar}->extract_cookies($response);


        bless $self,$class;
        return $self;

}

=head2 $rb->getReviewBoardLink(changenum  => '112345');
Gets the review board link for a ACTIVE change request number.
=cut

sub getReviewBoardLink {
	my $self = shift;
	my %args  = validate(
		@_,
		{  changenum  => { type => SCALAR, optional => 0 },
		}
	);
	$self->{_changenum} = $args{changenum};
        
	# get request to get review number based on change number
	my $changenumlink =  $self->{_hostedurl}.'/api/review-requests/?changenum='.$self->{_changenum};
	my $request = new HTTP::Request('GET', $changenumlink);
        $self->{_cookie_jar}->add_cookie_header($request);
        my $response = $self->{_useragent}->simple_request($request);
        my $xml = $response->as_string;
        
        $xml=~ m/.*"id": (\d+),.*/;
        my $reviewnum = $1;
        
        my $reviewlink =  $self->{_hostedurl}.'/r/'.$reviewnum;

        return $reviewlink;
}


=head2 $rb->getReviewDescription(changenum  => '112345');
The new review request description from ACTIVE change request.
=cut

sub getReviewDescription {
        my $self = shift;
        my %args  = validate(
                @_,
                {  changenum  => { type => SCALAR, optional => 0 },
                }
        );
        $self->{_changenum} = $args{changenum};


        # get request to get review number based on change number
        my $changenumlink =  $self->{_hostedurl}.'/api/review-requests/?changenum='.$self->{_changenum};
        my $request = new HTTP::Request('GET', $changenumlink);
        $self->{_cookie_jar}->add_cookie_header($request);
        my $response = $self->{_useragent}->simple_request($request);
        my $xml = $response->as_string;

        $xml =~ m/.*"description": "(.*)", "links".*/;
        my $description = $1;
        $description =~ s/(\\n)+/\n/g;

	return ($description);        
}



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