260c0022b6881986ca98f23bce7339e1c1e50b35
[MojoFacets.git] / lib / MojoFacets / Import / CSV.pm
1 package MojoFacets::Import::CSV;
2
3 use warnings;
4 use strict;
5
6 use base 'Mojo::Base';
7
8 use Text::CSV;
9 use Data::Dump qw(dump);
10
11 __PACKAGE__->attr('full_path');
12
13 sub data {
14         my $self = shift;
15
16         my $path = $self->full_path;
17
18         my $encoding = 'utf-8';
19         if ( $path =~ m/\.(\w+).csv/i ) {
20                 $encoding = $1;
21         }
22
23         my $data = { items => [] };
24         my @header;
25
26         my $csv = Text::CSV->new ( { binary => 1, eol => $/ } )
27                 or die "Cannot use CSV: ".Text::CSV->error_diag ();
28
29         open my $fh, "<:encoding($encoding)", $path or die "$path: $!";
30         while ( my $row = $csv->getline( $fh ) ) {
31                 if ( ! @header ) {
32                         @header = @$row;
33                         next;
34                 }
35                 my $item;
36                 foreach my $i ( 0 .. $#{$row} ) {
37                         $item->{ $header[$i] || "f_$i" } = [ $row->[$i] ];
38                 }
39                 push @{ $data->{items} }, $item;
40         }
41
42         $csv->eof or $csv->error_diag();
43         close $fh;
44
45         $data->{header} = [ @header ];
46         
47         return $data;
48
49 }
50
51 1