summaryrefslogtreecommitdiff
path: root/lib/Net/Amazon/Response.pm
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
commitbcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch)
treef377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/Net/Amazon/Response.pm
downloadxxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz
xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2
* Move files to trunk
Diffstat (limited to 'lib/Net/Amazon/Response.pm')
-rw-r--r--lib/Net/Amazon/Response.pm214
1 files changed, 214 insertions, 0 deletions
diff --git a/lib/Net/Amazon/Response.pm b/lib/Net/Amazon/Response.pm
new file mode 100644
index 0000000..6147e0e
--- /dev/null
+++ b/lib/Net/Amazon/Response.pm
@@ -0,0 +1,214 @@
+######################################################################
+package Net::Amazon::Response;
+######################################################################
+use warnings;
+use strict;
+
+use base qw(Net::Amazon);
+
+use Text::Wrap qw($columns wrap);
+use XML::Simple;
+
+our @FORCE_ARRAY_FIELDS = ();
+
+__PACKAGE__->make_accessor($_) for qw(
+ status messages items xmlref total_results);
+
+##################################################
+sub new {
+##################################################
+ my($class, %options) = @_;
+
+ my $self = {
+ status => "",
+ messages => [],
+ items => [],
+ xmlref => {},
+ total_results => undef,
+ };
+
+ bless $self, $class;
+}
+
+sub message {
+ my($self) = @_;
+
+ return join(";",@{$self->{messages}});
+}
+
+###########################################
+sub is_success {
+###########################################
+ my($self) = @_;
+
+ return $self->{status} ? 1 : "";
+}
+
+###########################################
+sub is_error {
+###########################################
+ my($self) = @_;
+
+ return !$self->is_success();
+}
+
+###########################################
+sub push_item {
+###########################################
+ my($self, $item) = @_;
+
+ push @{$self->{items}}, $item;
+}
+
+###########################################
+sub as_string {
+###########################################
+ my($self) = @_;
+
+ return Data::Dumper::Dumper($self);
+}
+
+###########################################
+sub list_as_string {
+###########################################
+ my($self, @properties) = @_;
+
+ my $full = "";
+
+ # Column with
+ $columns = 60;
+ my $bullet = 1;
+
+ foreach my $property (@properties) {
+ $full .= "\n" if $full;
+ my $bullet_string = sprintf("[%d]%s",
+ $bullet, (" " x (3-length($bullet))));
+ $full .= wrap("", " ", $bullet_string . $property->as_string());
+ $bullet++;
+ }
+
+ return $full;
+}
+
+##################################################
+sub properties {
+##################################################
+ my($self) = @_;
+
+ my @properties = ();
+
+ if($self->is_success && ref($self->{xmlref}->{Details}) eq 'ARRAY') {
+ foreach my $xmlref (@{$self->{xmlref}->{Details}}) {
+ my $property = Net::Amazon::Property::factory(xmlref => $xmlref);
+ push @properties, $property;
+ }
+ }
+
+ if(wantarray) {
+ return (@properties);
+ }
+
+ if(@properties) {
+ # Scalar context and we've got results. Return the first one.
+ return $properties[0];
+ }
+
+ # Scalar context and we don't have anything.
+ return undef;
+}
+
+##################################################
+sub xml_parse {
+##################################################
+ my($self, $xml) = @_;
+
+ my $xs = XML::Simple->new();
+ return $xs->XMLin($xml, ForceArray => [ @FORCE_ARRAY_FIELDS ]);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Amazon::Response - Baseclass for responses from Amazon's web service
+
+=head1 SYNOPSIS
+
+ $resp = $ua->request($request);
+
+ if($resp->is_success()) {
+ print $resp->as_string();
+ }
+
+ if($resp->is_error()) {
+ print $resp->message();
+ }
+
+ if($resp->is_success()) {
+ for my $property ($resp->properties) {
+ print $property->as_string(), "\n";
+ }
+ }
+
+=head1 DESCRIPTION
+
+C<Net::Amazon::Response> is the baseclass for responses coming back
+from the useragent's C<request> method. Responses are typically
+not of type C<Net::Amazon::Response> but one of its subclasses
+C<Net::Amazon::Response::*>. However, for basic error handling and
+dumping content, C<Net::Amazon::Response>'s methods are typically used,
+because we typically don't know what type of object we're
+actually dealing with.
+
+=head2 METHODS
+
+=over 4
+
+=item is_success()
+
+Returns true if the request was successful. This doesn't mean any objects
+have been found, it just indicates a successful roundtrip.
+
+=item is_error()
+
+Returns true if an error occurred. Use C<message()> to determine what
+kind of error.
+
+=item properties()
+
+Returns the list of C<Net::Amazon::Property> objects which were found
+by the query.
+
+=item as_string()
+
+Dumps the content of the response.
+
+=item message()
+
+Returns the error message as a string in case an error occurred. In case
+several errors occurred, they're stringed together. Look up C<messages()>
+if you need them separated.
+
+=item messages()
+
+Returns all error messages for a response as a reference to an array
+of string messages.
+
+=back
+
+=head1 SEE ALSO
+
+=head1 AUTHOR
+
+Mike Schilli, E<lt>m@perlmeister.comE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2003 by Mike Schilli E<lt>m@perlmeister.comE<gt>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut