Data::Package::CSV - A Data::Package class for CSV data using Parse::CSV


Data-Package-CSV documentation Contained in the Data-Package-CSV distribution.

Index


Code Index:

NAME

Top

Data::Package::CSV - A Data::Package class for CSV data using Parse::CSV

DESCRIPTION

Top

The Data::Package::CSV package provides a subclass of Data::Package::File that provides data from a CSV file by integrating with Parse::CSV.

METHODS

Top

csv_options

The cvs_options method is the most direct method, with full control over the creation of the Parse::CSV object. If a fully compliant options hash is returned (as a list) then no other methods need to be defined.

The list returned by the cvs_options method will be passed directly to the Parse::CSV constructor. Read the documentation for Parse::CSV for more details on what you should return to match your data.

By default, the null list is return, specifying entirely default options to the Parse::CSV constructor (array mode) and not specifying any filters or parsing variations.

If it list that is returned does not have either a data source (either a handle param or file param) then the file method for the parent class will be called to locate a file.

SUPPORT

Top

Bugs should always be submitted via the CPAN bug tracker.

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-Package-CSV

For other issues, contact the maintainer

AUTHOR

Top

Adam Kennedy <adamk@cpan.org>

COPYRIGHT

Top


Data-Package-CSV documentation Contained in the Data-Package-CSV distribution.
package Data::Package::CSV;

use 5.005;
use strict;
use base 'Data::Package::File';
use Parse::CSV     ();

use vars qw{$VERSION};
BEGIN {
	$VERSION = '1.01';
}

sub import {
	return 1 if $_[0] eq __PACKAGE__;
	return shift->SUPER::import(@_);
}





#####################################################################
# Data::Package::CSV Methods

sub csv_options {
	return ();
}





#####################################################################
# Data::Package Methods

sub _provides {
	my @provides = shift->SUPER::_provides(@_);
	return ( 'Parse::CSV', @provides );
}

sub __as_Parse_CSV {
	my $class = ref($_[0]) || $_[0];

	# Get the main options
	my %options = $class->csv_options;
	unless ( $options{handle} or $options{file} ) {
		delete $options{file};
		delete $options{handle};

		# Locate the data
		my $file = $class->file;
		if ( $file ) {
			$options{file} = $class->file;
			delete $options{handle};
		} else {
			die "No CSV file found for $class";		
		}
	}

	# Create the parser object
	my $parse_csv = Parse::CSV->new( %options );
	unless ( $parse_csv ) {
		die "Failed to create Parse::CSV object for $class";
	}

	return $parse_csv;
}

1;