File Coverage

blib/lib/Palm/Progect/Converter.pm
Criterion Covered Total %
statement 15 30 50.0
branch n/a
condition 0 3 0.0
subroutine 5 6 83.3
pod 1 1 100.0
total 21 40 52.5


line stmt bran cond sub pod time code
1              
2 7     7   32 use strict;
  7         11  
  7         212  
3 7     7   124 use 5.004;
  7         24  
  7         292  
4 7     7   33 use Carp;
  7         10  
  7         595  
5              
6             package Palm::Progect::Converter;
7              
8             =head1 NAME
9              
10             Palm::Progect::Converter - delegate to specific Conversion module based on format
11              
12             =head1 DESCRIPTION
13              
14             Delegate to a specific Conversion class based on format.
15              
16             For instance to create a Palm::Progect::Converter::Text conversion object,
17             the user can do the following:
18              
19             my $converter = Palm::Progect::Converter->new(
20             format => 'Text',
21             # ... other args ...
22             );
23              
24             Behind the scenes, this call will be translated into the equivalent of:
25              
26             require 'Palm/Progect/Converter/Text.pm';
27             my $record = Palm::Progect::Converter::Text->new(
28             # ... other args ...
29             );
30              
31              
32             See also the individual converter objects.
33              
34             =cut
35              
36 7     7   35 use CLASS;
  7         13  
  7         59  
37 7     7   274 use base 'Class::Accessor';
  7         12  
  7         2170  
38              
39             my @Accessors = qw(
40             records
41             prefs
42             quiet
43             );
44              
45             CLASS->mk_accessors(@Accessors);
46              
47             # Delegate to Palm::Progect::Converter::CSV, Palm::Progect::Converter::HTML, etc.
48              
49             sub new {
50 0     0 1   my $proto = shift;
51 0   0       my $this_class = ref $proto || $proto;
52              
53 0           my @base_class = split /::/, $this_class; # e.g. ('Palm', 'Progect', 'Converter')
54              
55 0           my %args = @_;
56              
57 0           my $converter_format = delete $args{'format'};
58              
59 0           my $module_path = File::Spec->join(@base_class, $converter_format . '.pm');
60 0           my $module_class = join '::', @base_class, $converter_format;
61              
62 0           require $module_path;
63              
64             # Initialize the object with the standard Converter accessors
65              
66 0           my %auto_init;
67 0           foreach my $accessor (@Accessors) {
68 0           $auto_init{$accessor} = delete $args{$accessor};
69             }
70 0           my $converter = $module_class->new(%args);
71              
72 0           foreach my $accessor (@Accessors) {
73 0           $converter->$accessor($auto_init{$accessor});
74             }
75 0           return $converter;
76             }
77              
78             1;
79              
80             __END__