chiark / gitweb /
Remove the clone-and-hack database initialisation from web scripts
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Aug 2009 20:35:58 +0000 (21:35 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Aug 2009 20:35:58 +0000 (21:35 +0100)
.gitignore
yarrg/CommodsDatabase.pm
yarrg/CommodsWeb.pm [new file with mode: 0644]
yarrg/web/pirate-island
yarrg/web/pirates

index 5796988..a058839 100644 (file)
@@ -13,3 +13,4 @@ yarrg/yarrg
 yarrg/_*.*
 yarrg/OCEAN-*.db
 yarrg/Writer.lock
+yarrg/DATA
index 6f2f627..2ea674d 100644 (file)
@@ -44,7 +44,7 @@ BEGIN {
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
     @EXPORT      = qw(&db_setocean &db_writer &db_connect $dbh
-                     &db_filename &db_doall &db_onconflict);
+                     &db_filename &db_doall &db_onconflict &db_setdatadir);
     %EXPORT_TAGS = ( );
 
     @EXPORT_OK   = qw();
@@ -52,10 +52,14 @@ BEGIN {
 
 our $dbfn;
 our $dbh;
+our $datadir= '.';
 
+sub db_setdatadir ($) {
+    $datadir= $_[0];
+}
 sub db_setocean ($) {
     my ($oceanname) = @_;
-    $dbfn= "OCEAN-$oceanname.db";
+    $dbfn= "$datadir/OCEAN-$oceanname.db";
 }
 sub db_filename () {
     return $dbfn;
@@ -89,6 +93,7 @@ sub db_writer () {
 }
 
 sub db_connect () {
+    return if $dbh;
     $dbh= DBI->connect("dbi:SQLite:$dbfn",'','',
                       { AutoCommit=>0,
                         RaiseError=>1, ShowErrorStatement=>1,
diff --git a/yarrg/CommodsWeb.pm b/yarrg/CommodsWeb.pm
new file mode 100644 (file)
index 0000000..3e3b59e
--- /dev/null
@@ -0,0 +1,56 @@
+# This is part of ypp-sc-tools, a set of third-party tools for assisting
+# players of Yohoho Puzzle Pirates.
+#
+# Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+# are used without permission.  This program is not endorsed or
+# sponsored by Three Rings.
+
+# This package is used by the Mason scripts in yarrg/web/.
+# We look for a symlink DATA to the actual data to use, so that
+# the data uploader and website displayer can use different code.
+
+package CommodsWeb;
+
+use strict;
+use warnings;
+
+use DBI;
+use POSIX;
+
+use Commods;
+use CommodsDatabase;
+
+BEGIN {
+    use Exporter ();
+    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
+    $VERSION     = 1.00;
+    @ISA         = qw(Exporter);
+    @EXPORT      = qw();
+    %EXPORT_TAGS = ( );
+
+    @EXPORT_OK   = qw();
+}
+
+for my $dir (@INC) {
+    if ($dir =~ m/\.perl-lib$/) {
+       db_setdatadir("$dir/DATA");
+       last;
+    }
+}
+
+1;
index a41410e..67b4cfb 100644 (file)
@@ -16,18 +16,7 @@ $sth->execute();
 </form>
 
 <%init>
-
-use DBI;
-
-our $dbh;
-our $dbfn;
-$dbfn= "/home/ijackson/things/ypp-sc-tools.pctb-dict-test/yarrg/OCEAN-Midnight.db";
-
-    $dbh=DBI->connect("dbi:SQLite:$dbfn",'','',
-                       { AutoCommit=>0,
-                         RaiseError=>1, ShowErrorStatement=>1,
-                         unicode=>1 })
-        or die "$dbfn $DBI::errstr ?"
-       unless $dbh;
-
+use CommodsWeb;
+db_setocean('Midnight');
+db_connect();
 </%init>
index 5378cf4..158239d 100644 (file)
@@ -21,19 +21,6 @@ $sth->execute();
 <input type=submit name=submit value="Go">
 </form>
 
-
-use DBI;
-
-our $dbh;
-our $dbfn;
-$dbfn= "/home/ijackson/things/ypp-sc-tools.pctb-dict-test/yarrg/OCEAN-Midnight.db";
-    $dbh=DBI->connect("dbi:SQLite:$dbfn",'','',
-                       { AutoCommit=>0,
-                         RaiseError=>1, ShowErrorStatement=>1,
-                         unicode=>1 })
-        or die "$dbfn $DBI::errstr ?";
-    # default timeout is 30s which is plenty
-
 my $sth=$dbh->prepare(
     "SELECT a.commodname,b.price,c.price,d.stallname,e.islandname
      FROM commods as a
@@ -64,3 +51,9 @@ $sth->execute();
 
 </BODY>
 </HTML>
+
+<%init>
+use CommodsWeb;
+db_setocean('Midnight');
+db_connect();
+</%init>