extract path from full_path if missing
[MojoFacets.git] / lib / MojoFacets / Code.pm
1 package MojoFacets::Code;
2
3 use strict;
4 use warnings;
5
6 use base 'Mojolicious::Controller';
7
8 use Data::Dump qw(dump);
9 use File::Slurp;
10
11 sub _code_dir { $_[0]->app->home->rel_dir('public') . '/code' }
12
13 sub index {
14         my $self = shift;
15
16         return $self->redirect_to('/data/columns') unless $self->session('columns');
17         my $columns = { map { $_ => 1 } @{ $self->session('columns') } };
18
19         if ( $self->param('all_columns') ) {
20                 $columns->{$_} = 1 foreach @{ $self->session('header') }
21         }
22
23         my $dir = $self->_code_dir;
24
25         my $snippets;
26         my $no_deps;
27
28         foreach my $full_path ( glob("$dir/*.pl") ) {
29                 my $path = $full_path;
30                 $path =~ s/^$dir\/*//;
31                 $path =~ s/\.pl$//;
32                 my ( $depends, $description ) = split(/\./,$path,2);
33
34                 my @deps = split(/,/,$depends);
35                 my $found = -1;
36                 $found += $columns->{$_} foreach @deps;
37 warn "# depends $depends $found $#deps\n";
38
39                 if ( $found != $#deps ) {
40                         $self->param('all_code') ? $no_deps->{$depends}->{$description}++ : next;
41                 }
42
43                 $snippets->{$depends}->{$description} = read_file $full_path, binmode => ':utf8';
44         }
45
46 warn "# no_deps ",dump($no_deps);
47
48         $self->render(
49                 snippets => $snippets,
50                 no_deps => $no_deps,
51         );
52 }
53
54 sub remove {
55         my $self = shift;
56         if ( my $path = $self->param('path') ) {
57                 unlink $self->_code_dir . '/' . $path;
58         }
59         return $self->redirect_to('/code');
60 }
61
62 1;