package MinJIRA; #------------------------------------------------------------------------------ # Copyright (c) Perforce Software, Inc., 2007-2014. All rights reserved # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1 Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PERFORCE # SOFTWARE, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. #------------------------------------------------------------------------------ =head1 NAME MinJIRA.pm - Minimal JIRA interface module. =head1 VERSION 1.1.0 =head1 DESCRIPTION Provides a minimal interface to JIRA via the JIRA REST API. =head1 PUBLIC DATA None =head1 PUBLIC FUNCTIONS =cut require Exporter; use strict; use JSON; use JIRA::Client::Automated; use Msg; # The next line avoids problems with 'use strict'. use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # Initialization processing occurs in the BEGIN block. BEGIN { # Keep $VERSION value the same as at the top of this file. $VERSION = "1.1.0"; } # Package interface standards. By default, any export can be blocked. @ISA = qw(Exporter); # Prototypes for public functions. sub GetIssueStatus($$$$;); #============================================================================== # Internal Functions #============================================================================== #============================================================================== # Public Functions #============================================================================== #------------------------------------------------------------------------------ =head2 GetIssueStatus() GetIssueStatus ($I, $I, $I, $I;) =head3 Description-GetIssueStatus Determines if the MinJIRA is Mac. =head3 Parameters-GetIssueStatus =over 4 =item * $I - Self-explanatory. =item * $I URL for the JIRA server. =item * $I JIRA user for accessing the REST API. =item * $I Password for the JIRA user. =back =head3 Returns-GetIssueStatus Returns the JIRA issue status string on success. =cut #------------------------------------------------------------------------------ sub GetIssueStatus ($$$$;) { $Msg->trace("CALL MinJIRA::GetIssueStatus(@_)"); my ($issueKey, $jurl, $juser, $jpwd) = @_; my $jira; my %issueHash; my $issueHashRef; my %fieldsHash; my $fieldsHashRef; my %statusHash; my $statusHashRef; my $issueStatus = "Undefined_JIRA_Issue_Status"; if ($issueKey =~ /^\w+-\d+/) { $Msg->trace ("This issue key looks valid: [$issueKey]."); } else { $Msg->error ("This issue key does NOT look valid: [$issueKey]."); return $issueStatus; } $jira = JIRA::Client::Automated->new($jurl, $juser, $jpwd); $issueHashRef = $jira->get_issue ($issueKey); %issueHash = %$issueHashRef; $Msg->debug ("JIRA Issue top-level fileds:"); foreach (keys %issueHash) { $Msg->trace ("I: [$_]: [$issueHash{$_}]."); } $fieldsHashRef = $issueHash{'fields'}; %fieldsHash = %$fieldsHashRef; foreach (keys %fieldsHash) { $Msg->trace ("F: [$_]"); } $statusHashRef = $fieldsHash{'status'}; %statusHash = %$statusHashRef; foreach (keys %statusHash) { $Msg->trace ("S: [$_]"); } $issueStatus = $statusHash{'name'}; return $issueStatus; } # Return package load success. 1;