OSDN Git Service

Model::Base: add on_start_up function
authorhylom <hylom@users.sourceforge.jp>
Mon, 21 Nov 2016 10:37:27 +0000 (19:37 +0900)
committerhylom <hylom@users.sourceforge.jp>
Mon, 21 Nov 2016 10:37:27 +0000 (19:37 +0900)
src/newslash_web/lib/Newslash/Model/Base.pm
src/newslash_web/lib/Newslash/Model/Loader.pm
src/newslash_web/lib/Newslash/Web.pm

index 6854587..41e242a 100644 (file)
@@ -31,6 +31,31 @@ sub import {
     feature->import(':5.10');
 }
 
+sub on_start_up {
+    return 1;
+}
+
+sub table_exists {
+    my ($self, $table) = @_;
+
+    my $dbh = $self->connect_db;
+    my $DB_NAME = $self->{options}->{Database}->{name};
+
+    my $sql = <<"EOSQL";
+SELECT * FROM information_schema.TABLES
+  WHERE TABLE_SCHEMA = ?
+    AND TABLE_NAME = ?
+EOSQL
+    my $sth = $dbh->prepare($sql);
+    $sth->execute($DB_NAME, $table);
+    my $rs = $sth->fetchall_arrayref({});
+    $dbh->disconnect;
+    if (@$rs == 0) {
+        return;
+    }
+    return 1;
+}
+
 sub new {
   my ($class, $options) = @_;
   bless {options => $options, _error => undef}, $class;
index a1ab7cb..101424f 100644 (file)
@@ -12,9 +12,11 @@ sub import {
     my $caller = caller;
 
     {
+        # export functions
         no strict 'refs';
         *{"$caller\::load"} = \&load_model;
         *{"$caller\::loader"} = \&loader;
+        *{"$caller\::startup"} = \&startup;
     }
 
     $_->import for qw(strict warings utf8);
@@ -24,7 +26,7 @@ sub import {
 state $models;
 
 sub loader {
-    my ($self, $opts) = @_;
+    my ($opts) = @_;
     my $r = $models;
     return sub {
         my $caller = shift;
@@ -47,5 +49,15 @@ sub load_model {
     $models->{$accessor} = $class;
 }
 
+sub startup {
+    my $opts = shift;
+    return 1 if !$models;
+    for my $k (keys %$models) {
+        my $m = $models->{$k}->new($opts);
+        return if !$m->on_start_up;
+    }
+    return 1;
+}
+
 1;
 
index ecb801a..4134cab 100644 (file)
@@ -32,7 +32,8 @@ sub startup {
     # add Model
     my $model_opts = $app->config;
     $model_opts->{Logger} = $app->log;
-    $app->helper(model => Newslash::Model->loader($model_opts));
+    $app->helper(model => Newslash::Model::loader($model_opts));
+    Newslash::Model::startup($model_opts);
 
     # use Template::Toolkit 2 render
     $app->plugin('Newslash::Plugin::TT2Renderer');