File Coverage

blib/lib/Net/Azure/NotificationHubs/Request.pm
Criterion Covered Total %
statement 35 36 97.2
branch 8 10 80.0
condition 2 2 100.0
subroutine 9 9 100.0
pod 2 3 66.6
total 56 60 93.3


line stmt bran cond sub pod time code
1             package Net::Azure::NotificationHubs::Request;
2 6     6   103509 use strict;
  6         12  
  6         246  
3 6     6   30 use warnings;
  6         10  
  6         352  
4            
5 6     6   3259 use Net::Azure::NotificationHubs::Response;
  6         28  
  6         242  
6 6     6   59 use Carp;
  6         12  
  6         436  
7 6     6   496 use URI;
  6         5682  
  6         305  
8            
9             use Class::Accessor::Lite (
10 6         42 new => 0,
11             rw => [qw[agent]],
12             ro => [qw[method uri headers content]],
13 6     6   38 );
  6         10  
14              
15             sub new {
16 6     6 1 201510 my ($class, $method, $uri, $headers, $content) = @_;
17 6 100 100     57 bless {
18             method => $method,
19             uri => ref($uri) =~ /\AURI::/ ? $uri : URI->new($uri),
20             headers => $headers || {},
21             content => $content,
22             }, $class;
23             }
24              
25             sub header {
26 16     16 0 10281 my ($self, $key, $value) = @_;
27 16 50       50 return $self->{headers} if !$key;
28 16 100       38 if (defined $value) {
29 4         9 $self->{headers}{$key} = $value;
30             }
31 16         78 return $self->{headers}{$key};
32             }
33            
34             sub do {
35 2     2 1 2137 my $self = shift;
36 2         11 my $options = {headers => $self->headers};
37 2 50       19 if ($self->content) {
38 0         0 $options->{content} = $self->content;
39             }
40              
41 2         16 my $res = $self->agent->request($self->method, $self->uri, $options);
42 2         76 my $status = delete $res->{status};
43 2         4 my $reason = delete $res->{reason};
44 2         4 my $headers = delete $res->{headers};
45 2         10 my $content = delete $res->{content};
46              
47 2 100       37 croak "$status $reason" if !$res->{success};
48              
49             Net::Azure::NotificationHubs::Response->new(
50             $status, $reason, $headers, $content, $res->{success}
51 1         7 );
52             }
53            
54             1;
55              
56             =encoding utf-8
57              
58             =head1 NAME
59              
60             Net::Azure::NotificationHubs::Request - A Request Class for Net::Azure::NotificationHubs
61              
62             =head1 SYNOPSIS
63              
64             use Net::Azure::NotificationHubs::Request;
65             use HTTP::Tiny;
66             my $req = Net::Azure::NotificationHubs::Request->new(GET => 'http://...');
67             $req->agent(HTTP::Tiny->new);
68             my $res = $req->do;
69              
70             =head1 DESCRIPTION
71              
72             Net::Azure::NotificationHubs::Request is a request class for Net::Azure::NotificationHubs.
73              
74             =head1 METHODS
75              
76             =head2 new
77              
78             A constructor method.
79              
80             =head2 agent
81              
82             my $agent = HTTP::Tiny->new(...);
83             $req->agent($agent);
84              
85             An accessor for setting/getting a HTTP::Tiny object
86              
87             =head2 do
88              
89             my $res = $req->do;
90              
91             Do itself as http/https request with agent. Then returns a response object.
92              
93             =head1 LICENSE
94              
95             Copyright (C) ytnobody.
96              
97             This library is free software; you can redistribute it and/or modify
98             it under the same terms as Perl itself.
99              
100             =head1 AUTHOR
101              
102             ytnobody Eytnobody@gmail.comE
103              
104             =cut