File Coverage

blib/lib/SoggyOnion/Resource.pm
Criterion Covered Total %
statement 6 28 21.4
branch 0 14 0.0
condition 0 3 0.0
subroutine 2 3 66.6
pod n/a
total 8 48 16.6


line stmt bran cond sub pod time code
1             package SoggyOnion::Resource;
2 1     1   6 use warnings;
  1         2  
  1         33  
3 1     1   6 use strict;
  1         2  
  1         353  
4              
5             our $VERSION = '0.04';
6              
7             # make sure that plugins i expect to use are loaded
8             require SoggyOnion::Plugin::RSS;
9             require SoggyOnion::Plugin::ImageScraper;
10              
11             sub new {
12 0     0     my ( $self, $item ) = @_;
13              
14             # do some error checking
15 0 0         unless ( ref $item eq 'HASH' ) {
16 0           warn "\t\titems must be a hash (got '$item')\n";
17 0           return;
18             }
19 0 0 0       if ( not( defined $item->{id} ) || $item->{id} =~ /\W/ ) {
20 0           warn "\t\titems must have an alphanumeric-only 'id' key\n";
21 0           return;
22             }
23              
24             # if we have an 'rss' key, assume it's an rss feed
25 0 0         if ( exists $item->{rss} ) {
26 0           return SoggyOnion::Plugin::RSS->new($item);
27             }
28              
29             # if we have an 'images' key, assume it's an image scraper
30 0 0         if ( exists $item->{images} ) {
    0          
31 0           return SoggyOnion::Plugin::ImageScraper->new($item);
32             }
33              
34             # if we have a 'plugin' key, it's a module. try using it.
35             elsif ( exists $item->{plugin} ) {
36              
37             # try requiring
38 0           eval "require $item->{plugin}";
39 0 0         if ($@) {
40 0           warn "\t\t$@\n";
41 0           return;
42             }
43              
44             # try actually getting an object from it
45 0           my $rval;
46 0           eval { $rval = $item->{plugin}->new($item); };
  0            
47 0 0         warn "\t\t$@\n" if $@;
48 0           return $rval;
49             }
50              
51             # augh, no handler at all!
52 0           warn "\t\titem contained keys qw("
53             . join( ' ', keys %$item )
54             . ") but don't know how to handle it\n";
55 0           return;
56             }
57              
58             1;
59              
60             __END__