File Coverage

blib/lib/MooseX/Types/CyberSource.pm
Criterion Covered Total %
statement 33 33 100.0
branch n/a
condition n/a
subroutine 11 11 100.0
pod n/a
total 44 44 100.0


line stmt bran cond sub pod time code
1             package MooseX::Types::CyberSource;
2 16     16   62 use strict;
  16         20  
  16         404  
3 16     16   55 use warnings;
  16         20  
  16         380  
4 16     16   53 use Module::Runtime 'use_module';
  16         17  
  16         93  
5 16     16   534 use namespace::autoclean;
  16         18  
  16         102  
6              
7             our $VERSION = '0.010007'; # VERSION
8              
9 16         166 use MooseX::Types -declare => [ qw(
10             AVSResult
11             ElectronicVerificationResult
12             CardTypeCode
13             CountryCode
14             CvIndicator
15             CvResults
16             DCCIndicator
17              
18             Decision
19             CommerceIndicator
20             Items
21              
22             Item
23             Card
24             PurchaseTotals
25             Service
26             AuthService
27             AuthReversalService
28             CaptureService
29             CreditService
30             TaxService
31             BillTo
32             BusinessRules
33              
34             ResPurchaseTotals
35             AuthReply
36             TaxReply
37             DCCReply
38             Reply
39              
40             TaxReplyItems
41             TaxReplyItem
42              
43             RequestID
44              
45             ExpirationDate
46              
47             DateTimeFromW3C
48              
49             Client
50              
51             _VarcharOne
52             _VarcharSeven
53             _VarcharTen
54             _VarcharTwenty
55             _VarcharFifty
56             _VarcharSixty
57 16     16   6516 ) ];
  16         252359  
58              
59 16     16   205502 use MooseX::Types::Common::Numeric qw( PositiveOrZeroNum );
  16         655809  
  16         91  
60 16     16   32734 use MooseX::Types::Common::String qw( NonEmptySimpleStr SimpleStr );
  16         722763  
  16         99  
61 16     16   31479 use MooseX::Types::Moose qw( Int Num Str HashRef ArrayRef );
  16         29  
  16         89  
62 16     16   63033 use MooseX::Types::Locale::Country qw( Alpha2Country Alpha3Country CountryName );
  16         642772  
  16         92  
63 16     16   32346 use MooseX::Types::DateTime qw( );
  16         1731738  
  16         705  
64 16     16   9199 use MooseX::Types::DateTime::W3C qw( DateTimeW3C );
  16         155958  
  16         68  
65              
66             my $varchar_message = 'string is empty or longer than ';
67              
68             enum Decision, [ qw( ACCEPT REJECT ERROR REVIEW ) ];
69              
70             enum CommerceIndicator, [ qw(
71             aesk
72             aesk_attempted
73             install
74             install_internet
75             internet
76             js
77             js_attempted
78             moto
79             moto_cc
80             recurring
81             recurring_internet
82             retail
83             spa
84             spa_failure
85             vbv
86             vbv_attempted
87             vbv_failure
88             ) ];
89              
90             # can't find a standard on this, so I assume these are a cybersource thing
91             enum CardTypeCode, [ qw(
92             001
93             002
94             003
95             004
96             005
97             006
98             007
99             014
100             021
101             024
102             031
103             033
104             034
105             035
106             036
107             037
108             039
109             040
110             042
111             043
112             ) ];
113              
114             enum CvIndicator, [ qw( 0 1 2 9 ) ];
115              
116             enum CvResults, [ qw( D I M N P S U X 1 2 3 ),'' ];
117              
118             enum AVSResult, [ qw( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 ) ];
119              
120             enum ElectronicVerificationResult, [ qw( N P R S U Y 2) ];
121              
122             my $prefix = 'Business::CyberSource::';
123             my $req = $prefix . 'RequestPart::';
124             my $res = $prefix . 'ResponsePart::';
125              
126             my $itc = $req . 'Item';
127             my $ptc = $req . 'PurchaseTotals';
128             my $svc = $req . 'Service';
129             my $cdc = $req . 'Card';
130             my $btc = $req . 'BillTo';
131             my $brc = $req . 'BusinessRules';
132             my $azs = $req . 'Service::Auth';
133             my $ars = $req . 'Service::AuthReversal';
134             my $cps = $req . 'Service::Capture';
135             my $cds = $req . 'Service::Credit';
136             my $txs = $req . 'Service::Tax';
137              
138             my $res_pt_c = $res . 'PurchaseTotals';
139             my $res_ar_c = $res . 'AuthReply';
140             my $res_re_c = $res . 'Reply';
141             my $res_dc_c = $res . 'DCCReply';
142             my $res_tr_c = $res . 'TaxReply';
143             my $res_ti_c = $res . 'TaxReply::Item';
144              
145             my $client = 'Business::CyberSource::Client';
146              
147             class_type Item, { class => $itc };
148             class_type PurchaseTotals, { class => $ptc };
149             class_type Service, { class => $svc };
150             class_type Card, { class => $cdc };
151             class_type BillTo, { class => $btc };
152             class_type BusinessRules, { class => $brc };
153             class_type AuthService, { class => $azs };
154             class_type AuthReversalService, { class => $ars };
155             class_type CaptureService, { class => $cps };
156             class_type CreditService, { class => $cds };
157             class_type TaxService, { class => $txs };
158              
159             class_type ResPurchaseTotals, { class => $res_pt_c };
160             class_type AuthReply, { class => $res_ar_c };
161             class_type Reply, { class => $res_re_c };
162             class_type DCCReply, { class => $res_dc_c };
163             class_type TaxReply, { class => $res_tr_c };
164             class_type TaxReplyItem, { class => $res_ti_c };
165              
166             class_type Client, { class => $client };
167              
168             coerce Item, from HashRef, via { use_module( $itc )->new( $_ ) };
169             coerce PurchaseTotals, from HashRef, via { use_module( $ptc )->new( $_ ) };
170             coerce Service, from HashRef, via { use_module( $svc )->new( $_ ) };
171             coerce AuthService, from HashRef, via { use_module( $azs )->new( $_ ) };
172             coerce AuthReversalService, from HashRef, via { use_module( $ars )->new( $_ ) };
173             coerce CaptureService, from HashRef, via { use_module( $cps )->new( $_ ) };
174             coerce CreditService, from HashRef, via { use_module( $cds )->new( $_ ) };
175             coerce TaxService, from HashRef, via { use_module( $txs )->new( $_ ) };
176             coerce Card, from HashRef, via { use_module( $cdc )->new( $_ ) };
177             coerce BillTo, from HashRef, via { use_module( $btc )->new( $_ ) };
178             coerce BusinessRules, from HashRef, via { use_module( $brc )->new( $_ ) };
179             coerce ResPurchaseTotals, from HashRef, via { use_module( $res_pt_c )->new( $_ ) };
180             coerce AuthReply, from HashRef, via { use_module( $res_ar_c )->new( $_ ) };
181             coerce TaxReply, from HashRef, via { use_module( $res_tr_c )->new( $_ ) };
182             coerce DCCReply, from HashRef, via { use_module( $res_dc_c )->new( $_ ) };
183             coerce TaxReplyItem, from HashRef, via { use_module( $res_ti_c )->new( $_ ) };
184             coerce Reply, from HashRef, via { use_module( $res_re_c )->new( $_ ) };
185             coerce Client, from HashRef, via { use_module( $client )->new( $_ ) };
186              
187             subtype CountryCode, as Alpha2Country;
188             subtype ExpirationDate, as MooseX::Types::DateTime::DateTime;
189             subtype DateTimeFromW3C, as MooseX::Types::DateTime::DateTime;
190             subtype TaxReplyItems, as ArrayRef[TaxReplyItem];
191             subtype Items, as ArrayRef[Item];
192              
193              
194             coerce CountryCode,
195             from Alpha3Country,
196             via {
197             use_module('Locale::Code');
198              
199             return uc Locale::Code::country_code2code( $_ ,
200             Locale::Code::LOCALE_CODE_ALPHA_3(),
201             Locale::Code::LOCALE_CODE_ALPHA_2(),
202             );
203             }
204             ;
205              
206             coerce CountryCode,
207             from CountryName,
208             via {
209             use_module('Locale::Code');
210             return uc Locale::Code::country_code2code( $_ ,
211             Locale::Code::LOCALE_CODE_ALPHA_2(),
212             );
213             };
214              
215             enum DCCIndicator, [ qw( 1 2 3 ) ];
216              
217             coerce ExpirationDate,
218             from HashRef,
219             via {
220             return DateTime->last_day_of_month( %{ $_ } );
221             };
222              
223             subtype RequestID,
224             as NonEmptySimpleStr,
225             where { length $_ <= 29 },
226             message { $varchar_message . '29' }
227             ;
228              
229              
230             coerce TaxReplyItems,
231             from ArrayRef[HashRef],
232             via {
233             my $items = $_;
234              
235             my @items = map { use_module( $res_ti_c )->new( $_ ) } @{ $items };
236             return \@items;
237             };
238              
239             coerce Items,
240             from ArrayRef[HashRef],
241             via {
242             my $items = $_;
243              
244             my @items = map { use_module($itc)->new( $_ ) } @{ $items };
245             return \@items;
246             };
247              
248              
249             coerce DateTimeFromW3C,
250             from DateTimeW3C,
251             via {
252             return use_module('DateTime::Format::W3CDTF')
253             ->new->parse_datetime( $_ );
254             };
255              
256             subtype _VarcharOne,
257             as NonEmptySimpleStr,
258             where { length $_ <= 1 },
259             message { $varchar_message . '1' }
260             ;
261              
262             subtype _VarcharSeven,
263             as NonEmptySimpleStr,
264             where { length $_ <= 7 },
265             message { $varchar_message . '7' }
266             ;
267              
268             subtype _VarcharTen,
269             as SimpleStr,
270             where { length $_ <= 10 },
271             message { $varchar_message . '10' }
272             ;
273              
274             subtype _VarcharTwenty,
275             as NonEmptySimpleStr,
276             where { length $_ <= 20 },
277             message { $varchar_message . '20' }
278             ;
279              
280             subtype _VarcharFifty,
281             as NonEmptySimpleStr,
282             where { length $_ <= 50 },
283             message { $varchar_message . '50' }
284             ;
285              
286             subtype _VarcharSixty,
287             as NonEmptySimpleStr,
288             where { length $_ <= 60 },
289             message { $varchar_message . '60' }
290             ;
291             1;
292              
293             # ABSTRACT: Moose Types specific to CyberSource
294              
295             __END__
296              
297             =pod
298              
299             =encoding UTF-8
300              
301             =head1 NAME
302              
303             MooseX::Types::CyberSource - Moose Types specific to CyberSource
304              
305             =head1 VERSION
306              
307             version 0.010007
308              
309             =head1 SYNOPSIS
310              
311             {
312             package My::CyberSource::Response;
313             use Moose;
314             use MooseX::Types::CyberSource qw( Decision );
315              
316             has decision => (
317             is => 'ro',
318             isa => Decision,
319             );
320             __PACKAGE__->meta->make_immutable;
321             }
322              
323             my $response = My::CyberSource::Response->new({
324             decison => 'ACCEPT'
325             });
326              
327             =head1 DESCRIPTION
328              
329             This module provides CyberSource specific Moose Types.
330              
331             =begin Pod::Coverage
332              
333             LOCALE_CODE_ALPHA_2
334              
335             LOCALE_CODE_ALPHA_3
336              
337             =end Pod::Coverage
338              
339             =head1 TYPES
340              
341             =over
342              
343             =item * C<Client>
344              
345             L<Business::CyberSource::Client>
346              
347             =item * C<Decision>
348              
349             Base Type: C<enum>
350              
351             CyberSource Response Decision
352              
353             =item * C<CardTypeCode>
354              
355             Base Type: C<enum>
356              
357             Numeric codes that specify Card types. Codes denoted with an asterisk* are
358             automatically detected when using
359              
360             =item * C<CommerceIndicator>
361              
362             Base Type: C<enum>
363              
364             Valid strings for for use in in the commerceIndicator field.
365              
366             =item * C<CvResults>
367              
368             Base Type: C<enum>
369              
370             Single character code that defines the result of having sent a CVN. See
371             L<CyberSource's Documentation on Card Verification Results
372             |http://www.cybersource.com/support_center/support_documentation/quick_references/view.php?page_id=421>
373             for more information.
374              
375             =item * C<AVSResults>
376              
377             Base Type: C<enum>
378              
379             Single character code that defines the result of having sent a CVN. See
380             L<CyberSource's Documentation on AVS Results
381             |http://www.cybersource.com/support_center/support_documentation/quick_references/view.php?page_id=423>
382             for more information.
383              
384             =item * C<DCCIndicator>
385              
386             Base Type: C<enum>
387              
388             Single character code that defines the DCC status
389              
390             =over
391              
392             =item * C<1>
393              
394             Converted - DCC is being used.
395              
396             =item * C<2>
397              
398             Non-convertible - DCC cannot be used.
399              
400             =item * C<3>
401              
402             Declined - DCC could be used, but the customer declined it.
403              
404             =back
405              
406             =back
407              
408             =head1 BUGS
409              
410             Please report any bugs or feature requests on the bugtracker website
411             https://github.com/xenoterracide/business-cybersource/issues
412              
413             When submitting a bug or request, please include a test-file or a
414             patch to an existing test-file that illustrates the bug or desired
415             feature.
416              
417             =head1 AUTHOR
418              
419             Caleb Cushing <xenoterracide@gmail.com>
420              
421             =head1 COPYRIGHT AND LICENSE
422              
423             This software is Copyright (c) 2016 by Caleb Cushing <xenoterracide@gmail.com>.
424              
425             This is free software, licensed under:
426              
427             The Artistic License 2.0 (GPL Compatible)
428              
429             =cut