Group
Extension

Rex-Repositorio/lib/Rex/Repositorio/Server/Docker/Search.pm

#
# (c) Jan Gehring <jan.gehring@gmail.com>
#
# vim: set ts=2 sw=2 tw=0:
# vim: set expandtab:

package Rex::Repositorio::Server::Docker::Search;

use Mojo::Base 'Mojolicious::Controller';
use File::Spec;
require IO::All;
use JSON::XS;
use Data::Dumper;

our $VERSION = '1.2.1'; # VERSION

sub search {
  my ($self) = @_;

  my $repo_dir =
    File::Spec->catdir( $self->app->get_repo_dir( repo => $self->repo->{name} ),
    "repository" );

  my @json_files;
  my @dirs = ($repo_dir);
  for my $dir (@dirs) {
    opendir( my $dh, $dir );
    while ( my $entry = readdir($dh) ) {
      next if ( $entry =~ m/^\./ );
      if ( -d File::Spec->catdir( $dir, $entry ) ) {
        push @dirs, File::Spec->catdir( $dir, $entry );
      }
      if ( -f File::Spec->catfile( $dir, $entry, "repo.json" ) ) {
        push @json_files, File::Spec->catfile( $dir, $entry, "repo.json" );
      }
    }
    closedir($dh);
  }

  my $search = $self->param("q");

  my @search_result =
    map {
    my @_t = split( /\//, $_ );
    {
      description => '',
      name        => "$_t[-3]/$_t[-2]",
      }
    }
    grep { m/\Q$search\E/ } @json_files;

  my $ret = {
    num_results => 1,
    query       => $search,
    results     => \@search_result,
  };

  $self->render( json => $ret );
}

1;


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.