=================================================================== RCS file: /cvs/HOPE/Net-OpenAMD/lib/Net/OpenAMD.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- HOPE/Net-OpenAMD/lib/Net/OpenAMD.pm 2010/06/24 23:57:42 1.5 +++ HOPE/Net-OpenAMD/lib/Net/OpenAMD.pm 2010/06/27 01:52:33 1.6 @@ -1,6 +1,6 @@ package Net::OpenAMD; -# $AFresh1: OpenAMD.pm,v 1.4 2010/06/24 22:26:55 andrew Exp $ +# $AFresh1: OpenAMD.pm,v 1.5 2010/06/24 22:57:42 andrew Exp $ use warnings; use strict; @@ -13,29 +13,65 @@ use Class::Std::Utils; use LWP::UserAgent; +use URI; use Net::OAuth; use JSON::Any; { - my @attr_refs = \(); + my @attr_refs = \( my %base_url_of, my %ua_of, my %auth_of, ); sub new { my ( $class, $options ) = @_; my $self = bless anon_scalar(), $class; my $ident = ident($self); + $options //= {}; + + croak 'Options should be a hashref' if ref $options ne 'HASH'; + + $base_url_of{$ident} = $options->{base_url} || $BASE_URL; + $ua_of{$ident} = $options->{ua} || LWP::UserAgent->new(); + + # XXX Authenticate + return $self; } - sub _get { croak 'Unsupported' } + sub _get { + my ( $self, $action, $query ) = @_; + my $ident = ident($self); + my $uri = URI->new( $base_url_of{$ident} . '/' . $action ); + $uri->query($query); + + my $response = $ua_of{$ident}->get($uri); + + if ( !$response->is_success ) { + croak $response->status_line; + } + + return JSON::Any->jsonToObj( $response->decoded_content ); + } + sub location { my $self = shift; return $self->_get( 'location', @_ ) } sub speakers { my $self = shift; return $self->_get( 'speakers', @_ ) } sub talks { my $self = shift; return $self->_get( 'talks', @_ ) } sub interests { my $self = shift; return $self->_get( 'interests', @_ ) } sub users { my $self = shift; return $self->_get( 'users', @_ ) } sub stats { croak 'Unused feature' } + + sub DESTROY { + my ($self) = @_; + my $ident = ident $self; + + foreach my $attr_ref (@attr_refs) { + delete $attr_ref->{$ident}; + } + + return; + } + } 1; # Magic true value required at end of module