The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package ActiveResource::Connection;
use common::sense;
use parent qw(Class::Accessor::Lvalue::Fast);
use LWP::UserAgent;
use HTTP::Request;

__PACKAGE__->mk_accessors(qw(site user password));

sub ua {
    LWP::UserAgent->new
}

sub url {
    my $self = shift;
    my $path = shift;

    my $user = $self->user;
    my $pass = $self->password;
    my $url = URI->new($self->site);

    if ($user && $pass) {
        $url->userinfo("${user}:${pass}");
    }
    $url->path($path);

    return $url;
}

sub get {
    my ($self, $path) = @_;

    my $url = $self->url($path);
    return ua->get($url);
}

sub post {
    my ($self, $path, $body) = @_;
    my $url = $self->url($path);

    my $request = HTTP::Request->new("POST", $url);
    $request->header("Content-Type" => "text/xml");
    $request->content($body);
    return ua->request($request);
}

sub put {
    my ($self, $path, $body) = @_;
    my $url = $self->url($path);

    my $request = HTTP::Request->new("PUT", $url);
    $request->header("Content-Type" => "text/xml");
    $request->content($body);
    return ua->request($request);
}

1;