App-Netdisco
view release on metacpan or search on metacpan
lib/App/Netdisco/Util/Web.pm view on Meta::CPAN
package App::Netdisco::Util::Web;
use strict;
use warnings;
use Dancer ':syntax';
use Time::Piece;
use Time::Seconds;
use base 'Exporter';
our @EXPORT = ();
our @EXPORT_OK = qw/
sort_port sort_modules
interval_to_daterange
sql_match
request_is_device
request_is_api
request_is_api_report
request_is_api_search
/;
our %EXPORT_TAGS = (all => \@EXPORT_OK);
=head1 NAME
App::Netdisco::Util::Web
=head1 DESCRIPTION
A set of helper subroutines to support parts of the Netdisco application.
There are no default exports, however the C<:all> tag will export all
subroutines.
=head1 EXPORT_OK
=head2 request_is_device
Client has requested device content under C<.../device> or C<.../device/ports>.
=cut
sub request_is_device {
return (
index(request->path, uri_for('/device')->path) == 0
or
index(request->path, uri_for('/ajax/content/device/details')->path) == 0
or
index(request->path, uri_for('/ajax/content/device/ports')->path) == 0
);
}
=head2 request_is_api
Client has requested JSON format data and an endpoint under C</api>.
=cut
sub request_is_api {
return ((request->accept and request->accept =~ m/(?:json|javascript)/) and (
index(request->path, uri_for('/api/')->path) == 0
or
(param('return_url')
and index(param('return_url'), uri_for('/api/')->path) == 0)
));
}
=head2 request_is_api_report
Same as C<request_is_api> but also requires path to start "C</api/v1/report/...>".
=cut
sub request_is_api_report {
return (request_is_api and (
index(request->path, uri_for('/api/v1/report/')->path) == 0
or
(param('return_url')
and index(param('return_url'), uri_for('/api/v1/report/')->path) == 0)
));
}
=head2 request_is_api_search
Same as C<request_is_api> but also requires path to start "C</api/v1/search/...>".
=cut
sub request_is_api_search {
return (request_is_api and (
index(request->path, uri_for('/api/v1/search/')->path) == 0
or
(param('return_url')
and index(param('return_url'), uri_for('/api/v1/search/')->path) == 0)
));
}
=head2 sql_match( $value, $exact? )
Convert wildcard characters "C<*>" and "C<?>" to "C<%>" and "C<_>"
respectively.
Pass a true value to C<$exact> to only substitute the existing wildcards, and
not also add "C<*>" to each end of the value.
In list context, returns two values, the translated value, and also an
L<SQL::Abstract> LIKE clause.
=cut
sub sql_match {
my ($text, $exact) = @_;
return unless $text;
$text =~ s/^\s+//;
( run in 1.260 second using v1.01-cache-2.11-cpan-524268b4103 )