File Coverage

lib/Net/API/Stripe/Connect/Person.pm
Criterion Covered Total %
statement 34 274 12.4
branch 0 250 0.0
condition 0 71 0.0
subroutine 12 48 25.0
pod 32 32 100.0
total 78 675 11.5


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Stripe API - ~/lib/Net/API/Stripe/Connect/Person.pm
3             ## Version v0.201.0
4             ## Copyright(c) 2020 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest <jack@deguest.jp>
6             ## Created 2019/11/02
7             ## Modified 2022/10/29
8             ##
9             ##----------------------------------------------------------------------------
10             BEGIN
11             {
12             use strict;
13 2     2   25424573 use warnings;
  2         19  
  2         63  
14 2     2   11 use parent qw( Net::API::Stripe::Generic );
  2         4  
  2         62  
15 2     2   10 use vars qw( $VERSION );
  2         3  
  2         12  
16 2     2   143 use DateTime;
  2         6  
  2         102  
17 2     2   13 use DateTime::Format::Strptime;
  2         5  
  2         69  
18 2     2   14 use Nice::Try;
  2         4  
  2         26  
19 2     2   104 our( $VERSION ) = 'v0.201.0';
  2         4  
  2         31  
20 2     2   555524 };
21              
22             use strict;
23 2     2   22 use warnings;
  2         6  
  2         60  
24 2     2   12  
  2         5  
  2         2553  
25              
26 0     0 1    
27              
28 0     0 1    
29              
30 0     0 1    
31              
32 0     0 1    
33             {
34 0     0 1   my $self = shift( @_ );
35             if( @_ )
36 0     0 1   {
37             ## There may be a hash provided with undefined values for each of the properties, so we need to check that
38 0     0 1   my $ref = shift( @_ );
39             my $dt;
40 0     0 1   if( $self->_is_object( $ref ) && $ref->isa( 'DateTime' ) )
41             {
42             $dt = $ref;
43             }
44 0     0 1   elsif( $self->_is_hash( $ref ) )
45 0 0         {
46             return if( !length( $ref->{year} ) && !length( $ref->{month} ) && !length( $ref->{day} ) );
47            
48 0           foreach my $k ( qw( year month day ) )
49 0           {
50 0 0 0       return( $self->error( "Hash provided for person date of birth is missing the $k property" ) ) if( !$ref->{ $k } );
    0          
51             }
52 0           @$ref{ qw( hour minute second ) } = ( 0, 0, 0 );
53             try
54             {
55             $dt = DateTime->new( %$ref );
56 0 0 0       }
      0        
57             catch( $e )
58 0           {
59             return( $self->error( "An error occurred while trying to create a datetime object from this person's date of birth (year = '$ref->{year}', month = '$ref->{month}', day = '$ref->{day}'." ) );
60 0 0         }
61             }
62 0          
63 0 0 0       my $tz;
  0            
  0            
  0            
  0            
  0            
  0            
  0            
64 0     0     try
65 0           {
66             $tz = DateTime::TimeZone->new( name => 'local' );
67 0 0 0       }
  0 0 0        
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
68 0     0     catch( $e )
69 0           {
70 2 0 0 2   18 $tz = DateTime::TimeZone->new( name => 'UTC' );
  2 0 0     12  
  2 0 0     1817  
  0 0 0        
  0 0 0        
  0 0 0        
  0 0 0        
  0 0 0        
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
71             }
72            
73 0           my $fmt = DateTime::Format::Strptime->new(
74 0 0 0       pattern => '%Y-%m-%d',
  0            
  0            
  0            
  0            
  0            
  0            
  0            
75 0     0     locale => 'en_GB',
76 0           time_zone => $tz->name,
77             );
78 0 0 0       $dt->set_formatter( $fmt );
  0 0 0        
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
79 0     0     $self->{dob} = $dt;
80 0           }
81 2 0 0 2   16 return( $self->{dob} );
  2 0 0     5  
  2 0 0     1389  
  0 0 0        
  0 0 0        
  0 0 0        
  0 0 0        
  0 0 0        
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0 0          
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
  0            
82             }
83 0            
84              
85              
86              
87              
88 0            
89 0            
90              
91 0            
92              
93              
94 0     0 1    
95              
96 0     0 1    
97              
98 0     0 1    
99              
100 0     0 1    
101              
102 0     0 1    
103              
104 0     0 1    
105              
106 0     0 1    
107             1;
108 0     0 1    
109              
110 0     0 1   =encoding utf8
111              
112 0     0 1   =head1 NAME
113              
114 0     0 1   Net::API::Stripe::Connect::Person - A Stripe Person Object
115              
116 0     0 1   =head1 SYNOPSIS
117              
118 0     0 1   my $pers = $stripe->person({
119             account => $account_object,
120 0     0 1   address => $address_object,
121             address_kana => $address_kana_object,
122 0     0 1   address_kanji => $address_kanji_object,
123             # or:
124 0     0 1   # dob => DateTime->new( year => 1985, month => 8, day => 15 )
125             dob =>
126 0     0 1   {
127             day => 15
128 0     0 1   month => 8,
129             year => 1985,
130 0     0 1   },
131             email => 'nadeshiko.yamato@example.com',
132 0     0 1   first_name => 'Nadeshiko',
133             last_name => 'Yamato',
134 0     0 1   first_name_kana => 'なでしこ',
135             last_name_kana => 'やまと',
136 0     0 1   first_name_kanji => '撫子',
137             last_name_kanji => '大和',
138 0     0 1   gender => 'female',
139             metadata => { transaction_id => 123, customer_id => 456 },
140             phone => '+81-(0)90-1234-5678',
141             });
142              
143             See documentation in L<Net::API::Stripe> for example to make api calls to Stripe to create those objects.
144              
145             =head1 VERSION
146              
147             v0.201.0
148              
149             =head1 DESCRIPTION
150              
151             This is an object representing a person associated with a Stripe account.
152              
153             =head1 CONSTRUCTOR
154              
155             =head2 new( %ARG )
156              
157             Creates a new L<Net::API::Stripe::Connect::Person> object.
158             It may also take an hash like arguments, that also are method of the same name.
159              
160             =head1 METHODS
161              
162             =head2 id string
163              
164             Unique identifier for the object.
165              
166             =head2 object string, value is "person"
167              
168             String representing the object’s type. Objects of the same type share the same value.
169              
170             =head2 account string
171              
172             The account the person is associated with. If expanded (currently not implemented in Stripe API), this will be a L<Net::API::Stripe::Connect::Account> object.
173              
174             =head2 additional string_array
175              
176             Additional fields which are only required for some users.
177              
178             =head2 address hash
179              
180             The person’s address.
181              
182             This is L<Net::API::Stripe::Address> object.
183              
184             =head2 address_kana hash
185              
186             The Kana variation of the person’s address (Japan only).
187              
188             This is L<Net::API::Stripe::Address> object.
189              
190             =head2 address_kanji hash
191              
192             The Kanji variation of the person’s address (Japan only).
193              
194             This is L<Net::API::Stripe::Address> object.
195              
196             =head2 created timestamp
197              
198             Time at which the object was created. Measured in seconds since the Unix epoch.
199              
200             =head2 dob L<DateTime> object or hash
201              
202             The person’s date of birth.
203              
204             This returns a C<DateTime> object. It can take either a L<DateTime> object or an hash with the following properties:
205              
206             =over 4
207              
208             =item I<day> positive integer
209              
210             The day of birth, between 1 and 31.
211              
212             =item I<month> positive integer
213              
214             The month of birth, between 1 and 12.
215              
216             =item I<year> positive integer
217              
218             The four-digit year of birth.
219              
220             =back
221              
222             =head2 email string
223              
224             The person’s email address.
225              
226             =head2 first_name string
227              
228             The person’s first name.
229              
230             =head2 first_name_kana string
231              
232             The Kana variation of the person’s first name (Japan only).
233              
234             =head2 first_name_kanji string
235              
236             The Kanji variation of the person’s first name (Japan only).
237              
238             =head2 full_name_aliases string_array
239              
240             A list of alternate names or aliases that the individual is known by.
241              
242             =head2 future_requirements object
243              
244             Information about future requirements for the individual, including what information needs to be collected, and by when.
245              
246             This is a L<Net::API::Stripe::Connect::Account::Requirements> object.
247              
248             =head2 gender string
249              
250             The person’s gender (International regulations require either “male” or “female”).
251              
252             =head2 id_number_provided boolean
253              
254             Whether the person’s id_number was provided.
255              
256             =head2 id_number_secondary_provided boolean
257              
258             Whether the individual's personal secondary ID number was provided.
259              
260             =head2 last_name string
261              
262             The person’s last name.
263              
264             =head2 last_name_kana string
265              
266             The Kana variation of the person’s last name (Japan only).
267              
268             =head2 last_name_kanji string
269              
270             The Kanji variation of the person’s last name (Japan only).
271              
272             =head2 maiden_name string
273              
274             The person’s maiden name.
275              
276             =head2 metadata hash
277              
278             Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
279              
280             =head2 minimum string_array
281              
282             Fields which every account must eventually provide.
283              
284             =head2 nationality string
285              
286             The country where the person is a national.
287              
288             =head2 phone string
289              
290             The person’s phone number.
291              
292             =head2 political_exposure string
293              
294             Indicates if the person or any of their representatives, family members, or other closely related persons, declares that they hold or have held an important public job or function, in any jurisdiction.
295              
296             =head2 registered_address object
297              
298             The individual's registered address.
299              
300             This is a L<Net::API::Stripe::Address> object.
301              
302             =head2 relationship hash
303              
304             Describes the person’s relationship to the account.
305              
306             This is a L<Net::API::Stripe::Connect::Account::Relationship> object.
307              
308             =head2 requirements hash
309              
310             Information about the requirements for this person, including what information needs to be collected, and by when.
311              
312             This is a L<Net::API::Stripe::Connect::Account::Requirements> object.
313              
314             =head2 ssn_last_4_provided boolean
315              
316             Whether the last 4 digits of this person’s SSN have been provided.
317              
318             =head2 verification hash
319              
320             The persons’s verification status.
321              
322             This is a L<Net::API::Stripe::Connect::Account::Verification> object.
323              
324             =head1 API SAMPLE
325              
326             {
327             "id": "person_fake123456789",
328             "object": "person",
329             "account": "acct_fake123456789",
330             "created": 1571602397,
331             "dob": {
332             "day": null,
333             "month": null,
334             "year": null
335             },
336             "first_name_kana": null,
337             "first_name_kanji": null,
338             "gender": null,
339             "last_name_kana": null,
340             "last_name_kanji": null,
341             "metadata": {},
342             "relationship": {
343             "director": false,
344             "executive": false,
345             "owner": false,
346             "percent_ownership": null,
347             "representative": false,
348             "title": null
349             },
350             "requirements": {
351             "currently_due": [],
352             "eventually_due": [],
353             "past_due": [],
354             "pending_verification": []
355             },
356             "verification": {
357             "additional_document": {
358             "back": null,
359             "details": null,
360             "details_code": null,
361             "front": null
362             },
363             "details": null,
364             "details_code": null,
365             "document": {
366             "back": null,
367             "details": null,
368             "details_code": null,
369             "front": null
370             },
371             "status": "unverified"
372             }
373             }
374              
375             =head1 HISTORY
376              
377             =head2 v0.1
378              
379             Initial version
380              
381             =head2 v0.2
382              
383             Update the method B<dob> to accept L<DateTime> objects
384              
385             =head1 AUTHOR
386              
387             Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
388              
389             =head1 SEE ALSO
390              
391             Stripe API documentation:
392              
393             L<https://stripe.com/docs/api/persons/object>, L<https://stripe.com/docs/connect/identity-verification-api#person-information>
394              
395             =head1 COPYRIGHT & LICENSE
396              
397             Copyright (c) 2020-2020 DEGUEST Pte. Ltd.
398              
399             You can use, copy, modify and redistribute this package and associated
400             files under the same terms as Perl itself.
401              
402             =cut