41c168a0c3243b405d76641723618d5b9584cba6
[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 HTML::TableExtract;
9 use File::Slurp;
10 use Data::Dump qw(dump);
11 use JSON;
12
13 __PACKAGE__->attr('path');
14 __PACKAGE__->attr('full_path');
15
16 sub data {
17         my $self = shift;
18
19         my $path = $self->path;
20
21         my $data = read_file $self->full_path, { binmode => ':cp1250' }; # FIXME configurable!
22
23         my @lines = split(/\r?\n/, $data);
24         $data = { items => [] };
25
26         my $delimiter = qr/;/;
27
28         shift @lines; # FIXME ship non-header line
29         my $header_line = shift @lines;
30
31         my @header = split( $delimiter, $header_line );
32         warn "# header ",dump( @header );
33
34         while ( my $line = shift @lines ) {
35                 chomp $line;
36                 my @v = split($delimiter, $line);
37                 my $item;
38                 foreach my $i ( 0 .. $#v ) {
39                         $item->{ $header[$i] || "f_$i" } = [ $v[$i] ];
40                 }
41                 push @{ $data->{items} }, $item;
42         }
43
44         $data->{header} = [ @header ];
45         
46         return $data;
47
48 }
49
50 1