summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-01-11 13:02:39 -0600
committerJesse Luehrs <doy@tozt.net>2011-01-11 13:02:39 -0600
commitfd4c5d0739d110bd35c69124c62f494c36ca350d (patch)
tree4b6725a773cc2d353f8a84405e0ae9d094df6fe9
parentacf9a94c33748457d49e662c9c7ed3719a38eb65 (diff)
downloadplack-client-fd4c5d0739d110bd35c69124c62f494c36ca350d.tar.gz
plack-client-fd4c5d0739d110bd35c69124c62f494c36ca350d.zip
being a bit more explicit about backends is probably a good thing
-rw-r--r--lib/Plack/Client.pm75
-rw-r--r--t/01-basic.t2
-rw-r--r--t/02-inputs.t2
-rw-r--r--t/03-delayed-response.t2
-rw-r--r--t/04-streaming.t2
5 files changed, 35 insertions, 48 deletions
diff --git a/lib/Plack/Client.pm b/lib/Plack/Client.pm
index 1984e72..b38e2c2 100644
--- a/lib/Plack/Client.pm
+++ b/lib/Plack/Client.pm
@@ -76,9 +76,29 @@ sub new {
my $class = shift;
my %params = @_;
+ my %backends;
+ for my $scheme (keys %params) {
+ my $backend = $params{$scheme};
+ if (blessed($backend)) {
+ $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);
+ $backends{$scheme} = $backend_class->new(
+ reftype($backend) eq 'HASH' ? %$backend
+ : reftype($backend) eq 'ARRAY' ? @$backend
+ : $$backend
+ );
+ }
+ else {
+ die 'XXX';
+ }
+ }
+
bless {
- backend => {},
- backend_args => \%params,
+ backends => \%backends,
}, $class;
}
@@ -89,31 +109,18 @@ sub new {
sub backend {
my $self = shift;
my ($scheme) = @_;
- $scheme = $self->_normalize_scheme($scheme);
- return $self->{backend}->{$scheme};
-}
-
-sub _set_backend {
- my $self = shift;
- my ($scheme, $backend) = @_;
- $scheme = $self->_normalize_scheme($scheme);
- $self->{backend}->{$scheme} = $backend;
-}
-
-sub _normalize_scheme {
- my $self = shift;
-
- my $scheme = blessed($_[0]) ? $_[0]->scheme : $_[0];
- $scheme =~ s/-ssl$//;
+ $scheme = $scheme->scheme if blessed($scheme);
+ my $backend = $self->_backend($scheme);
+ return $backend if defined $backend;
$scheme = 'http' if $scheme eq 'https';
-
- return $scheme;
+ $scheme =~ s/-ssl$//;
+ return $self->_backend($scheme);
}
-sub _backend_args {
+sub _backend {
my $self = shift;
my ($scheme) = @_;
- return %{ $self->{backend_args}->{$scheme} || {} };
+ return $self->{backends}->{$scheme};
}
=method request
@@ -238,10 +245,9 @@ sub _app_from_request {
my $self = shift;
my ($req) = @_;
- my $uri = $req->uri;
- my $scheme = $req->env->{'plack.client.url_scheme'} || $uri->scheme;
+ my $scheme = $req->env->{'plack.client.url_scheme'} || $req->uri->scheme;
- my $backend = $self->_scheme_to_backend($scheme);
+ my $backend = $self->backend($scheme);
my $app = $backend->app_from_request($req);
die "Couldn't find app" unless $app;
@@ -249,25 +255,6 @@ sub _app_from_request {
return $app;
}
-sub _scheme_to_backend {
- my $self = shift;
- my ($scheme) = @_;
-
- $scheme = $self->_normalize_scheme($scheme);
-
- my $backend = $self->backend($scheme);
- return $backend if $backend;
-
- (my $scheme_class = $scheme) =~ s/-/_/;
- $scheme_class = "Plack::Client::Backend::$scheme_class";
- Class::Load::load_class($scheme_class);
-
- $backend = $scheme_class->new($self->_backend_args($scheme));
- $self->_set_backend($scheme, $backend);
-
- return $self->backend($scheme);
-}
-
sub _resolve_response {
my $self = shift;
my ($psgi_res) = @_;
diff --git a/t/01-basic.t b/t/01-basic.t
index 6e185b4..e152f8d 100644
--- a/t/01-basic.t
+++ b/t/01-basic.t
@@ -10,7 +10,7 @@ test_tcp_plackup(
sub {
my $base_url = shift;
- my $client = Plack::Client->new;
+ my $client = Plack::Client->new(http => {});
isa_ok($client, 'Plack::Client');
{
diff --git a/t/02-inputs.t b/t/02-inputs.t
index 09e471c..3b7260a 100644
--- a/t/02-inputs.t
+++ b/t/02-inputs.t
@@ -38,7 +38,7 @@ test_tcp_plackup(
sub {
my $base_uri = shift;
- test_responses($base_uri, Plack::Client->new);
+ test_responses($base_uri, Plack::Client->new(http => {}));
},
);
diff --git a/t/03-delayed-response.t b/t/03-delayed-response.t
index 26d9037..ed3fbd9 100644
--- a/t/03-delayed-response.t
+++ b/t/03-delayed-response.t
@@ -41,7 +41,7 @@ test_tcp_plackup(
sub {
my $base_uri = shift;
- test_responses($base_uri, Plack::Client->new);
+ test_responses($base_uri, Plack::Client->new(http => {}));
},
);
diff --git a/t/04-streaming.t b/t/04-streaming.t
index 17a42e6..9aaec17 100644
--- a/t/04-streaming.t
+++ b/t/04-streaming.t
@@ -42,7 +42,7 @@ test_tcp_plackup(
sub {
my $base_uri = shift;
- test_responses($base_uri, Plack::Client->new);
+ test_responses($base_uri, Plack::Client->new(http => {}));
},
);