From 45930949ecfeb86af962eebe8fab0e46b418a9a2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 11 Jan 2011 13:09:36 -0600 Subject: add some duck-typing for backends --- lib/Plack/Client.pm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/Plack/Client.pm b/lib/Plack/Client.pm index b38e2c2..6ac6c97 100644 --- a/lib/Plack/Client.pm +++ b/lib/Plack/Client.pm @@ -80,12 +80,18 @@ sub new { for my $scheme (keys %params) { my $backend = $params{$scheme}; if (blessed($backend)) { + die "Backends must support the app_from_request method" + unless $backend->can('app_from_request'); $backends{$scheme} = $backend; } elsif (ref($backend)) { (my $normal_scheme = $scheme) =~ s/-/_/g; my $backend_class = "Plack::Client::Backend::$normal_scheme"; Class::Load::load_class($backend_class); + die "Backends must support the app_from_request method" + unless $backend_class->can('app_from_request'); + die "Backend classes must have a constructor" + unless $backend_class->can('new'); $backends{$scheme} = $backend_class->new( reftype($backend) eq 'HASH' ? %$backend : reftype($backend) eq 'ARRAY' ? @$backend -- cgit v1.2.3