Changeset 9694
- Timestamp:
- 04/18/08 19:00:39 (6 months ago)
- Location:
- lang/perl/WebService-Simple/branch/lwp-base
- Files:
-
- 3 modified
-
Makefile.PL (modified) (1 diff)
-
lib/WebService/Simple.pm (modified) (7 diffs)
-
t/01_basic.t (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/WebService-Simple/branch/lwp-base/Makefile.PL
r9691 r9694 7 7 requires( 'Class::Data::ConfigHash' ); 8 8 requires( 'Data::Dumper' ); 9 requires( 'Digest::MD5' ); 9 10 requires( 'LWP::UserAgent' ); 10 requires( 'Storable' );11 11 requires( 'UNIVERSAL::require' ); 12 12 requires( 'XML::Simple' ); -
lang/perl/WebService-Simple/branch/lwp-base/lib/WebService/Simple.pm
r9688 r9694 5 5 use warnings; 6 6 use base qw(LWP::UserAgent Class::Data::ConfigHash); 7 use Data::Dumper (); 8 use Digest::MD5 (); 7 9 use WebService::Simple::Response; 8 10 use UNIVERSAL::require; … … 12 14 __PACKAGE__->config( 13 15 base_url => '', 16 cache => { 17 module => "Cache::FileCache", 18 args => { 19 } 20 }, 14 21 response_parser => { 15 22 module => "XML::Simple" … … 24 31 $class->config->{base_url} || 25 32 Carp::croak("base_url is required"); 26 my $basic_params = delete $args{params} || {};33 my $basic_params = delete $args{params} || delete $args{param} || {}; 27 34 my $response_parser = delete $args{response_parser}; 28 35 if (! $response_parser) { … … 38 45 $response_parser = $module->new( %{ $config->{args} || {} } ); 39 46 }; 40 die if $@; 47 48 my $cache = delete $args{cache}; 49 if (! $cache || ref $cache eq 'HASH') { 50 my $config = ref $cache eq 'HASH' ? $cache : $class->config->{cache}; 51 if ($config) { 52 if (! ref $config) { 53 $config = { module => $config }; 54 } 55 56 my $module = $config->{module}; 57 $module->require or die; 58 $cache = $module->new( $config->{hashref_args} ? $config->{args} : %{ $config->{args} } ); 59 } 60 } 41 61 42 62 my $self = $class->SUPER::new(%args); … … 44 64 $self->{basic_params} = $basic_params; 45 65 $self->{response_parser} = $response_parser; 66 $self->{cache} = $cache; 46 67 return $self; 47 68 } … … 50 71 sub basic_params { $_[0]->{basic_params} } 51 72 sub response_parser { $_[0]->{response_parser} } 73 sub cache { $_[0]->{cache} } 74 75 sub __cache_get 76 { 77 my $self = shift; 78 my $cache = $self->cache; 79 return unless $cache; 80 81 my $key = $self->__cache_key( shift ); 82 return $cache->get( $key, @_ ); 83 } 84 85 sub __cache_set 86 { 87 my $self = shift; 88 my $cache = $self->cache; 89 return unless $cache; 90 91 my $key = $self->__cache_key( shift ); 92 return $cache->set( $key, @_ ); 93 } 94 95 sub __cache_remove 96 { 97 my $self = shift; 98 my $cache = $self->cache; 99 return unless $cache; 100 101 my $key = $self->__cache_key( shift ); 102 return $cache->remove( $key, @_ ); 103 } 104 105 sub __cache_key 106 { 107 my $self = shift; 108 local $Data::Dumper::Indent = 1; 109 local $Data::Dumper::Terse = 1; 110 local $Data::Dumper::Sortkeys = 1; 111 return Digest::MD5::md5_hex( Data::Dumper::Dumper( $_[0] ) ); 112 } 52 113 53 114 sub get … … 72 133 73 134 $uri->query_form( %{$self->basic_params}, %extra ); 74 my $response = $self->SUPER::get($uri, @headers); 135 136 my $response; 137 138 $response = $self->__cache_get([$uri, @headers]); 139 if ($response) { 140 return $response; 141 } 142 143 $response = $self->SUPER::get($uri, @headers); 75 144 if (! $response->is_success) { 76 145 Carp::croak("request to $url failed"); 77 146 } 78 147 79 returnWebService::Simple::Response->new_from_response(148 $response = WebService::Simple::Response->new_from_response( 80 149 response => $response, 81 150 parser => $self->response_parser 82 151 ); 152 $self->__cache_set([$uri, @headers], $response); 153 return $response; 154 83 155 } 84 156 -
lang/perl/WebService-Simple/branch/lwp-base/t/01_basic.t
r9687 r9694 1 1 use strict; 2 2 use Test::More; 3 use Test::MockObject; 3 4 4 5 my ($flickr_api_key); … … 9 10 plan( skip_all => "Please set FLICKR_API_KEY to enable this test" ); 10 11 } else { 11 plan( tests => 1 0);12 plan( tests => 13 ); 12 13 } 13 14 … … 38 39 39 40 is( $h->{name}, 'value' ); 41 42 # Make sure the response is NOT cached by default 43 { 44 my $tmp = $simple->get( { method => "flickr.test.echo", name => "value" } ); 45 isnt( $tmp, $response, "response is NOT cached ($response <=> $tmp)" ); 46 } 40 47 } 48 49 SKIP: { 50 eval { require Cache::Memory }; 51 if ($@) { 52 skip(2, "Cache::Memory not installed"); 53 } 54 55 my $called = 0; 56 my $simple = WebService::Simple->new( 57 base_url => "http://api.flickr.com/services/rest/", 58 params => { 59 api_key => $flickr_api_key 60 }, 61 cache => { 62 module => 'Cache::Memory', 63 } 64 ); 65 66 my $response; 67 for (1..3) { 68 my $tmp = $simple->get( { method => "flickr.test.echo", name => "value" } ); 69 if ($response) { 70 is( $tmp, $response, "got cached $response" ); 71 } else { 72 $response = $tmp; 73 } 74 } 75 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)