@EXPORT = qw(&dbw_connect &ocean_list &sourcebasedir
&to_json_shim &to_json_protecttags
&set_ctype_utf8
+ &expected_error &dbw_lookup_string
&prettyprint_age &meta_prettyprint_age);
%EXPORT_TAGS = ( );
@EXPORT_OK = qw();
}
-sub sourcebasedir () {
+sub dotperllibdir () {
my $dir;
for my $dir (@INC) {
if ($dir =~ m/\.perl-lib$/) {
- $dir= "$dir/..";
- last;
+ return $dir;
}
}
- defined $dir or
- die "no source base dir in @INC";
- return $dir;
+ die "no appropriate dotperllib dir in @INC";
+}
+
+sub sourcebasedir () {
+ return dotperllibdir().'/..';
}
-my datadir () {
- my $dir= sourcebasedir();
+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) {
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 $fn= "$datadir/source-info.txt";
+ my $f= new IO::File $fn or die "$fn $!";
my @r;
while (<$f>) {
next unless m/^ocean\s+(\S.*\S)\s*$/;
}
+sub dbw_lookup_string ($$$$$$$$) { # => ( $emsg, @dbresults )
+ my ($each,
+ $sth, $stmt_nqs, $abbrev_initials, $maxambig,
+ $em_nomatch, $em_manyambig, $emf_ambiguous) = @_;
+
+ $each =~ s/^\s*//; $each =~ s/\s*$//; $each =~ s/\s+/ /g;
+ my %m;
+ my $results;
+ my @pats= ("$each", "$each \%", "$each\%", "\%$each\%");
+ if ($abbrev_initials) {
+ push @pats, join ' ', map { "$_%" } split //, $each;
+ }
+ foreach my $pat (@pats) {
+ $sth->execute(($pat) x $stmt_nqs);
+ $results= $sth->fetchall_arrayref();
+ last if @$results==1;
+ $m{ $_->[0] }=1 for @$results;
+ $results= undef;
+ }
+ if (!$results) {
+ if (!%m) {
+ return $em_nomatch;
+ } elsif (keys(%m) > $maxambig) {
+ return $em_manyambig;
+ } else {
+ return $emf_ambiguous->($each, join(', ', sort keys %m));
+ }
+ }
+ return (undef, @{ $results->[0] });
+}
+
+sub expected_error ($) {
+ my $r= { Emsg => $_[0] };
+ bless $r, 'CommodsWeb::ExpectedError';
+ die $r;
+}
+
+package CommodsWeb::ExpectedError;
+
+sub emsg ($) {
+ my ($self) = @_;
+ return $self->{Emsg};
+}
+
1;