use MojoFacets::Import::File;
use MojoFacets::Import::HTMLTable;
use MojoFacets::Import::CSV;
+use MojoFacets::Import::CouchDB;
+use MojoFacets::Import::SQL;
our $loaded;
our $filters;
} elsif ( -d $file && $file =~ m/\.html$/ ) {
$file =~ s/$data_dir\/*//;
push @files, $file;
- } elsif ( -f $file && $file =~ m/\.csv$/i ) {
- $file =~ s/$data_dir\/*//;
- push @files, $file;
- } elsif ( -f $file && $file =~ m/\.storable/i ) {
+ } elsif ( -f $file && $file =~ m/\.(csv|storabe|couchdb|sql)$/i ) {
$file =~ s/$data_dir\/*//;
push @files, $file;
} else {
if ( -f $full_path ) {
if ( $full_path =~ m/.csv/i ) {
$data = MojoFacets::Import::CSV->new( full_path => $full_path )->data;
+ } elsif ( $full_path =~ m/.sql/i ) {
+ $data = MojoFacets::Import::SQL->new( full_path => $full_path )->data;
+ } elsif ( $full_path =~ m/.couchdb/i ) {
+ $data = MojoFacets::Import::CouchDB->new( full_path => $full_path )->data;
} elsif ( $full_path =~ m/.storable/ ) {
warn "open $full_path ", -s $full_path, " bytes";
open(my $pipe, "<", $full_path) || die $!;
}
return $self->redirect_to('/data/items');
+
+ } elsif ( ! $self->session('header') ) {
+ return $self->redirect_to('/data/load');
}
if ( my $id = $self->param('id') ) {
#warn "# filter $name ",dump($filtered_items);
+ # invalidate filters on other datasets
+ foreach my $dataset ( grep { exists $loaded->{$_}->{filters}->{$name} } keys %$loaded ) {
+ delete $loaded->{$dataset}->{filters}->{$name};
+ delete $loaded->{$dataset}->{filtered};
+ }
+
$loaded->{$path}->{filters}->{$name} = $filtered_items;
warn "filter $name with ", scalar keys %$filtered_items, " items created\n";
}
#warn "__commit_path_code $path $i ",dump( $update );
}
+# uses templates/admin.html.ep
+sub _switch_dataset {
+ my $self = shift;
+
+ my $datasets;
+
+ foreach my $path ( keys %$loaded ) {
+ next unless exists $loaded->{$path}->{data};
+ push @$datasets, $path;
+ }
+
+ warn "# datasets ",dump($datasets);
+
+ $self->stash( 'datasets' => $datasets );
+}
+
sub items {
my $self = shift;
+ $self->_switch_dataset;
+
if ( my $show = $self->param('id') ) {
$self->param('show', $show);
warn "show $show\n";
warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort";
- my $code_depends = $self->param('code_depends')||
- join(',', sort grep { $test_changed->{$_} == 0 } keys %$test_changed );
+ my $depends_on;
+ my $tmp = $code; $tmp =~ s/\$row->{(['"]?)(\w+)\1/$depends_on->{$2}++/gse;
+ warn "# depends_on ",dump $depends_on;
+
+ my $test_added = Storable::dclone $test_changed;
+ delete $test_added->{$_} foreach keys %$depends_on;
+
+ my $code_depends = $self->param('code_depends')
+ || join(',', keys %$depends_on);
+
my $code_description = $self->param('code_description') ||
- join(',', @added_columns);
+ join(',', keys %$test_added);
$code_depends ||= $code_description; # self-modifing
if ( ! $code_depends && $out ) {
keys %$loaded;
}
-sub unlink {
+sub remove {
my $self = shift;
my $path = $self->param('path');
- if ( $path =~ m{^/tmp/mojo_facets.} ) {
+ if ( $path =~ m{^/tmp/mojo_facets\.} ) {
unlink $path;
warn "# unlink $path";
+ if ( my $name = $self->param('name') ) {
+ delete $loaded->{$name};
+ warn "# remove $name from memory";
+ }
} else {
warn "WARNING: $path unlink ignored";
}