use Storable;
use Time::HiRes qw(time);
use File::Path qw(mkpath);
-use Text::Unaccent;
+use Text::Unaccent::PurePerl;
use Digest::MD5;
use Statistics::Descriptive;
sub index {
my $self = shift;
- my $data_dir = $self->app->home->rel_dir('data');
+ my $data_dir = $self->app->home->rel_file('data');
die "no data dir $data_dir" unless -d $data_dir;
my @files;
find( sub {
my $file = $File::Find::name;
- if ( -f $file && $file =~ m/([^\/]+)\.changes\/(\d+\.\d+.+)/ ) {
+
+ next if $file =~ m/.timefmt$/;
+
+ if ( -f $file && $file =~ m/([^\/]+)\.changes\/(\d+[\.,]\d+.+)/ ) {
push @{ $changes->{$1} }, $2
} elsif ( import_module( $file ) ) {
+ my $mtime = (stat($file))[9]; # mtime
$file =~ s/$data_dir\/*//;
push @files, $file;
+ $loaded->{$file}->{mtime} ||= $mtime;
} else {
#warn "IGNORE: $file\n";
}
sub _dump_path {
my ( $self, $name ) = @_;
- my $dir = $self->app->home->rel_dir('data');
+ my $dir = $self->app->home->rel_file('data');
$name =~ s/^$dir//;
$name =~ s/\/+/_/g;
return '/tmp/mojo_facets.' . $name . '.storable';
$loaded->{ $path } = $info;
$self->_save( $path ) unless $info->{generated};
+ my $timefmt_path = $self->_permanent_path( 'timefmt' );
+ if ( -e $timefmt_path ) {
+ $self->session( 'timefmt', read_file $timefmt_path );
+ }
+
}
sub load {
my $self = shift;
- my @paths = $self->every_param('paths');
+ my @paths = @{ $self->every_param('paths') };
warn "# paths ", dump @paths;
foreach my $p ( keys %$loaded ) {
sub _permanent_path {
my $self = shift;
my $path = $self->_param_or_session('path');
- $self->app->home->rel_dir('data') . '/' . join('.', $path, @_);
+ $self->app->home->rel_file('data') . '/' . join('.', $path, @_);
}
sub __unac {
warn "no path in param or session";
return;
}
- my $dir = $self->app->home->rel_dir('public') . "/export/$path";
+ my $dir = $self->app->home->rel_file('public') . "/export/$path";
mkpath $dir unless -e $dir;
my $name = __export_path_name( $path, @_ );
my $full = $dir . '/' . $name;
my $self = shift;
my $name = $self->param('filter_name') || die "name?";
- my @vals = $self->param('filter_vals');
+ my @vals = @{ $self->every_param('filter_vals') };
$self->_remove_filter( $name );
if ( @vals ) {
$self->_switch_dataset;
+ if ( my $timefmt = $self->param('timefmt') ) {
+ $self->session('timefmt', $timefmt);
+ warn "session store timefmt $timefmt\n";
+ my $timefmt_path = $self->_permanent_path( 'timefmt' );
+ write_file $timefmt_path, $timefmt;
+ warn "## $timefmt_path $timefmt"
+ }
+
if ( my $show = $self->param('id') ) {
$self->param('show', $show);
warn "show $show\n";
$code =~ s{\n+$}{\n}s;
# XXX convert @row->{foo} into @{$row->{foo}}
- $code =~ s|\@(row->{[^}]+})|\@{\$$1}|gs;
+ $code =~ s|\@(row->\{[^}]+\})|\@{\$$1}|gs;
my $commit = $self->param('commit');
my $test = $self->param('test');
if ( $code && ( $test || $commit ) ) {
# XXX find columns used in code snippet and show them to user
my $order = 0;
- foreach my $column ( $code =~ m/\$row->{([^}]+)}/g ) {
+ foreach my $column ( $code =~ m/\$row->\{([^}]+)\}/g ) {
if ( $column =~ s/^(['"])// ) {
$column =~ s/$1$//;
}
}
}
- my $code_path = $self->app->home->rel_dir('public') . "/code";
+ my $code_path = $self->app->home->rel_file('public') . "/code";
if ( $commit ) {
__path_modified( $path, 'commit' );
warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort";
my $depends_on;
- my $tmp = $code; $tmp =~ s/\$row->{(['"]?)([\w\s]+)\1/$depends_on->{$2}++/gse;
+ my $tmp = $code; $tmp =~ s/\$row->\{(['"]?)([\w\s]+)\1/$depends_on->{$2}++/gse;
warn "# depends_on ",dump $depends_on;
my $test_added = Storable::dclone $test_changed;
sub export {
my $self = shift;
- my $dir = $self->app->home->rel_dir('public');
+ my $dir = $self->app->home->rel_file('public');
if ( my $import = $self->param('import') ) {