File Coverage

blib/lib/Template/Plugin/Gravatar.pm
Criterion Covered Total %
statement 44 44 100.0
branch 12 12 100.0
condition 22 27 81.4
subroutine 8 8 100.0
pod 1 1 100.0
total 87 92 94.5


line stmt bran cond sub pod time code
1             package Template::Plugin::Gravatar;
2 4     4   150592 use warnings;
  4         8  
  4         130  
3 4     4   19 use strict;
  4         4  
  4         125  
4 4     4   15 use base "Template::Plugin";
  4         9  
  4         1986  
5 4     4   6645 use Carp qw( carp croak );
  4         7  
  4         271  
6 4     4   2167 use URI ();
  4         16046  
  4         80  
7 4     4   27 use Digest::MD5 ();
  4         7  
  4         1431  
8              
9             our $VERSION = "0.08";
10             our $AUTHORITY = "cpan:ASHLEY";
11             our $Gravatar_Base = "http://www.gravatar.com/avatar/";
12              
13             sub new {
14 17     17 1 38058 my ( $class, $context, $instance_args ) = @_;
15 17   100     70 $instance_args ||= {}; # the USE'd object.
16 17   100     78 my $config = $context->{CONFIG}{GRAVATAR} || {}; # from TT config.
17 17         20 my %args;
18              
19 17   100     110 $args{default} = $instance_args->{default} || $config->{default};
20 17   100     61 $args{rating} = $instance_args->{rating} || $config->{rating};
21 17   66     61 $args{border} = $instance_args->{border} || $config->{border};
22 17   100     58 $args{size} = $instance_args->{size} || $config->{size};
23              
24             # Overriding the base might be nice for some developers.
25 17   66     75 $args{base} = $instance_args->{base} || $config->{base} ||
26             $Gravatar_Base;
27              
28             return sub {
29 14   100 14   479 my $args = shift || {};
30 14         41 $args = {
31             %args,
32 14         33 %{$args}
33             };
34 14 100       206 $args->{email} || croak "Cannot generate a Gravatar URI without an email address";
35 13 100       28 if ( $args->{size} ) {
36 9 100 66     163 $args->{size} >= 1 and $args->{size} <= 2048
37             or croak "Gravatar size must be 1 .. 2048";
38             }
39 12 100       22 if ( $args->{rating} ) {
40 10 100       186 $args->{rating} =~ /\A(?:G|PG|R|X)\z/
41             or croak "Gravatar rating can only be G, PG, R, or X";
42             }
43 11 100       22 if ( $args->{border} ) {
44 2         404 carp "Border is deprecated! Dropping it.";
45             }
46            
47 11         235 $args->{gravatar_id} = Digest::MD5::md5_hex($args->{email});
48              
49 11   33     57 my $uri = URI->new( $args->{base} || $Gravatar_Base );
50 11         15327 my @ordered = map { $_, $args->{$_} }
  38         75  
51             grep $args->{$_},
52             qw( gravatar_id rating size default );
53 11         52 $uri->query_form(@ordered);
54 11         1294 return $uri;
55             }
56 17         96 }
57              
58             1;
59              
60             __END__