The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

# $rcs = ' $Id: Listing.pm,v 1.12 2010-05-08 12:51:44 Martin Exp $ ' ;

=head1 COPYRIGHT

                Copyright (C) 2002-present Martin Thurn
                         All Rights Reserved

=head1 NAME

WWW::Ebay::Listing - information about an auction listing

=head1 SYNOPSIS

  use WWW::Ebay::Listing;
  my $oWEL = new WWW::Ebay::Listing;

=head1 DESCRIPTION

Encapsulates a posted / running / completed auction listing at the
eBay auction website (www.ebay.com).

=cut

package WWW::Ebay::Listing;

use strict;
use warnings;

our
$VERSION = do { my @r = (q$Revision: 1.12 $ =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r };

use Carp;
use WWW::Ebay::Status;

=head1 METHODS

=over

=item new

=cut

my (@allowed, %allowed);

sub new
  {
  my $proto = shift;
  my ($sUserID, $sPassword) = @_;
  my $class = ref($proto) || $proto;
  unless ($class)
    {
    carp "You can not call new like that";
    # Keep going, but don't give the caller what they're expecting:
    return bless({}, 'FAIL');
    } # unless
  my $self = {
              '_allowed' => \%allowed,
             };
  bless ($self, $class);
  $self->status(new WWW::Ebay::Status);
  $self->dateend(0);
  return $self;
  } # new

BEGIN
  {

=item id

The auction ID assigned when the auction was listed.

=cut

push @allowed, 'id';

=item bidcount

How many bids this auction received.

=cut

push @allowed, 'bidcount';

=item bidmax

The highest bid so far (in cents).

=cut

push @allowed, 'bidmax';

=item status

A WWW::Ebay::Status object.

=cut

push @allowed, 'status';

=item datestart

Date & time the auction was listed (epoch seconds format).

=cut

push @allowed, 'datestart';

=item dateend

Date & time the auction ended (epoch seconds format).

=cut

push @allowed, 'dateend';

=item winnerid

High bidder's ebay ID.

=cut

push @allowed, 'winnerid';

=item shipping

Shipping charge (in cents).

=cut

push @allowed, 'shipping';

=item title

Auction title.

=cut

push @allowed, 'title';

=item description

Auction description.

=cut

push @allowed, 'description';

=item dateship

Date the item was shipped (epoch seconds format).

=cut

push @allowed, 'dateship';
foreach (@allowed)
  {
  $allowed{$_} = 1;
  } # foreach
} # end of BEGIN block

sub _elem
  {
  my $self = shift;
  my $elem = shift;
  my $ret = $self->{$elem};
  if (@_)
    {
    $self->{$elem} = shift;
    } # if
  return $ret;
  } # _elem


sub AUTOLOAD
  {
  my $self = shift;
  # print STDERR " DDD this is ::Listing::AUTOLOAD($AUTOLOAD,@_)\n";
  our $AUTOLOAD =~ s/.*:://;
  $AUTOLOAD = lc $AUTOLOAD;
  # print STDERR " DDD   Listing::AUTOLOAD($AUTOLOAD)\n";
  unless (exists $self->{_allowed}->{$AUTOLOAD})
    {
    carp " --- Method '$AUTOLOAD' not allowed on a ", ref $self, " object";
    return;
    } # unless
  $self->_elem($AUTOLOAD, @_);
  } # AUTOLOAD

=item as_string

Returns a human-readable summary of this listing.

=cut

sub as_string
  {
  my $self = shift;
  my $s = '';
  foreach my $sKey (@allowed)
    {
    if (defined($self->{$sKey}) && ($self->{$sKey} ne ''))
      {
      my $sVal = $sKey eq 'status' ? $self->{$sKey}->as_text : $self->{$sKey};
      $s .= "$sKey=$sVal; ";
      } # if
    } # foreach
  chop $s;
  chop $s;
  return $s;
  } # as_string

# define this so AUTOLOAD does not try to handle it:

sub DESTROY
  {
  } # DESTROY


=item ended

Returns true if this auction has ended.

=cut

sub ended
  {
  my $self = shift;
  return (0 < $self->dateend);
  } # ended

=back

=head1 AUTHOR

Martin 'Kingpin' Thurn, C<mthurn at cpan.org>, L<http://tinyurl.com/nn67z>.

=cut

1;

__END__