From fd4c5d0739d110bd35c69124c62f494c36ca350d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 11 Jan 2011 13:02:39 -0600 Subject: being a bit more explicit about backends is probably a good thing --- lib/Plack/Client.pm | 75 ++++++++++++++++++++----------------------------- t/01-basic.t | 2 +- t/02-inputs.t | 2 +- t/03-delayed-response.t | 2 +- t/04-streaming.t | 2 +- 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 => {})); }, ); -- cgit v1.2.3-54-g00ecf