package MyApp::Controller::Factoids; use Mojo::Base 'Mojolicious::Controller', -signatures; use URI::Encode; my $my_encode = sub ($part) { return URI::Encode::uri_encode($part, {encode_reserved => 1}); }; # This action will render a template sub welcome ($self) { my $configs = $self->app->factdb->get_namespaces(); # Render template "example/welcome.html.ep" with message $self->render(uenc => $my_encode, configs => $configs); } sub _get_namespace ($self) { my $server = $self->stash("server"); my $namespace = $self->stash("names"); my $real_server = defined($server) && $server eq "*" ? undef : $server; my $real_namespace = defined($namespace) && $namespace eq "##NULL" ? undef : $namespace; return ($real_server, $real_namespace, $server, $namespace); } sub display ($self) { # Render template "example/welcome.html.ep" with message my ($real_server, $real_namespace, $server, $namespace) = $self->_get_namespace(); my $factoids; if (my $cached = $self->app->mcache->get("facts:$server:$namespace")) { say ("Found Cached factoid list"); $factoids = $cached; } else { say ("Doing DB Lookup"); $factoids = $self->app->factdb->get_factoids($real_server, $real_namespace); $self->app->mcache->set("facts:$server:$namespace", $factoids); } $self->render(uenc => $my_encode, factoids => $factoids, server => $server, namespace => $namespace, real_server => $real_server, real_namespace => $real_namespace); } sub revisions ($self) { my ($real_server, $real_namespace, $server, $namespace) = $self->_get_namespace(); my $factoid = $self->param("fact") // "hi"; my $revisions = $self->app->factdb->get_revisions($factoid, $real_server, $real_namespace); $self->render(uenc => $my_encode, revisions => $revisions, factoid => $factoid, server => $server, namespace => $namespace, real_server => $real_server, real_namespace => $real_namespace); } sub search ($self) { my ($real_server, $real_namespace, $server, $namespace) = $self->_get_namespace(); my $query = $self->param("q"); my $results; if ($query) { $results = $self->app->factdb->search_factoids($query, $real_server, $real_namespace); } $self->render(uenc => $my_encode, query => $query, results => $results, server => $server, namespace => $namespace, real_server => $real_server, real_namespace => $real_namespace); } 1