/usr/local/CPAN/Net-Douban/Net/Douban/Roles/More.pm


package Net::Douban::Roles::More;

BEGIN {
    $Net::Douban::Roles::More::VERSION = '1.07';
}

use Carp qw/carp croak/;
use Scalar::Util qw/blessed/;
use Moose::Role;

with 'Net::Douban::Roles';

has 'base_url' => (
    is      => 'rw',
    isa     => 'Url',
    default => 'http://api.douban.com',
);

has 'user_url' => (
    is      => 'rw',
    isa     => 'Url',
    default => 'http://api.douban.com/people',
);

sub get {
    my $self = shift;
    my $url  = shift;
    my %args = @_;
    my $response;
    if ($self->has_oauth) {
        $url = $self->build_url($url, %args);
        $response = $self->oauth->get($url) or croak $!;
    } else {
        $args{apikey} ||= $self->apikey;
        $url = $self->build_url($url, %args);
        $response = $self->ua->get($url);
    }
    croak $response->status_line unless $response->is_success;
    my $xml = $response->decoded_content;
    return \$xml;
}

sub post {
    my ($self, $url, %args) = @_;
    if ($self->has_oauth) {
        my $response;
        if ($args{xml}) {
            $response =
              $self->oauth->post($url, $args{xml},
                ['Content-Type' => q{application/atom+xml}],
              ) or croak $!;
            croak $response->status_line unless $response->is_success;
        } else {
            $response = $self->oauth->post(url => $url) or croak $!;
            croak $response->status_line unless $response->is_success;
        }
        return $response;
    } else {
        croak "Authen needed!";
    }
}

sub put {
    my ($self, $url, %args) = @_;
    if ($self->has_oauth) {
        my $response =
          $self->oauth->put($url, $args{xml},
            ['Content-Type' => q{application/atom+xml}],
          ) or croak $!;
        croak $response->status_line unless $response->is_success;
        return $response;
    } else {
        croak "Authen needed!";
    }
}

sub delete {
    my ($self, $url, %args) = @_;
    if ($self->has_oauth) {
        my $response = $self->oauth->delete($url,) or croak $!;
        croak $response->status_line unless $response->is_success;
        return $response;
    } else {
        croak "Authen needed!";
    }
}

sub build_url {
    my $self = shift;
    my $url  = shift;
    my %args = @_;
    my $mark = $url =~ /\?/ ? '&' : '?';
    while (my ($key, $value) = each %args) {
        $key =~ s/-/_/g;
        $url .= $mark . "$key=$value";
        $mark = '&';
    }
    return $url;
}

no Moose::Role;
1;
__END__