ActiveResource

 view release on metacpan or  search on metacpan

lib/ActiveResource/Base.pm  view on Meta::CPAN

package ActiveResource::Base;
use common::sense;
use parent qw(Class::Accessor::Lvalue::Fast Class::Data::Inheritable);
use Hash::AsObject;
use Lingua::EN::Inflect qw(PL);
use URI;
use ActiveResource::Connection;
use ActiveResource::Formats::XmlFormat;

__PACKAGE__->mk_classdata($_) for qw(site user password);
__PACKAGE__->mk_accessors(qw(attributes));

__PACKAGE__->mk_classdata(
    format => 'ActiveResource::Formats::XmlFormat'
);

__PACKAGE__->mk_classdata(
    connection => ActiveResource::Connection->new
);

sub find {
    my ($class, $id) = @_;

    $class->connection->$_ = $class->$_ for qw(site user password);

    my $path = $class->element_path($id);
    my $response = $class->connection->get($path);
    unless ($response->is_success) {
        die "${class}->find FAIL. With HTTP Status: @{[ $response->status_line ]}\n";
    }

    my $record = $class->new;
    $record->load_attributes_from_response( $response );
    return $record;
}

sub create {
    my ($class, %args) = @_;
    my $resource_name = lc($class);
    $class->connection->$_ = $class->$_ for qw(site user password);

    my $body = $class->format->encode({ $resource_name => \%args });

    my $response = $class->connection->post($class->collection_path, $body);
    unless ($response->is_success) {
        die "${class}->create FAIL. With HTTP Status: @{[ $response->status_line ]}\n";
    }

    my $record = $class->new;
    $record->load_attributes_from_response($response);
    return $record;
}

sub save {
    my ($self) = @_;
    my $class = ref($self);

    my $resource_name = lc($class);
    $class->connection->$_ = $class->$_ for qw(site user password);

    my $body = $class->format->encode({ $resource_name => $self->attributes });

    my $response;



( run in 3.015 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )