summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-01-11 13:09:36 -0600
committerJesse Luehrs <doy@tozt.net>2011-01-11 13:09:36 -0600
commit45930949ecfeb86af962eebe8fab0e46b418a9a2 (patch)
tree9614c914e95bbcbff573afceaca6f49d2c13af67 /lib
parent5ae01f28e9d32c90ce0e5d54930fc6af00b0bf0b (diff)
downloadplack-client-45930949ecfeb86af962eebe8fab0e46b418a9a2.tar.gz
plack-client-45930949ecfeb86af962eebe8fab0e46b418a9a2.zip
add some duck-typing for backends
Diffstat (limited to 'lib')
-rw-r--r--lib/Plack/Client.pm6
1 files changed, 6 insertions, 0 deletions
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