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   146490 use strict;
  1         2  
  1         38  
4 1     1   4 use warnings;
  1         6  
  1         110  
5              
6             our $VERSION = '0.01';
7              
8 1     1   548 use Apertur::SDK::HTTPClient;
  1         3  
  1         33  
9 1     1   580 use Apertur::SDK::Resource::Sessions;
  1         4  
  1         44  
10 1     1   645 use Apertur::SDK::Resource::Upload;
  1         3  
  1         49  
11 1     1   679 use Apertur::SDK::Resource::Uploads;
  1         3  
  1         43  
12 1     1   683 use Apertur::SDK::Resource::Polling;
  1         4  
  1         47  
13 1     1   703 use Apertur::SDK::Resource::Destinations;
  1         3  
  1         51  
14 1     1   732 use Apertur::SDK::Resource::Keys;
  1         4  
  1         49  
15 1     1   662 use Apertur::SDK::Resource::Webhooks;
  1         4  
  1         47  
16 1     1   694 use Apertur::SDK::Resource::Encryption;
  1         4  
  1         48  
17 1     1   633 use Apertur::SDK::Resource::Stats;
  1         4  
  1         46  
18              
19 1     1   7 use constant DEFAULT_BASE_URL => 'https://api.aptr.ca';
  1         2  
  1         119  
20 1     1   6 use constant SANDBOX_BASE_URL => 'https://sandbox.api.aptr.ca';
  1         3  
  1         700  
21              
22             sub new {
23 4     4 1 12733 my ($class, %args) = @_;
24              
25             die "Either api_key or oauth_token must be provided\n"
26 4 100 100     26 unless $args{api_key} || $args{oauth_token};
27              
28             # Resolve environment from key prefix or explicit config
29 3   66     14 my $token = $args{api_key} // $args{oauth_token} // '';
      50        
30 3 100       12 my $detected_env = ($token =~ /^aptr_test_/) ? 'test' : 'live';
31 3   33     14 my $env = $args{env} // $detected_env;
32              
33             # Auto-select sandbox URL for test keys unless base_url is explicitly set
34 3 100       9 my $default_url = $env eq 'test' ? SANDBOX_BASE_URL : DEFAULT_BASE_URL;
35 3   33     9 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         17 );
42              
43 3         20 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 714 sub env { return $_[0]->{env} }
59 1     1 1 6 sub sessions { return $_[0]->{sessions} }
60 1     1 1 5 sub upload { return $_[0]->{upload} }
61 1     1 1 4 sub uploads { return $_[0]->{uploads} }
62 1     1 1 12 sub polling { return $_[0]->{polling} }
63 1     1 1 3 sub destinations { return $_[0]->{destinations} }
64 1     1 1 12 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__