File Coverage

lib/API/ParallelsWPB.pm
Criterion Covered Total %
statement 49 64 76.5
branch 7 16 43.7
condition 11 18 61.1
subroutine 11 12 91.6
pod 2 2 100.0
total 80 112 71.4


line stmt bran cond sub pod time code
1             package API::ParallelsWPB;
2              
3 4     4   150966 use strict;
  4         10  
  4         165  
4 4     4   24 use warnings;
  4         8  
  4         208  
5              
6 4     4   4590 use LWP::UserAgent;
  4         199318  
  4         152  
7 4     4   43 use HTTP::Request;
  4         9  
  4         96  
8 4     4   8034 use JSON::XS;
  4         20950  
  4         313  
9 4     4   45 use Carp;
  4         9  
  4         238  
10 4     4   2226 use API::ParallelsWPB::Response;
  4         8  
  4         111  
11              
12 4     4   24 use base qw/ API::ParallelsWPB::Requests /;
  4         6  
  4         2893  
13              
14             # ABSTRACT: client for Parallels Presence Builder API
15              
16             our $VERSION = '0.03'; # VERSION
17             our $AUTHORITY = 'cpan:IMAGO'; # AUTHORITY
18              
19              
20             # Constuctor
21             sub new {
22 3     3 1 2859 my $class = shift;
23              
24 3   33     25 $class = ref $class || $class;
25              
26 3         31 my $self = {
27             username => '',
28             password => '',
29             server => '',
30             api_version => '5.3',
31             debug => 0,
32             timeout => 30,
33             (@_)
34             };
35              
36 3 50       9 map { confess "Field '" . $_ . "' required!" unless $self->{ $_ } } qw/username password server/;
  9         80  
37              
38 3         15 return bless $self, $class;
39             }
40              
41             # "free" request. Basic method for requests
42              
43              
44              
45             sub f_request {
46 23     23 1 11812 my ( $self, $url_array, $data ) = @_;
47              
48 23 50       169 confess "$url_array is not array!" unless ( ref $url_array eq 'ARRAY' );
49              
50 23   50     75 $data->{req_type} ||= 'GET';
51 23         64 $data->{req_type} = uc $data->{req_type};
52              
53             #compile URL
54 23         225 my $url = 'https://' . $self->{server} . '/api/' . $self->{api_version} . '/';
55 23         32 $url .= join( '/', @{ $url_array }) . '/';
  23         79  
56              
57 23         36 my $post_data;
58              
59 23 100 100     136 if ( $data->{req_type} eq 'POST' || $data->{req_type} eq 'PUT' ) {
60 13   100     42 $data->{post_data} ||= {};
61 13 50 66     77 unless ( ref $data->{post_data} eq 'HASH' || ref $data->{post_data} eq 'ARRAY' ) {
62 0         0 confess "parameter post_data must be hashref or arrayref!"
63             }
64 13         50 $post_data = $self->_json->encode($data->{post_data});
65             }
66 23   100     67 $post_data ||= '{}';
67              
68 23         98 my $response = $self->_send_request($data, $url, $post_data);
69 23         132 return $response;
70             }
71              
72             sub _send_request {
73 0     0   0 my ( $self, $data, $url, $post_data ) = @_;
74              
75 0         0 my $ua = LWP::UserAgent->new();
76 0         0 my $req = HTTP::Request->new( $data->{req_type} => $url );
77              
78 0 0 0     0 if ( $data->{req_type} eq 'POST' || $data->{req_type} eq 'PUT' ) {
79 0         0 $req->header( 'content-type' => 'application/json' );
80 0         0 $req->content( $post_data );
81             }
82              
83 0         0 $req->authorization_basic( $self->{username}, $self->{password} );
84 0         0 $ua->ssl_opts( verify_hostname => 0 );
85 0         0 $ua->timeout( $self->{timeout} );
86              
87 0 0       0 warn $req->as_string if ( $self->{debug} );
88              
89 0         0 my $res = $ua->request( $req );
90 0 0       0 warn $res->as_string if ( $self->{debug} );
91              
92 0         0 my $response = API::ParallelsWPB::Response->new( $res );
93 0         0 return $response;
94             }
95              
96             sub _json {
97 13     13   20 my ( $self ) = @_;
98              
99 13 100       60 unless( $self->{_json} ) {
100 3         46 $self->{_json} = JSON::XS->new;
101             }
102 13         146 return $self->{_json};
103             }
104              
105             1;
106              
107             __END__