File Coverage

blib/lib/Geo/IP/Record.pm
Criterion Covered Total %
statement 30 30 100.0
branch 3 6 50.0
condition 2 5 40.0
subroutine 12 12 100.0
pod 3 3 100.0
total 50 56 89.2


line stmt bran cond sub pod time code
1             package Geo::IP::Record;
2              
3 7     7   30 use Geo::IP; #
  7         13  
  7         975  
4              
5 7     7   70 use vars qw/$pp/;
  7         11  
  7         406  
6              
7 7     7   34 use strict;
  7         8  
  7         819  
8              
9             # here are the missing functions if the C API is used
10             sub latitude {
11             my $gir = shift;
12             return sprintf( "%.4f", $gir->_latitude );
13             }
14              
15             sub longitude {
16             my $gir = shift;
17             return sprintf( "%.4f", $gir->_longitude );
18             }
19              
20             BEGIN {
21 7   33 7   319 $pp = !defined(&Geo::IP::Record::city)
22             || $Geo::IP::GEOIP_PP_ONLY;
23             }
24              
25 7 50 50 7 1 37 eval <<'__PP__' if $pp;
  7 50   7 1 11  
  7 50   7 1 225  
  7     12   35  
  7     1   8  
  7     1   530  
  7     1   32  
  7     1   11  
  7         1857  
  12         77  
  1         3  
  1         3  
  1         4  
  1         3  
  1         6  
  1         18  
  1         12  
  1         2  
  1         3  
  1         4  
26              
27             for ( qw: country_code country_code3 country_name
28             region region_name city
29             postal_code dma_code area_code
30             continent_code metro_code : ) {
31              
32             no strict qw/ refs /;
33             no warnings qw/ redefine /;
34             my $m = $_; # looks bogus, but it is not! it is a copy not a alias
35             *$_ = sub { $_[0]->{$m} };
36             }
37              
38             # for the case warnings are globaly enabled with perl -w and the CAPI is absent
39             no warnings qw/ redefine /;
40              
41             sub longitude {sprintf('%.4f', $_[0]->{longitude})}
42             sub latitude {sprintf('%.4f', $_[0]->{latitude})}
43              
44             {
45             my $TIME_ZONE;
46              
47             local $_ = ; # skip first line
48             while () {
49             chomp;
50             next if /^\s*$/;
51             my ( $country, $region, $timezone ) = split /,/, $_, 3;
52             $TIME_ZONE->{$country}->{ $region || '' } = $timezone;
53             }
54              
55             # called from Geo::IP
56             sub _time_zone {
57             my ( undef, $country, $region ) = @_;
58             return undef unless $country;
59             return undef unless defined $TIME_ZONE->{$country};
60             $region ||= '';
61             return
62             defined $TIME_ZONE->{$country}->{$region}
63             ? $TIME_ZONE->{$country}->{$region}
64             : $TIME_ZONE->{$country}->{''};
65             }
66             sub time_zone {
67             my ( $self ) = @_;
68             my ( $country, $region ) = ( $self->country_code, $self->region );
69             return $self->_time_zone( $country, $region );
70             }
71             }
72              
73             __PP__
74             1;
75             __DATA__