The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package CPAN::PackageDetails::Entry;	
use strict;
use warnings;

use vars qw($VERSION);
$VERSION = '0.25';

use Carp;

=head1 NAME

CPAN::PackageDetails::Entry - Handle a single record of 02packages.details.txt.gz

=head1 SYNOPSIS

Used internally by CPAN::PackageDetails
	
=head1 DESCRIPTION

An entry is a single line from F<02packages.details.txt> that maps a
package name to a source. It's a whitespace-separated list that
has the values for the column identified in the "columns" field
in the header.

By default, there are three columns: package name, version, and path.

Inside a CPAN::PackageDetails object, the actual work and 
manipulation of the entries are handled by delegate classes specified
in C<entries_class> and C<entry_class>). At the moment these are
immutable, so you'd have to subclass this module to change them.

=head2 Methods

=over 4

=item new( FIELD1 => VALUE1 [, FIELD2 => VALUE2] )

Create a new entry

=cut

sub new
	{
	my( $class, %args ) = @_;
	
	bless { %args }, $class
	}

=item path

=item version

=item package_name

Access values of the entry.

=cut

sub path         { $_[0]->{path} }
sub version      { $_[0]->{version} }
sub package_name { $_[0]->{'package name'} }
	
=item as_string( @column_names )

Formats the Entry as text. It joins with whitespace the values for the 
column names you pass it. You get the newline automatically.

Any values that are not defined (or the empty string) turn into the
literal string 'undef' to preserve the columns in the output.

=cut

sub as_string
	{
	my( $self, @columns ) = @_;
	
	no warnings 'uninitialized';
	# can't check defined() because that let's the empty string through
	return join( "\t", 
		map { length $self->{$_} ? $self->{$_} : 'undef' } @columns 
		) . "\n";
	}

=back

=head1 TO DO

=head1 SEE ALSO


=head1 SOURCE AVAILABILITY

This source is in Github:

	http://github.com/briandfoy/cpan-packagedetails
	
=head1 AUTHOR

brian d foy, C<< <bdfoy@cpan.org> >>

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2009, brian d foy, All Rights Reserved.

You may redistribute this under the same terms as Perl itself.

=cut

1;