File Coverage

blib/lib/WebService/Simple/Cabinet.pm
Criterion Covered Total %
statement 27 65 41.5
branch 0 14 0.0
condition 0 7 0.0
subroutine 9 11 81.8
pod 0 1 0.0
total 36 98 36.7


line stmt bran cond sub pod time code
1             package WebService::Simple::Cabinet;
2              
3 1     1   4 use strict;
  1         2  
  1         28  
4 1     1   4 use warnings;
  1         2  
  1         42  
5             our $VERSION = '0.01';
6              
7 1     1   4 use Carp;
  1         2  
  1         80  
8 1     1   755 use UNIVERSAL::require;
  1         1381  
  1         8  
9              
10             sub new {
11 0     0 0   my($class, $config, %args) = @_;
12              
13 0 0         croak "usage: ${class}->new(\$config[, args...])" unless $config;
14 0 0         unless (ref $config eq 'HASH') {
15             # XXX ただの文字列だったら、どっかからYAMLかDSL定義を読み込んでconfigデータを作る
16             }
17              
18 0   0       $config->{global} ||= { params => {} };
19 0   0       $config->{method} ||= [];
20              
21 0 0         croak 'package is required.' unless $config->{global}->{package};
22 0           my $api_pkg = sprintf '%s::Api::%s',$class, $config->{global}->{package};
23 0           my $base_pkg = "$class\::Api";
24 0 0         $base_pkg->require or die $@;
25              
26 1     1   118 no strict 'refs';
  1         2  
  1         58  
27 0 0         unless (@{"$api_pkg\::ISA"}) {
  0            
28 0           push @{"$api_pkg\::ISA"}, "$class\::Api";
  0            
29 1     1   4 use strict;
  1         2  
  1         82  
30              
31 0           for my $data (@{ $config->{method} }) {
  0            
32 0           my %default_params = ();
33 0           my @input_args = ();
34 0           for my $param (keys %{ $data->{params} }) {
  0            
35 0 0         if (my $value = $data->{params}->{$param}) {
36 0           $default_params{$param} = $value;
37             } else {
38 0           push @input_args, $param;
39             }
40             }
41              
42 0           my $method = $data->{name};
43 1     1   33 no strict 'refs';
  1         2  
  1         50  
44 0           *{"$api_pkg\::$method"} = sub {
45 1     1   4 use strict;
  1         1  
  1         160  
46 0     0     my($self, %args) = @_;
47 0           my $params = { %default_params };
48 0           for my $key (@input_args) {
49 0           $params->{$key} = $args{$key};
50             }
51 0           $self->{response} = $self->{api}->get($params, $data->{options});
52 0           $self->{response}->parse_xml($data->{parse_xml_opts});
53 0           };
54             }
55             }
56 1     1   5 use strict;
  1         1  
  1         174  
57              
58 0           my $params = {};
59 0           for my $key (keys %{ $config->{global}->{params} }) {
  0            
60 0   0       $params->{$key} = $args{$key} || $config->{global}->{params}->{$key};
61             }
62              
63 0           my $simple_opts = {
64             base_url => $config->{global}->{base_url},
65             param => $params,
66             };
67 0 0         $simple_opts->{cache} = $args{cache} if exists $args{cache};
68 0           $api_pkg->new(
69             config => $config,
70             simple_opts => $simple_opts,
71             );
72             }
73              
74              
75             1;
76             __END__