File Coverage

blib/lib/Apertur/SDK.pm
Criterion Covered Total %
statement 61 61 100.0
branch 6 6 100.0
condition 8 14 57.1
subroutine 25 25 100.0
pod 10 11 90.9
total 110 117 94.0


line stmt bran cond sub pod time code
1             package Apertur::SDK;
2              
3 1     1   131103 use strict;
  1         2  
  1         30  
4 1     1   3 use warnings;
  1         3  
  1         58  
5              
6             our $VERSION = '0.02';
7              
8 1     1   468 use Apertur::SDK::HTTPClient;
  1         4  
  1         43  
9 1     1   631 use Apertur::SDK::Resource::Sessions;
  1         4  
  1         49  
10 1     1   718 use Apertur::SDK::Resource::Upload;
  1         4  
  1         42  
11 1     1   738 use Apertur::SDK::Resource::Uploads;
  1         3  
  1         37  
12 1     1   739 use Apertur::SDK::Resource::Polling;
  1         4  
  1         45  
13 1     1   664 use Apertur::SDK::Resource::Destinations;
  1         3  
  1         34  
14 1     1   465 use Apertur::SDK::Resource::Keys;
  1         2  
  1         26  
15 1     1   604 use Apertur::SDK::Resource::Webhooks;
  1         2  
  1         28  
16 1     1   417 use Apertur::SDK::Resource::Encryption;
  1         4  
  1         39  
17 1     1   618 use Apertur::SDK::Resource::Stats;
  1         3  
  1         56  
18              
19 1     1   7 use constant DEFAULT_BASE_URL => 'https://api.aptr.ca';
  1         2  
  1         126  
20 1     1   7 use constant SANDBOX_BASE_URL => 'https://sandbox.api.aptr.ca';
  1         2  
  1         590  
21              
22             sub new {
23 4     4 1 12005 my ($class, %args) = @_;
24              
25             die "Either api_key or oauth_token must be provided\n"
26 4 100 100     28 unless $args{api_key} || $args{oauth_token};
27              
28             # Resolve environment from key prefix or explicit config
29 3   66     12 my $token = $args{api_key} // $args{oauth_token} // '';
      50        
30 3 100       11 my $detected_env = ($token =~ /^aptr_test_/) ? 'test' : 'live';
31 3   33     10 my $env = $args{env} // $detected_env;
32              
33             # Auto-select sandbox URL for test keys unless base_url is explicitly set
34 3 100       8 my $default_url = $env eq 'test' ? SANDBOX_BASE_URL : DEFAULT_BASE_URL;
35 3   33     8 my $base_url = $args{base_url} // $default_url;
36              
37             my $http = Apertur::SDK::HTTPClient->new(
38             base_url => $base_url,
39             api_key => $args{api_key},
40             oauth_token => $args{oauth_token},
41 3         18 );
42              
43 3         21 return bless {
44             env => $env,
45             _http => $http,
46             sessions => Apertur::SDK::Resource::Sessions->new(http => $http),
47             upload => Apertur::SDK::Resource::Upload->new(http => $http),
48             uploads => Apertur::SDK::Resource::Uploads->new(http => $http),
49             polling => Apertur::SDK::Resource::Polling->new(http => $http),
50             destinations => Apertur::SDK::Resource::Destinations->new(http => $http),
51             keys => Apertur::SDK::Resource::Keys->new(http => $http),
52             webhooks => Apertur::SDK::Resource::Webhooks->new(http => $http),
53             encryption => Apertur::SDK::Resource::Encryption->new(http => $http),
54             stats => Apertur::SDK::Resource::Stats->new(http => $http),
55             }, $class;
56             }
57              
58 3     3 0 840 sub env { return $_[0]->{env} }
59 1     1 1 6 sub sessions { return $_[0]->{sessions} }
60 1     1 1 6 sub upload { return $_[0]->{upload} }
61 1     1 1 6 sub uploads { return $_[0]->{uploads} }
62 1     1 1 5 sub polling { return $_[0]->{polling} }
63 1     1 1 78 sub destinations { return $_[0]->{destinations} }
64 1     1 1 5 sub keys { return $_[0]->{keys} }
65 1     1 1 6 sub webhooks { return $_[0]->{webhooks} }
66 1     1 1 5 sub encryption { return $_[0]->{encryption} }
67 1     1 1 6 sub stats { return $_[0]->{stats} }
68              
69             1;
70              
71             __END__