File Coverage

blib/lib/WWW/WebDevout/BrowserSupportInfo.pm
Criterion Covered Total %
statement 26 102 25.4
branch 2 38 5.2
condition 0 3 0.0
subroutine 7 20 35.0
pod 12 12 100.0
total 47 175 26.8


line stmt bran cond sub pod time code
1             package WWW::WebDevout::BrowserSupportInfo;
2              
3 1     1   95661 use warnings;
  1         3  
  1         43  
4 1     1   4 use strict;
  1         3  
  1         61  
5              
6             our $VERSION = '0.0103';
7              
8 1     1   5 use Carp;
  1         6  
  1         71  
9 1     1   5 use URI;
  1         2  
  1         25  
10 1     1   5 use LWP::UserAgent;
  1         1  
  1         34  
11 1     1   5 use overload '%{}' => \&_overload;
  1         1  
  1         10  
12              
13             sub _overload {
14 0     0   0 return shift->browser_results;
15             }
16              
17             sub new {
18 1     1 1 199 my $class = shift;
19 1 50       4 croak "Even number of arguments expected to new()"
20             if @_ & 1;
21 1         3 my %args = @_;
22 1         4 $args{ +uc } = delete $args{ $_ } for keys %args;
23              
24 1         8 %args = (
25             LONG => 0,
26             BROWSERS => [ qw(IE6 IE7 IE8 FX1_5 FX2 FX3 OP8 OP9 KN3_5 SF2) ],
27             %args,
28             );
29             #IE6-IE7-FX1_5-FX2-OP8-OP9-KN3_5-SF2
30            
31 1 50       5 unless ( exists $args{UA_ARGS}{timeout} ) {
32 1         2 $args{UA_ARGS}{timeout} = 30;
33             }
34              
35 1         6 return bless [ \%args ], $class;
36             }
37              
38             sub fetch {
39 0     0 1   my $self = shift;
40 0           my $input = shift;
41              
42 0 0         croak "Undefined argument to fetch()"
43             unless defined $input;
44              
45 0           my $uri = URI->new('http://www.webdevout.net/lookup-support');
46 0           $uri->query_form(
47             'q' => $input,
48 0           'uas' => join '-', @{ $self->browsers }
49             );
50 0 0         my $ua = LWP::UserAgent->new( %{ $self->ua_args || {} } );
  0            
51              
52 0           my $response = $ua->get( $uri );
53              
54 0 0         if ( $response->is_success ) {
55 0           return $self->_parse_fetched( $response->content );
56             }
57             else {
58 0           $self->error( $response->status_line );
59 0           return;
60             }
61             }
62              
63             sub _parse_fetched {
64 0     0     my $self = shift;
65 0           my $content = shift;
66 0 0         $content =~ s/^\s+|\s+$//g
67             if defined $content;
68 0 0 0       if ( not defined $content or not length $content ) {
69 0           $self->error('No results');
70 0           return;
71             }
72              
73 0           my %results;
74 0           ( my ( $what, $uri_info), @results{ @{ $self->browsers } } )
  0            
75 0           = grep { defined } split /\n/, $content;
76              
77 0           keys %results;
78 0           while ( my ( $browser, $info ) = each %results ) {
79 0 0         $info =~ s/^\s*.+?:\s*//
80             if defined $info;
81 0           $results{ $browser } = $info;
82 0           $self->browser_info( $browser => $info );
83             }
84              
85 0 0         if ( $self->long ) {
86             $results{ $self->make_long_name( $_ ) }
87 0           = delete $results{ $_ } for keys %results;
88             }
89              
90 0           $self->browser_results( { %results } );
91 0           $self->what( $what );
92 0           $self->uri_info( $uri_info );
93 0           @results{ qw(what uri_info) } = ( $what, $uri_info );
94              
95 0           return $self->results( \%results );
96             }
97              
98             sub make_long_name {
99 0     0 1   my $self = shift;
100 0 0         my $short_ua = shift
101             or return;
102 0           my %long_name_for = (
103             IE6 => 'Internet Explorer 6',
104             IE7 => 'Internet Explorer 7',
105             IE8 => 'Internet Explorer 7',
106             FX1_5 => 'FireFox 1.5',
107             FX2 => 'FireFox 2',
108             FX3 => 'FireFox 3',
109             OP8 => 'Opera 8',
110             OP9 => 'Opera 9',
111             KN3_5 => 'Konqueror 3.5',
112             SF2 => 'Safari 2',
113             );
114              
115 0           return $long_name_for{ $short_ua };
116             }
117              
118             ###### ACCESSORS/MUTATORS
119              
120             sub browser_info {
121 0     0 1   my ( $self, $browser ) = splice @_, 0, 2;
122 0 0         if ( @_ ) {
123 0           $self->[0]{INFO}{ $browser } = shift;
124             }
125 0           return $self->[0]{INFO}{ $browser };
126             }
127              
128             sub error {
129 0     0 1   my $self = shift;
130 0 0         if ( @_ ) {
131 0           $self->[0]{ ERROR } = shift;
132             }
133 0           return $self->[0]{ ERROR };
134             }
135              
136             sub ua_args {
137 0     0 1   my $self = shift;
138 0 0         if ( @_ ) {
139 0           $self->[0]{ UA_ARGS } = shift;
140             }
141 0           return $self->[0]{ UA_ARGS };
142             }
143              
144             sub long {
145 0     0 1   my $self = shift;
146 0 0         if ( @_ ) {
147 0           $self->[0]{ LONG } = shift;
148             }
149 0           return $self->[0]{ LONG };
150             }
151              
152             sub results {
153 0     0 1   my $self = shift;
154 0 0         if ( @_ ) {
155 0           $self->[0]{ RESULTS } = shift;
156             }
157 0           return $self->[0]{ RESULTS };
158             }
159              
160             sub browser_results {
161 0     0 1   my $self = shift;
162 0 0         if ( @_ ) {
163 0           $self->[0]{ BROWSER_RESULTS } = shift;
164             }
165 0           return $self->[0]{ BROWSER_RESULTS };
166             }
167              
168              
169             sub what {
170 0     0 1   my $self = shift;
171 0 0         if ( @_ ) {
172 0           $self->[0]{ WHAT } = shift;
173             }
174 0           return $self->[0]{ WHAT };
175             }
176              
177              
178             sub uri_info {
179 0     0 1   my $self = shift;
180 0 0         if ( @_ ) {
181 0           $self->[0]{ URI_INFO } = shift;
182             }
183 0           return $self->[0]{ URI_INFO };
184             }
185              
186             sub browsers {
187 0     0 1   my $self = shift;
188 0 0         if ( @_ ) {
189 0           $self->[0]{ BROWSERS } = shift;
190             }
191 0           return $self->[0]{ BROWSERS };
192             }
193              
194              
195             1;
196              
197             __END__