use Commods;
use CommodsDatabase;
-our $self_url;
-our $base_url;
-
BEGIN {
use Exporter ();
our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
- @EXPORT = qw(&dbw_connect &ocean_list $sourcebasedir
- &to_json &to_json_protecttags
- &set_ctype_utf8);
+ @EXPORT = qw(&dbw_connect &ocean_list &sourcebasedir
+ &to_json_shim &to_json_protecttags
+ &set_ctype_utf8
+ &prettyprint_age &meta_prettyprint_age);
%EXPORT_TAGS = ( );
@EXPORT_OK = qw();
}
-our $datadir='.';
-our $sourcebasedir;
-
-for my $dir (@INC) {
- if ($dir =~ m/\.perl-lib$/) {
- $sourcebasedir= "$dir/..";
- if (stat "$dir/DATA") {
- $datadir= "$dir/DATA";
- } elsif ($!==&ENOENT) {
- $datadir= "$dir";
- } else {
- die "stat $dir/DATA $!";
+sub dotperllibdir () {
+ my $dir;
+
+ for my $dir (@INC) {
+ if ($dir =~ m/\.perl-lib$/) {
+ return $dir;
}
- last;
}
+ die "no appropriate dotperllib dir in @INC";
+}
+
+sub sourcebasedir () {
+ return dotperllibdir().'/..';
+}
+
+sub datadir () {
+ my $edir= $ENV{'YARRG_DATA_DIR'};
+ return $edir if defined $edir;
+ my $dir= dotperllibdir();
+ if (stat "$dir/DATA") {
+ return "$dir/DATA";
+ } elsif ($!==&ENOENT) {
+ return "$dir";
+ } else {
+ die "stat $dir/DATA $!";
+ }
+ return '.';
}
-defined $sourcebasedir or
- die "no source base dir in @INC";
my @ocean_list;
sub ocean_list () {
+ my $datadir= datadir();
if (!@ocean_list) {
my $fn= "$datadir/master-info.txt";
- my $f= new IO::File $fn or die $!;
+ my $f= new IO::File $fn or die "$fn $!";
my @r;
while (<$f>) {
next unless m/^ocean\s+(\S.*\S)\s*$/;
my ($ocean) = @_;
die "unknown ocean $ocean ?"
unless grep { $_ eq $ocean } ocean_list();
- return dbr_connect($datadir, $ocean);
+ return dbr_connect(datadir(), $ocean);
+}
+
+sub to_json_shim ($) {
+ my ($obj) = @_;
+ # In JSON.pm 2.x, jsonToObj prints a warning to stderr which
+ # our callers don't like at all.
+ if ($JSON::VERSION >= 2.0) {
+ return to_json($obj);
+ } else {
+ return objToJson($obj);
+ }
}
sub to_json_protecttags ($) {
my ($v) = @_;
- my $j= to_json($v);
+ my $j= to_json_shim($v);
$j =~ s,/,\\/,g;
return $j;
}
+sub meta_prettyprint_age ($$$) {
+ my ($age,$floor,$plus) = @_;
+ return <<END;
+ $age < 60 ? 'less than a minute' :
+ $age < 60*2 ? '1 minute' :
+ $age < 3600*2 ? $floor ($age/60) $plus' minutes' :
+ $age < 86400*2 ? $floor ($age/3600) $plus ' hours' :
+ $floor ($age/86400) $plus ' days';
+END
+};
+
+BEGIN { eval '
+ sub prettyprint_age ($) {
+ my ($age) = @_;
+ '.meta_prettyprint_age('$age','floor','.').'
+ };
+ 1;
+' or die "$@";
+}
+
+
1;