package Smolder::Util;
use Smolder::Conf qw(HostName UrlBase Port);
use strict;
use warnings;
=head1 NAME
Smolder::Util
=head1 DESCRIPTION
Collection of various useful routines for Smolder
=head1 ROUTINES
=head2 pass_fail_color
Given a ratio, will return an RRGGBB color suitable for a web page
as a visual indicator of a test's success. Green == 100%, Red == 0%.
=cut
# adapted from Test::TAP::Model::Visual
sub pass_fail_color {
my $ratio = shift;
# handle percentages
$ratio = $ratio / 100 if $ratio > 1;
my @start_color = ('255', '00', '00'); # ff0000
my @end_color = ('00', '255', '00'); # 00ff00
my @color_pieces;
if ($ratio == 1) {
@color_pieces = @end_color;
} elsif ($ratio == 0) {
@color_pieces = @start_color;
} else {
@color_pieces = ('255', 100 + ((255 - 100) * $ratio), 100 - 20,);
}
return sprintf('%02x%02x%02x', @color_pieces);
}
=head2 format_time
Given a number of seconds, format it as string of the format
C<HH:MM:SS> or C<MM:SS> or C<SS>.
Smolder::Util::format_time(1000); # prints 16:40
Smolder::Util::format_time(35); # prints 35
Smolder::Util::format_time(100); # prints 1:40
=cut
sub format_time {
my $secs = shift;
return $secs if $secs < 60;
my $hour = int($secs / 3600);
my $min = int(($secs % 3600) / 60);
my $sec = $secs % 60;
if ($hour) {
return sprintf('%i:%02i:%02i', $hour, $min, $sec);
} elsif ($min) {
return sprintf('%i:%02i', $min, $sec);
}
}
=head2 url_base
This method will return either the base url for the installed version of
Smolder or the value of the UrlBase configuration option. UrlBase
is useful for configurations where Smolder is hosted behind a proxy.
=cut
{
my $_base;
if (UrlBase) {
$_base = UrlBase;
}
else {
$_base = 'http://' . HostName . (Port == 80 ? '' : ':' . Port);
}
sub url_base { $_base }
}
1;